@mui/x-date-pickers 8.0.0-beta.1 → 8.0.0-beta.3

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 (477) hide show
  1. package/CHANGELOG.md +235 -0
  2. package/DateCalendar/DateCalendar.js +4 -8
  3. package/DateCalendar/DayCalendar.js +2 -2
  4. package/DateField/DateField.js +4 -4
  5. package/DatePicker/shared.js +3 -9
  6. package/DateTimeField/DateTimeField.js +4 -4
  7. package/DateTimePicker/shared.js +3 -13
  8. package/DesktopDatePicker/DesktopDatePicker.js +2 -1
  9. package/DesktopDateTimePicker/DesktopDateTimePicker.js +2 -1
  10. package/DesktopTimePicker/DesktopTimePicker.js +2 -1
  11. package/DigitalClock/DigitalClock.js +1 -0
  12. package/LocalizationProvider/LocalizationProvider.d.ts +1 -1
  13. package/LocalizationProvider/LocalizationProvider.js +2 -2
  14. package/MobileDatePicker/MobileDatePicker.js +2 -1
  15. package/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
  16. package/MobileTimePicker/MobileTimePicker.js +2 -1
  17. package/MonthCalendar/MonthCalendar.js +4 -9
  18. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -0
  19. package/PickersActionBar/PickersActionBar.d.ts +1 -1
  20. package/PickersActionBar/PickersActionBar.js +21 -3
  21. package/PickersSectionList/PickersSectionList.d.ts +1 -1
  22. package/PickersSectionList/PickersSectionList.types.d.ts +2 -6
  23. package/StaticDatePicker/StaticDatePicker.js +2 -1
  24. package/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
  25. package/StaticTimePicker/StaticTimePicker.js +2 -1
  26. package/TimeField/TimeField.js +4 -4
  27. package/TimePicker/shared.js +3 -3
  28. package/YearCalendar/YearCalendar.js +4 -10
  29. package/esm/DateCalendar/DateCalendar.js +6 -10
  30. package/esm/DateCalendar/DayCalendar.js +2 -2
  31. package/esm/DateField/DateField.js +4 -4
  32. package/esm/DatePicker/shared.js +3 -9
  33. package/esm/DateTimeField/DateTimeField.js +4 -4
  34. package/esm/DateTimePicker/shared.js +4 -14
  35. package/esm/DesktopDatePicker/DesktopDatePicker.js +2 -1
  36. package/esm/DesktopDateTimePicker/DesktopDateTimePicker.js +2 -1
  37. package/esm/DesktopTimePicker/DesktopTimePicker.js +2 -1
  38. package/esm/DigitalClock/DigitalClock.js +1 -0
  39. package/esm/LocalizationProvider/LocalizationProvider.d.ts +1 -1
  40. package/esm/LocalizationProvider/LocalizationProvider.js +2 -2
  41. package/esm/MobileDatePicker/MobileDatePicker.js +2 -1
  42. package/esm/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
  43. package/esm/MobileTimePicker/MobileTimePicker.js +2 -1
  44. package/esm/MonthCalendar/MonthCalendar.js +6 -11
  45. package/esm/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -0
  46. package/esm/PickersActionBar/PickersActionBar.d.ts +1 -1
  47. package/esm/PickersActionBar/PickersActionBar.js +22 -4
  48. package/esm/PickersSectionList/PickersSectionList.d.ts +1 -1
  49. package/esm/PickersSectionList/PickersSectionList.types.d.ts +2 -6
  50. package/esm/StaticDatePicker/StaticDatePicker.js +2 -1
  51. package/esm/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
  52. package/esm/StaticTimePicker/StaticTimePicker.js +2 -1
  53. package/esm/TimeField/TimeField.js +4 -4
  54. package/esm/TimePicker/shared.js +3 -3
  55. package/esm/YearCalendar/YearCalendar.js +5 -11
  56. package/esm/index.js +1 -1
  57. package/esm/internals/components/PickerProvider.d.ts +9 -0
  58. package/esm/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +1 -0
  59. package/esm/internals/hooks/useDesktopPicker/useDesktopPicker.js +9 -3
  60. package/esm/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +7 -0
  61. package/esm/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
  62. package/esm/internals/hooks/useField/syncSelectionToDOM.d.ts +9 -0
  63. package/esm/internals/hooks/useField/syncSelectionToDOM.js +50 -0
  64. package/esm/internals/hooks/useField/useField.types.d.ts +8 -1
  65. package/esm/internals/hooks/useField/useField.utils.d.ts +1 -3
  66. package/esm/internals/hooks/useField/useField.utils.js +0 -57
  67. package/esm/internals/hooks/useField/useFieldHiddenInputProps.d.ts +20 -0
  68. package/esm/internals/hooks/useField/useFieldHiddenInputProps.js +31 -0
  69. package/esm/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +8 -10
  70. package/esm/internals/hooks/useField/useFieldRootHandleKeyDown.js +1 -0
  71. package/esm/internals/hooks/useField/useFieldRootProps.d.ts +32 -0
  72. package/esm/internals/hooks/useField/useFieldRootProps.js +150 -0
  73. package/esm/internals/hooks/useField/useFieldSectionContainerProps.d.ts +15 -0
  74. package/esm/internals/hooks/useField/useFieldSectionContainerProps.js +29 -0
  75. package/esm/internals/hooks/useField/useFieldSectionContentProps.d.ts +23 -0
  76. package/esm/internals/hooks/useField/useFieldSectionContentProps.js +226 -0
  77. package/esm/internals/hooks/useField/useFieldV7TextField.js +76 -307
  78. package/esm/internals/hooks/useMobilePicker/useMobilePicker.d.ts +1 -0
  79. package/esm/internals/hooks/useMobilePicker/useMobilePicker.js +9 -3
  80. package/esm/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +7 -0
  81. package/esm/internals/hooks/usePicker/usePicker.d.ts +2 -1
  82. package/esm/internals/hooks/usePicker/usePicker.js +14 -4
  83. package/esm/internals/hooks/usePicker/usePicker.types.d.ts +2 -0
  84. package/esm/internals/hooks/useStaticPicker/useStaticPicker.d.ts +1 -0
  85. package/esm/internals/hooks/useStaticPicker/useStaticPicker.js +9 -3
  86. package/esm/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +7 -0
  87. package/esm/internals/index.d.ts +7 -6
  88. package/esm/internals/index.js +6 -5
  89. package/esm/internals/utils/createNonRangePickerStepNavigation.d.ts +13 -0
  90. package/esm/internals/utils/createNonRangePickerStepNavigation.js +24 -0
  91. package/esm/internals/utils/createStepNavigation.d.ts +32 -0
  92. package/esm/internals/utils/createStepNavigation.js +34 -0
  93. package/esm/internals/utils/date-utils.d.ts +1 -0
  94. package/esm/internals/utils/date-utils.js +2 -2
  95. package/esm/internals/utils/time-utils.d.ts +2 -0
  96. package/esm/internals/utils/time-utils.js +4 -3
  97. package/esm/locales/beBY.d.ts +1 -0
  98. package/esm/locales/beBY.js +1 -0
  99. package/esm/locales/bgBG.d.ts +1 -0
  100. package/esm/locales/bgBG.js +1 -0
  101. package/esm/locales/bnBD.d.ts +1 -0
  102. package/esm/locales/bnBD.js +1 -0
  103. package/esm/locales/caES.d.ts +1 -0
  104. package/esm/locales/caES.js +1 -0
  105. package/esm/locales/csCZ.d.ts +1 -0
  106. package/esm/locales/csCZ.js +1 -0
  107. package/esm/locales/daDK.d.ts +1 -0
  108. package/esm/locales/daDK.js +1 -0
  109. package/esm/locales/deDE.d.ts +1 -0
  110. package/esm/locales/deDE.js +3 -3
  111. package/esm/locales/elGR.d.ts +1 -0
  112. package/esm/locales/elGR.js +1 -0
  113. package/esm/locales/enUS.d.ts +1 -0
  114. package/esm/locales/enUS.js +1 -0
  115. package/esm/locales/esES.d.ts +1 -0
  116. package/esm/locales/esES.js +1 -0
  117. package/esm/locales/eu.d.ts +1 -0
  118. package/esm/locales/eu.js +1 -0
  119. package/esm/locales/faIR.d.ts +1 -0
  120. package/esm/locales/faIR.js +1 -0
  121. package/esm/locales/fiFI.d.ts +1 -0
  122. package/esm/locales/fiFI.js +1 -0
  123. package/esm/locales/frFR.d.ts +1 -0
  124. package/esm/locales/frFR.js +1 -0
  125. package/esm/locales/heIL.d.ts +1 -0
  126. package/esm/locales/heIL.js +1 -0
  127. package/esm/locales/hrHR.d.ts +1 -0
  128. package/esm/locales/hrHR.js +1 -0
  129. package/esm/locales/huHU.d.ts +1 -0
  130. package/esm/locales/huHU.js +1 -0
  131. package/esm/locales/isIS.d.ts +1 -0
  132. package/esm/locales/isIS.js +1 -0
  133. package/esm/locales/itIT.d.ts +1 -0
  134. package/esm/locales/itIT.js +1 -0
  135. package/esm/locales/jaJP.d.ts +1 -0
  136. package/esm/locales/jaJP.js +1 -0
  137. package/esm/locales/koKR.d.ts +1 -0
  138. package/esm/locales/koKR.js +1 -0
  139. package/esm/locales/kzKZ.d.ts +1 -0
  140. package/esm/locales/kzKZ.js +1 -0
  141. package/esm/locales/mk.d.ts +1 -0
  142. package/esm/locales/mk.js +1 -0
  143. package/esm/locales/nbNO.d.ts +1 -0
  144. package/esm/locales/nbNO.js +1 -0
  145. package/esm/locales/nlNL.d.ts +1 -0
  146. package/esm/locales/nlNL.js +1 -0
  147. package/esm/locales/nnNO.d.ts +1 -0
  148. package/esm/locales/nnNO.js +1 -0
  149. package/esm/locales/plPL.d.ts +1 -0
  150. package/esm/locales/plPL.js +1 -0
  151. package/esm/locales/ptBR.d.ts +1 -0
  152. package/esm/locales/ptBR.js +1 -0
  153. package/esm/locales/ptPT.d.ts +1 -0
  154. package/esm/locales/ptPT.js +1 -0
  155. package/esm/locales/roRO.d.ts +1 -0
  156. package/esm/locales/roRO.js +1 -0
  157. package/esm/locales/ruRU.d.ts +1 -0
  158. package/esm/locales/ruRU.js +1 -0
  159. package/esm/locales/skSK.d.ts +1 -0
  160. package/esm/locales/skSK.js +1 -0
  161. package/esm/locales/svSE.d.ts +1 -0
  162. package/esm/locales/svSE.js +1 -0
  163. package/esm/locales/trTR.d.ts +1 -0
  164. package/esm/locales/trTR.js +1 -0
  165. package/esm/locales/ukUA.d.ts +1 -0
  166. package/esm/locales/ukUA.js +1 -0
  167. package/esm/locales/urPK.d.ts +1 -0
  168. package/esm/locales/urPK.js +1 -0
  169. package/esm/locales/utils/getPickersLocalization.d.ts +1 -0
  170. package/esm/locales/utils/pickersLocaleTextApi.d.ts +1 -0
  171. package/esm/locales/viVN.d.ts +1 -0
  172. package/esm/locales/viVN.js +1 -0
  173. package/esm/locales/zhCN.d.ts +1 -0
  174. package/esm/locales/zhCN.js +1 -0
  175. package/esm/locales/zhHK.d.ts +1 -0
  176. package/esm/locales/zhHK.js +1 -0
  177. package/esm/locales/zhTW.d.ts +1 -0
  178. package/esm/locales/zhTW.js +1 -0
  179. package/esm/managers/useDateManager.d.ts +4 -13
  180. package/esm/managers/useDateManager.js +18 -28
  181. package/esm/managers/useDateTimeManager.d.ts +4 -13
  182. package/esm/managers/useDateTimeManager.js +23 -33
  183. package/esm/managers/useTimeManager.d.ts +4 -13
  184. package/esm/managers/useTimeManager.js +14 -24
  185. package/esm/models/manager.d.ts +3 -8
  186. package/esm/validation/validateDate.js +3 -4
  187. package/index.js +1 -1
  188. package/internals/components/PickerProvider.d.ts +9 -0
  189. package/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +1 -0
  190. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +9 -3
  191. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +7 -0
  192. package/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
  193. package/internals/hooks/useField/syncSelectionToDOM.d.ts +9 -0
  194. package/internals/hooks/useField/syncSelectionToDOM.js +56 -0
  195. package/internals/hooks/useField/useField.types.d.ts +8 -1
  196. package/internals/hooks/useField/useField.utils.d.ts +1 -3
  197. package/internals/hooks/useField/useField.utils.js +2 -61
  198. package/internals/hooks/useField/useFieldHiddenInputProps.d.ts +20 -0
  199. package/internals/hooks/useField/useFieldHiddenInputProps.js +39 -0
  200. package/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +8 -10
  201. package/internals/hooks/useField/useFieldRootHandleKeyDown.js +1 -0
  202. package/internals/hooks/useField/useFieldRootProps.d.ts +32 -0
  203. package/internals/hooks/useField/useFieldRootProps.js +156 -0
  204. package/internals/hooks/useField/useFieldSectionContainerProps.d.ts +15 -0
  205. package/internals/hooks/useField/useFieldSectionContainerProps.js +37 -0
  206. package/internals/hooks/useField/useFieldSectionContentProps.d.ts +23 -0
  207. package/internals/hooks/useField/useFieldSectionContentProps.js +234 -0
  208. package/internals/hooks/useField/useFieldV7TextField.js +75 -306
  209. package/internals/hooks/useMobilePicker/useMobilePicker.d.ts +1 -0
  210. package/internals/hooks/useMobilePicker/useMobilePicker.js +9 -3
  211. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +7 -0
  212. package/internals/hooks/usePicker/usePicker.d.ts +2 -1
  213. package/internals/hooks/usePicker/usePicker.js +14 -4
  214. package/internals/hooks/usePicker/usePicker.types.d.ts +2 -0
  215. package/internals/hooks/useStaticPicker/useStaticPicker.d.ts +1 -0
  216. package/internals/hooks/useStaticPicker/useStaticPicker.js +9 -3
  217. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +7 -0
  218. package/internals/index.d.ts +7 -6
  219. package/internals/index.js +37 -18
  220. package/internals/utils/createNonRangePickerStepNavigation.d.ts +13 -0
  221. package/internals/utils/createNonRangePickerStepNavigation.js +30 -0
  222. package/internals/utils/createStepNavigation.d.ts +32 -0
  223. package/internals/utils/createStepNavigation.js +41 -0
  224. package/internals/utils/date-utils.d.ts +1 -0
  225. package/internals/utils/date-utils.js +3 -3
  226. package/internals/utils/time-utils.d.ts +2 -0
  227. package/internals/utils/time-utils.js +5 -4
  228. package/locales/beBY.d.ts +1 -0
  229. package/locales/beBY.js +1 -0
  230. package/locales/bgBG.d.ts +1 -0
  231. package/locales/bgBG.js +1 -0
  232. package/locales/bnBD.d.ts +1 -0
  233. package/locales/bnBD.js +1 -0
  234. package/locales/caES.d.ts +1 -0
  235. package/locales/caES.js +1 -0
  236. package/locales/csCZ.d.ts +1 -0
  237. package/locales/csCZ.js +1 -0
  238. package/locales/daDK.d.ts +1 -0
  239. package/locales/daDK.js +1 -0
  240. package/locales/deDE.d.ts +1 -0
  241. package/locales/deDE.js +3 -3
  242. package/locales/elGR.d.ts +1 -0
  243. package/locales/elGR.js +1 -0
  244. package/locales/enUS.d.ts +1 -0
  245. package/locales/enUS.js +1 -0
  246. package/locales/esES.d.ts +1 -0
  247. package/locales/esES.js +1 -0
  248. package/locales/eu.d.ts +1 -0
  249. package/locales/eu.js +1 -0
  250. package/locales/faIR.d.ts +1 -0
  251. package/locales/faIR.js +1 -0
  252. package/locales/fiFI.d.ts +1 -0
  253. package/locales/fiFI.js +1 -0
  254. package/locales/frFR.d.ts +1 -0
  255. package/locales/frFR.js +1 -0
  256. package/locales/heIL.d.ts +1 -0
  257. package/locales/heIL.js +1 -0
  258. package/locales/hrHR.d.ts +1 -0
  259. package/locales/hrHR.js +1 -0
  260. package/locales/huHU.d.ts +1 -0
  261. package/locales/huHU.js +1 -0
  262. package/locales/isIS.d.ts +1 -0
  263. package/locales/isIS.js +1 -0
  264. package/locales/itIT.d.ts +1 -0
  265. package/locales/itIT.js +1 -0
  266. package/locales/jaJP.d.ts +1 -0
  267. package/locales/jaJP.js +1 -0
  268. package/locales/koKR.d.ts +1 -0
  269. package/locales/koKR.js +1 -0
  270. package/locales/kzKZ.d.ts +1 -0
  271. package/locales/kzKZ.js +1 -0
  272. package/locales/mk.d.ts +1 -0
  273. package/locales/mk.js +1 -0
  274. package/locales/nbNO.d.ts +1 -0
  275. package/locales/nbNO.js +1 -0
  276. package/locales/nlNL.d.ts +1 -0
  277. package/locales/nlNL.js +1 -0
  278. package/locales/nnNO.d.ts +1 -0
  279. package/locales/nnNO.js +1 -0
  280. package/locales/plPL.d.ts +1 -0
  281. package/locales/plPL.js +1 -0
  282. package/locales/ptBR.d.ts +1 -0
  283. package/locales/ptBR.js +1 -0
  284. package/locales/ptPT.d.ts +1 -0
  285. package/locales/ptPT.js +1 -0
  286. package/locales/roRO.d.ts +1 -0
  287. package/locales/roRO.js +1 -0
  288. package/locales/ruRU.d.ts +1 -0
  289. package/locales/ruRU.js +1 -0
  290. package/locales/skSK.d.ts +1 -0
  291. package/locales/skSK.js +1 -0
  292. package/locales/svSE.d.ts +1 -0
  293. package/locales/svSE.js +1 -0
  294. package/locales/trTR.d.ts +1 -0
  295. package/locales/trTR.js +1 -0
  296. package/locales/ukUA.d.ts +1 -0
  297. package/locales/ukUA.js +1 -0
  298. package/locales/urPK.d.ts +1 -0
  299. package/locales/urPK.js +1 -0
  300. package/locales/utils/getPickersLocalization.d.ts +1 -0
  301. package/locales/utils/pickersLocaleTextApi.d.ts +1 -0
  302. package/locales/viVN.d.ts +1 -0
  303. package/locales/viVN.js +1 -0
  304. package/locales/zhCN.d.ts +1 -0
  305. package/locales/zhCN.js +1 -0
  306. package/locales/zhHK.d.ts +1 -0
  307. package/locales/zhHK.js +1 -0
  308. package/locales/zhTW.d.ts +1 -0
  309. package/locales/zhTW.js +1 -0
  310. package/managers/useDateManager.d.ts +4 -13
  311. package/managers/useDateManager.js +18 -28
  312. package/managers/useDateTimeManager.d.ts +4 -13
  313. package/managers/useDateTimeManager.js +23 -33
  314. package/managers/useTimeManager.d.ts +4 -13
  315. package/managers/useTimeManager.js +15 -25
  316. package/models/manager.d.ts +3 -8
  317. package/modern/DateCalendar/DateCalendar.js +6 -10
  318. package/modern/DateCalendar/DayCalendar.js +2 -2
  319. package/modern/DateField/DateField.js +4 -4
  320. package/modern/DatePicker/shared.js +3 -9
  321. package/modern/DateTimeField/DateTimeField.js +4 -4
  322. package/modern/DateTimePicker/shared.js +4 -14
  323. package/modern/DesktopDatePicker/DesktopDatePicker.js +2 -1
  324. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +2 -1
  325. package/modern/DesktopTimePicker/DesktopTimePicker.js +2 -1
  326. package/modern/DigitalClock/DigitalClock.js +1 -0
  327. package/modern/LocalizationProvider/LocalizationProvider.d.ts +1 -1
  328. package/modern/LocalizationProvider/LocalizationProvider.js +2 -2
  329. package/modern/MobileDatePicker/MobileDatePicker.js +2 -1
  330. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
  331. package/modern/MobileTimePicker/MobileTimePicker.js +2 -1
  332. package/modern/MonthCalendar/MonthCalendar.js +6 -11
  333. package/modern/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -0
  334. package/modern/PickersActionBar/PickersActionBar.d.ts +1 -1
  335. package/modern/PickersActionBar/PickersActionBar.js +22 -4
  336. package/modern/PickersSectionList/PickersSectionList.d.ts +1 -1
  337. package/modern/PickersSectionList/PickersSectionList.types.d.ts +2 -6
  338. package/modern/StaticDatePicker/StaticDatePicker.js +2 -1
  339. package/modern/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
  340. package/modern/StaticTimePicker/StaticTimePicker.js +2 -1
  341. package/modern/TimeField/TimeField.js +4 -4
  342. package/modern/TimePicker/shared.js +3 -3
  343. package/modern/YearCalendar/YearCalendar.js +5 -11
  344. package/modern/index.js +1 -1
  345. package/modern/internals/components/PickerProvider.d.ts +9 -0
  346. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +1 -0
  347. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +9 -3
  348. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +7 -0
  349. package/modern/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
  350. package/modern/internals/hooks/useField/syncSelectionToDOM.d.ts +9 -0
  351. package/modern/internals/hooks/useField/syncSelectionToDOM.js +50 -0
  352. package/modern/internals/hooks/useField/useField.types.d.ts +8 -1
  353. package/modern/internals/hooks/useField/useField.utils.d.ts +1 -3
  354. package/modern/internals/hooks/useField/useField.utils.js +0 -57
  355. package/modern/internals/hooks/useField/useFieldHiddenInputProps.d.ts +20 -0
  356. package/modern/internals/hooks/useField/useFieldHiddenInputProps.js +31 -0
  357. package/modern/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +8 -10
  358. package/modern/internals/hooks/useField/useFieldRootHandleKeyDown.js +1 -0
  359. package/modern/internals/hooks/useField/useFieldRootProps.d.ts +32 -0
  360. package/modern/internals/hooks/useField/useFieldRootProps.js +150 -0
  361. package/modern/internals/hooks/useField/useFieldSectionContainerProps.d.ts +15 -0
  362. package/modern/internals/hooks/useField/useFieldSectionContainerProps.js +29 -0
  363. package/modern/internals/hooks/useField/useFieldSectionContentProps.d.ts +23 -0
  364. package/modern/internals/hooks/useField/useFieldSectionContentProps.js +226 -0
  365. package/modern/internals/hooks/useField/useFieldV7TextField.js +76 -307
  366. package/modern/internals/hooks/useMobilePicker/useMobilePicker.d.ts +1 -0
  367. package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +9 -3
  368. package/modern/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +7 -0
  369. package/modern/internals/hooks/usePicker/usePicker.d.ts +2 -1
  370. package/modern/internals/hooks/usePicker/usePicker.js +14 -4
  371. package/modern/internals/hooks/usePicker/usePicker.types.d.ts +2 -0
  372. package/modern/internals/hooks/useStaticPicker/useStaticPicker.d.ts +1 -0
  373. package/modern/internals/hooks/useStaticPicker/useStaticPicker.js +9 -3
  374. package/modern/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +7 -0
  375. package/modern/internals/index.d.ts +7 -6
  376. package/modern/internals/index.js +6 -5
  377. package/modern/internals/utils/createNonRangePickerStepNavigation.d.ts +13 -0
  378. package/modern/internals/utils/createNonRangePickerStepNavigation.js +24 -0
  379. package/modern/internals/utils/createStepNavigation.d.ts +32 -0
  380. package/modern/internals/utils/createStepNavigation.js +34 -0
  381. package/modern/internals/utils/date-utils.d.ts +1 -0
  382. package/modern/internals/utils/date-utils.js +2 -2
  383. package/modern/internals/utils/time-utils.d.ts +2 -0
  384. package/modern/internals/utils/time-utils.js +4 -3
  385. package/modern/locales/beBY.d.ts +1 -0
  386. package/modern/locales/beBY.js +1 -0
  387. package/modern/locales/bgBG.d.ts +1 -0
  388. package/modern/locales/bgBG.js +1 -0
  389. package/modern/locales/bnBD.d.ts +1 -0
  390. package/modern/locales/bnBD.js +1 -0
  391. package/modern/locales/caES.d.ts +1 -0
  392. package/modern/locales/caES.js +1 -0
  393. package/modern/locales/csCZ.d.ts +1 -0
  394. package/modern/locales/csCZ.js +1 -0
  395. package/modern/locales/daDK.d.ts +1 -0
  396. package/modern/locales/daDK.js +1 -0
  397. package/modern/locales/deDE.d.ts +1 -0
  398. package/modern/locales/deDE.js +3 -3
  399. package/modern/locales/elGR.d.ts +1 -0
  400. package/modern/locales/elGR.js +1 -0
  401. package/modern/locales/enUS.d.ts +1 -0
  402. package/modern/locales/enUS.js +1 -0
  403. package/modern/locales/esES.d.ts +1 -0
  404. package/modern/locales/esES.js +1 -0
  405. package/modern/locales/eu.d.ts +1 -0
  406. package/modern/locales/eu.js +1 -0
  407. package/modern/locales/faIR.d.ts +1 -0
  408. package/modern/locales/faIR.js +1 -0
  409. package/modern/locales/fiFI.d.ts +1 -0
  410. package/modern/locales/fiFI.js +1 -0
  411. package/modern/locales/frFR.d.ts +1 -0
  412. package/modern/locales/frFR.js +1 -0
  413. package/modern/locales/heIL.d.ts +1 -0
  414. package/modern/locales/heIL.js +1 -0
  415. package/modern/locales/hrHR.d.ts +1 -0
  416. package/modern/locales/hrHR.js +1 -0
  417. package/modern/locales/huHU.d.ts +1 -0
  418. package/modern/locales/huHU.js +1 -0
  419. package/modern/locales/isIS.d.ts +1 -0
  420. package/modern/locales/isIS.js +1 -0
  421. package/modern/locales/itIT.d.ts +1 -0
  422. package/modern/locales/itIT.js +1 -0
  423. package/modern/locales/jaJP.d.ts +1 -0
  424. package/modern/locales/jaJP.js +1 -0
  425. package/modern/locales/koKR.d.ts +1 -0
  426. package/modern/locales/koKR.js +1 -0
  427. package/modern/locales/kzKZ.d.ts +1 -0
  428. package/modern/locales/kzKZ.js +1 -0
  429. package/modern/locales/mk.d.ts +1 -0
  430. package/modern/locales/mk.js +1 -0
  431. package/modern/locales/nbNO.d.ts +1 -0
  432. package/modern/locales/nbNO.js +1 -0
  433. package/modern/locales/nlNL.d.ts +1 -0
  434. package/modern/locales/nlNL.js +1 -0
  435. package/modern/locales/nnNO.d.ts +1 -0
  436. package/modern/locales/nnNO.js +1 -0
  437. package/modern/locales/plPL.d.ts +1 -0
  438. package/modern/locales/plPL.js +1 -0
  439. package/modern/locales/ptBR.d.ts +1 -0
  440. package/modern/locales/ptBR.js +1 -0
  441. package/modern/locales/ptPT.d.ts +1 -0
  442. package/modern/locales/ptPT.js +1 -0
  443. package/modern/locales/roRO.d.ts +1 -0
  444. package/modern/locales/roRO.js +1 -0
  445. package/modern/locales/ruRU.d.ts +1 -0
  446. package/modern/locales/ruRU.js +1 -0
  447. package/modern/locales/skSK.d.ts +1 -0
  448. package/modern/locales/skSK.js +1 -0
  449. package/modern/locales/svSE.d.ts +1 -0
  450. package/modern/locales/svSE.js +1 -0
  451. package/modern/locales/trTR.d.ts +1 -0
  452. package/modern/locales/trTR.js +1 -0
  453. package/modern/locales/ukUA.d.ts +1 -0
  454. package/modern/locales/ukUA.js +1 -0
  455. package/modern/locales/urPK.d.ts +1 -0
  456. package/modern/locales/urPK.js +1 -0
  457. package/modern/locales/utils/getPickersLocalization.d.ts +1 -0
  458. package/modern/locales/utils/pickersLocaleTextApi.d.ts +1 -0
  459. package/modern/locales/viVN.d.ts +1 -0
  460. package/modern/locales/viVN.js +1 -0
  461. package/modern/locales/zhCN.d.ts +1 -0
  462. package/modern/locales/zhCN.js +1 -0
  463. package/modern/locales/zhHK.d.ts +1 -0
  464. package/modern/locales/zhHK.js +1 -0
  465. package/modern/locales/zhTW.d.ts +1 -0
  466. package/modern/locales/zhTW.js +1 -0
  467. package/modern/managers/useDateManager.d.ts +4 -13
  468. package/modern/managers/useDateManager.js +18 -28
  469. package/modern/managers/useDateTimeManager.d.ts +4 -13
  470. package/modern/managers/useDateTimeManager.js +23 -33
  471. package/modern/managers/useTimeManager.d.ts +4 -13
  472. package/modern/managers/useTimeManager.js +14 -24
  473. package/modern/models/manager.d.ts +3 -8
  474. package/modern/validation/validateDate.js +3 -4
  475. package/package.json +6 -6
  476. package/tsconfig.build.tsbuildinfo +1 -1
  477. package/validation/validateDate.js +3 -4
@@ -11,28 +11,24 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
12
12
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
13
13
  var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
14
- var _useTimeout = _interopRequireDefault(require("@mui/utils/useTimeout"));
15
- var _useId = _interopRequireDefault(require("@mui/utils/useId"));
16
14
  var _useField = require("./useField.utils");
17
15
  var _utils = require("../../utils/utils");
18
16
  var _hooks = require("../../../hooks");
19
- var _usePickerTranslations = require("../../../hooks/usePickerTranslations");
20
- var _useUtils = require("../useUtils");
21
17
  var _useFieldCharacterEditing = require("./useFieldCharacterEditing");
22
- var _useFieldRootHandleKeyDown = require("./useFieldRootHandleKeyDown");
23
18
  var _useFieldState = require("./useFieldState");
24
19
  var _useFieldInternalPropsWithDefaults = require("./useFieldInternalPropsWithDefaults");
20
+ var _syncSelectionToDOM = require("./syncSelectionToDOM");
21
+ var _useFieldRootProps = require("./useFieldRootProps");
22
+ var _useFieldHiddenInputProps = require("./useFieldHiddenInputProps");
23
+ var _useFieldSectionContainerProps = require("./useFieldSectionContainerProps");
24
+ var _useFieldSectionContentProps = require("./useFieldSectionContentProps");
25
25
  const useFieldV7TextField = parameters => {
26
- const translations = (0, _usePickerTranslations.usePickerTranslations)();
27
- const utils = (0, _useUtils.useUtils)();
28
- const id = (0, _useId.default)();
29
26
  const {
30
27
  props,
31
28
  manager,
32
29
  skipContextFieldRefAssignment,
33
30
  manager: {
34
31
  valueType,
35
- internal_fieldValueManager: fieldValueManager,
36
32
  internal_useOpenPickerButtonAriaLabel: useOpenPickerButtonAriaLabel
37
33
  }
38
34
  } = parameters;
@@ -65,6 +61,13 @@ const useFieldV7TextField = parameters => {
65
61
  } = internalPropsWithDefaults;
66
62
  const sectionListRef = React.useRef(null);
67
63
  const handleSectionListRef = (0, _useForkRef.default)(sectionListRefProp, sectionListRef);
64
+ const domGetters = React.useMemo(() => ({
65
+ isReady: () => sectionListRef.current != null,
66
+ getRoot: () => sectionListRef.current.getRoot(),
67
+ getSectionContainer: sectionIndex => sectionListRef.current.getSectionContainer(sectionIndex),
68
+ getSectionContent: sectionIndex => sectionListRef.current.getSectionContent(sectionIndex),
69
+ getSectionIndexFromDOMElement: element => sectionListRef.current.getSectionIndexFromDOMElement(element)
70
+ }), [sectionListRef]);
68
71
  const stateResponse = (0, _useFieldState.useFieldState)({
69
72
  manager,
70
73
  internalPropsWithDefaults,
@@ -76,62 +79,17 @@ const useFieldV7TextField = parameters => {
76
79
  error,
77
80
  parsedSelectedSections,
78
81
  sectionOrder,
79
- sectionsValueBoundaries,
80
82
  state,
81
83
  value,
82
84
  // Methods to update the states
83
85
  clearValue,
84
- clearActiveSection,
85
- setCharacterQuery,
86
- setSelectedSections,
87
- updateSectionValue,
88
- updateValueFromValueStr
86
+ setSelectedSections
89
87
  } = stateResponse;
90
88
  const applyCharacterEditing = (0, _useFieldCharacterEditing.useFieldCharacterEditing)({
91
89
  stateResponse
92
90
  });
93
91
  const openPickerAriaLabel = useOpenPickerButtonAriaLabel(value);
94
92
  const [focused, setFocused] = React.useState(false);
95
- function syncSelectionToDOM() {
96
- if (!sectionListRef.current) {
97
- return;
98
- }
99
- const selection = document.getSelection();
100
- if (!selection) {
101
- return;
102
- }
103
- if (parsedSelectedSections == null) {
104
- // If the selection contains an element inside the field, we reset it.
105
- if (selection.rangeCount > 0 && sectionListRef.current.getRoot().contains(selection.getRangeAt(0).startContainer)) {
106
- selection.removeAllRanges();
107
- }
108
- if (focused) {
109
- sectionListRef.current.getRoot().blur();
110
- }
111
- return;
112
- }
113
-
114
- // On multi input range pickers we want to update selection range only for the active input
115
- if (!sectionListRef.current.getRoot().contains((0, _utils.getActiveElement)(document))) {
116
- return;
117
- }
118
- const range = new window.Range();
119
- let target;
120
- if (parsedSelectedSections === 'all') {
121
- target = sectionListRef.current.getRoot();
122
- } else {
123
- const section = state.sections[parsedSelectedSections];
124
- if (section.type === 'empty') {
125
- target = sectionListRef.current.getSectionContainer(parsedSelectedSections);
126
- } else {
127
- target = sectionListRef.current.getSectionContent(parsedSelectedSections);
128
- }
129
- }
130
- range.selectNodeContents(target);
131
- target.focus();
132
- selection.removeAllRanges();
133
- selection.addRange(range);
134
- }
135
93
  function focusField(newSelectedSections = 0) {
136
94
  if (!sectionListRef.current ||
137
95
  // if the field is already focused, we don't need to focus it again
@@ -142,193 +100,53 @@ const useFieldV7TextField = parameters => {
142
100
  setFocused(true);
143
101
  sectionListRef.current.getSectionContent(newParsedSelectedSections).focus();
144
102
  }
145
-
146
- /**
147
- * If a section content has been updated with a value we don't want to keep,
148
- * Then we need to imperatively revert it (we can't let React do it because the value did not change in his internal representation).
149
- */
150
- const revertDOMSectionChange = (0, _useEventCallback.default)(sectionIndex => {
151
- if (!sectionListRef.current) {
152
- return;
153
- }
154
- const section = state.sections[sectionIndex];
155
- sectionListRef.current.getSectionContent(sectionIndex).innerHTML = section.value || section.placeholder;
156
- syncSelectionToDOM();
103
+ const rootProps = (0, _useFieldRootProps.useFieldRootProps)({
104
+ manager,
105
+ internalPropsWithDefaults,
106
+ stateResponse,
107
+ applyCharacterEditing,
108
+ focused,
109
+ setFocused,
110
+ domGetters
157
111
  });
158
- const containerClickTimeout = (0, _useTimeout.default)();
159
- const handleContainerClick = (0, _useEventCallback.default)((event, ...args) => {
160
- // The click event on the clear button would propagate to the input, trigger this handler and result in a wrong section selection.
161
- // We avoid this by checking if the call of `handleContainerClick` is actually intended, or a side effect.
162
- if (event.isDefaultPrevented() || !sectionListRef.current) {
163
- return;
164
- }
165
- setFocused(true);
166
- onClick?.(event, ...args);
167
- if (parsedSelectedSections === 'all') {
168
- containerClickTimeout.start(0, () => {
169
- const cursorPosition = document.getSelection().getRangeAt(0).startOffset;
170
- if (cursorPosition === 0) {
171
- setSelectedSections(sectionOrder.startIndex);
172
- return;
173
- }
174
- let sectionIndex = 0;
175
- let cursorOnStartOfSection = 0;
176
- while (cursorOnStartOfSection < cursorPosition && sectionIndex < state.sections.length) {
177
- const section = state.sections[sectionIndex];
178
- sectionIndex += 1;
179
- cursorOnStartOfSection += `${section.startSeparator}${section.value || section.placeholder}${section.endSeparator}`.length;
180
- }
181
- setSelectedSections(sectionIndex - 1);
182
- });
183
- } else if (!focused) {
184
- setFocused(true);
185
- setSelectedSections(sectionOrder.startIndex);
186
- } else {
187
- const hasClickedOnASection = sectionListRef.current.getRoot().contains(event.target);
188
- if (!hasClickedOnASection) {
189
- setSelectedSections(sectionOrder.startIndex);
190
- }
191
- }
112
+ const hiddenInputProps = (0, _useFieldHiddenInputProps.useFieldHiddenInputProps)({
113
+ manager,
114
+ stateResponse
192
115
  });
193
- const handleContainerInput = (0, _useEventCallback.default)(event => {
194
- onInput?.(event);
195
- if (!sectionListRef.current || parsedSelectedSections !== 'all') {
196
- return;
197
- }
198
- const target = event.target;
199
- const keyPressed = target.textContent ?? '';
200
- sectionListRef.current.getRoot().innerHTML = state.sections.map(section => `${section.startSeparator}${section.value || section.placeholder}${section.endSeparator}`).join('');
201
- syncSelectionToDOM();
202
- if (keyPressed.length === 0 || keyPressed.charCodeAt(0) === 10) {
203
- clearValue();
204
- setSelectedSections('all');
205
- } else if (keyPressed.length > 1) {
206
- updateValueFromValueStr(keyPressed);
207
- } else {
208
- if (parsedSelectedSections === 'all') {
209
- setSelectedSections(0);
210
- }
211
- applyCharacterEditing({
212
- keyPressed,
213
- sectionIndex: 0
214
- });
215
- }
116
+ const createSectionContainerProps = (0, _useFieldSectionContainerProps.useFieldSectionContainerProps)({
117
+ stateResponse
216
118
  });
217
- const handleContainerPaste = (0, _useEventCallback.default)(event => {
218
- onPaste?.(event);
219
- if (readOnly || parsedSelectedSections !== 'all') {
220
- event.preventDefault();
221
- return;
222
- }
223
- const pastedValue = event.clipboardData.getData('text');
224
- event.preventDefault();
225
- setCharacterQuery(null);
226
- updateValueFromValueStr(pastedValue);
119
+ const createSectionContentProps = (0, _useFieldSectionContentProps.useFieldSectionContentProps)({
120
+ manager,
121
+ stateResponse,
122
+ applyCharacterEditing,
123
+ internalPropsWithDefaults,
124
+ domGetters,
125
+ focused
227
126
  });
228
- const handleContainerFocus = (0, _useEventCallback.default)(event => {
229
- onFocus?.(event);
230
- if (focused || !sectionListRef.current) {
231
- return;
232
- }
233
- const activeElement = (0, _utils.getActiveElement)(document);
234
- setFocused(true);
235
- const isFocusInsideASection = sectionListRef.current.getSectionIndexFromDOMElement(activeElement) != null;
236
- if (!isFocusInsideASection) {
237
- setSelectedSections(sectionOrder.startIndex);
238
- }
127
+ const handleRootKeyDown = (0, _useEventCallback.default)(event => {
128
+ onKeyDown?.(event);
129
+ rootProps.onKeyDown(event);
239
130
  });
240
- const handleContainerBlur = (0, _useEventCallback.default)(event => {
131
+ const handleRootBlur = (0, _useEventCallback.default)(event => {
241
132
  onBlur?.(event);
242
- setTimeout(() => {
243
- if (!sectionListRef.current) {
244
- return;
245
- }
246
- const activeElement = (0, _utils.getActiveElement)(document);
247
- const shouldBlur = !sectionListRef.current.getRoot().contains(activeElement);
248
- if (shouldBlur) {
249
- setFocused(false);
250
- setSelectedSections(null);
251
- }
252
- });
133
+ rootProps.onBlur(event);
253
134
  });
254
- const getInputContainerClickHandler = (0, _useEventCallback.default)(sectionIndex => event => {
255
- // The click event on the clear button would propagate to the input, trigger this handler and result in a wrong section selection.
256
- // We avoid this by checking if the call to this function is actually intended, or a side effect.
257
- if (event.isDefaultPrevented()) {
258
- return;
259
- }
260
- setSelectedSections(sectionIndex);
261
- });
262
- const handleInputContentMouseUp = (0, _useEventCallback.default)(event => {
263
- // Without this, the browser will remove the selected when clicking inside an already-selected section.
264
- event.preventDefault();
135
+ const handleRootFocus = (0, _useEventCallback.default)(event => {
136
+ onFocus?.(event);
137
+ rootProps.onFocus(event);
265
138
  });
266
- const getInputContentFocusHandler = (0, _useEventCallback.default)(sectionIndex => () => {
267
- setSelectedSections(sectionIndex);
139
+ const handleRootClick = (0, _useEventCallback.default)(event => {
140
+ onClick?.(event);
141
+ rootProps.onClick(event);
268
142
  });
269
- const handleInputContentPaste = (0, _useEventCallback.default)(event => {
270
- // prevent default to avoid the input `onInput` handler being called
271
- event.preventDefault();
272
- if (readOnly || disabled || typeof parsedSelectedSections !== 'number') {
273
- return;
274
- }
275
- const activeSection = state.sections[parsedSelectedSections];
276
- const pastedValue = event.clipboardData.getData('text');
277
- const lettersOnly = /^[a-zA-Z]+$/.test(pastedValue);
278
- const digitsOnly = /^[0-9]+$/.test(pastedValue);
279
- const digitsAndLetterOnly = /^(([a-zA-Z]+)|)([0-9]+)(([a-zA-Z]+)|)$/.test(pastedValue);
280
- const isValidPastedValue = activeSection.contentType === 'letter' && lettersOnly || activeSection.contentType === 'digit' && digitsOnly || activeSection.contentType === 'digit-with-letter' && digitsAndLetterOnly;
281
- if (isValidPastedValue) {
282
- setCharacterQuery(null);
283
- updateSectionValue({
284
- section: activeSection,
285
- newSectionValue: pastedValue,
286
- shouldGoToNextSection: true
287
- });
288
- }
289
- // If the pasted value corresponds to a single section, but not the expected type, we skip the modification
290
- else if (!lettersOnly && !digitsOnly) {
291
- setCharacterQuery(null);
292
- updateValueFromValueStr(pastedValue);
293
- }
294
- });
295
- const handleInputContentDragOver = (0, _useEventCallback.default)(event => {
296
- event.preventDefault();
297
- event.dataTransfer.dropEffect = 'none';
143
+ const handleRootPaste = (0, _useEventCallback.default)(event => {
144
+ onPaste?.(event);
145
+ rootProps.onPaste(event);
298
146
  });
299
- const handleInputContentInput = (0, _useEventCallback.default)(event => {
300
- if (!sectionListRef.current) {
301
- return;
302
- }
303
- const target = event.target;
304
- const keyPressed = target.textContent ?? '';
305
- const sectionIndex = sectionListRef.current.getSectionIndexFromDOMElement(target);
306
- const section = state.sections[sectionIndex];
307
- if (readOnly || !sectionListRef.current) {
308
- revertDOMSectionChange(sectionIndex);
309
- return;
310
- }
311
- if (keyPressed.length === 0) {
312
- if (section.value === '') {
313
- revertDOMSectionChange(sectionIndex);
314
- return;
315
- }
316
- const inputType = event.nativeEvent.inputType;
317
- if (inputType === 'insertParagraph' || inputType === 'insertLineBreak') {
318
- revertDOMSectionChange(sectionIndex);
319
- return;
320
- }
321
- revertDOMSectionChange(sectionIndex);
322
- clearActiveSection();
323
- return;
324
- }
325
- applyCharacterEditing({
326
- keyPressed,
327
- sectionIndex
328
- });
329
-
330
- // The DOM value needs to remain the one React is expecting.
331
- revertDOMSectionChange(sectionIndex);
147
+ const handleRootInput = (0, _useEventCallback.default)(event => {
148
+ onInput?.(event);
149
+ rootProps.onInput(event);
332
150
  });
333
151
  const handleClear = (0, _useEventCallback.default)((event, ...args) => {
334
152
  event.preventDefault();
@@ -341,67 +159,18 @@ const useFieldV7TextField = parameters => {
341
159
  setSelectedSections(sectionOrder.startIndex);
342
160
  }
343
161
  });
344
- const handleContainerKeyDown = (0, _useFieldRootHandleKeyDown.useFieldRootHandleKeyDown)({
345
- manager,
346
- internalPropsWithDefaults,
347
- stateResponse
348
- });
349
- const wrappedHandleContainerKeyDown = (0, _useEventCallback.default)(event => {
350
- onKeyDown?.(event);
351
- handleContainerKeyDown(event);
352
- });
353
- const isContainerEditable = parsedSelectedSections === 'all';
354
162
  const elements = React.useMemo(() => {
355
- return state.sections.map((section, index) => {
356
- const isEditable = !isContainerEditable && !disabled && !readOnly;
357
- const sectionBoundaries = sectionsValueBoundaries[section.type]({
358
- currentDate: fieldValueManager.getDateFromSection(value, section),
359
- contentType: section.contentType,
360
- format: section.format
361
- });
362
- return {
363
- container: {
364
- 'data-sectionindex': index,
365
- onClick: getInputContainerClickHandler(index)
366
- },
367
- content: {
368
- tabIndex: isContainerEditable || index > 0 ? -1 : 0,
369
- contentEditable: !isContainerEditable && !disabled && !readOnly,
370
- role: 'spinbutton',
371
- id: `${id}-${section.type}`,
372
- 'aria-labelledby': `${id}-${section.type}`,
373
- 'aria-readonly': readOnly,
374
- 'aria-valuenow': (0, _useField.getSectionValueNow)(section, utils),
375
- 'aria-valuemin': sectionBoundaries.minimum,
376
- 'aria-valuemax': sectionBoundaries.maximum,
377
- 'aria-valuetext': section.value ? (0, _useField.getSectionValueText)(section, utils) : translations.empty,
378
- 'aria-label': translations[section.type],
379
- 'aria-disabled': disabled,
380
- spellCheck: isEditable ? false : undefined,
381
- autoCapitalize: isEditable ? 'off' : undefined,
382
- autoCorrect: isEditable ? 'off' : undefined,
383
- [parseInt(React.version, 10) >= 17 ? 'enterKeyHint' : 'enterkeyhint']: isEditable ? 'next' : undefined,
384
- children: section.value || section.placeholder,
385
- onInput: handleInputContentInput,
386
- onPaste: handleInputContentPaste,
387
- onFocus: getInputContentFocusHandler(index),
388
- onDragOver: handleInputContentDragOver,
389
- onMouseUp: handleInputContentMouseUp,
390
- inputMode: section.contentType === 'letter' ? 'text' : 'numeric'
391
- },
392
- before: {
393
- children: section.startSeparator
394
- },
395
- after: {
396
- children: section.endSeparator
397
- }
398
- };
399
- });
400
- }, [disabled, fieldValueManager, getInputContainerClickHandler, getInputContentFocusHandler, handleInputContentDragOver, handleInputContentInput, handleInputContentMouseUp, handleInputContentPaste, id, isContainerEditable, readOnly, sectionsValueBoundaries, state.sections, translations, utils, value]);
401
- const handleValueStrChange = (0, _useEventCallback.default)(event => {
402
- updateValueFromValueStr(event.target.value);
403
- });
404
- const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.getV7HiddenInputValueFromSections(state.sections), [areAllSectionsEmpty, state.sections, fieldValueManager]);
163
+ return state.sections.map((section, sectionIndex) => ({
164
+ container: createSectionContainerProps(sectionIndex),
165
+ content: createSectionContentProps(section, sectionIndex),
166
+ before: {
167
+ children: section.startSeparator
168
+ },
169
+ after: {
170
+ children: section.endSeparator
171
+ }
172
+ }));
173
+ }, [state.sections, createSectionContainerProps, createSectionContentProps]);
405
174
  React.useEffect(() => {
406
175
  if (sectionListRef.current == null) {
407
176
  throw new Error(['MUI X: The `sectionListRef` prop has not been initialized by `PickersSectionList`', 'You probably tried to pass a component to the `textField` slot that contains an `<input />` element instead of a `PickersSectionList`.', '', 'If you want to keep using an `<input />` HTML element for the editing, please remove the `enableAccessibleFieldDOMStructure` prop from your Picker or Field component:', '', '<DatePicker slots={{ textField: MyCustomTextField }} />', '', 'Learn more about the field accessible DOM structure on the MUI documentation: https://mui.com/x/react-date-pickers/fields/#fields-to-edit-a-single-element'].join('\n'));
@@ -425,7 +194,11 @@ const useFieldV7TextField = parameters => {
425
194
  }
426
195
  }, [parsedSelectedSections, focused]);
427
196
  (0, _useEnhancedEffect.default)(() => {
428
- syncSelectionToDOM();
197
+ (0, _syncSelectionToDOM.syncSelectionToDOM)({
198
+ focused,
199
+ domGetters,
200
+ stateResponse
201
+ });
429
202
  });
430
203
  React.useImperativeHandle(unstableFieldRef, () => ({
431
204
  getSections: () => state.sections,
@@ -442,26 +215,22 @@ const useFieldV7TextField = parameters => {
442
215
  focusField,
443
216
  isFieldFocused: () => isFieldFocused(sectionListRef)
444
217
  }));
445
- return (0, _extends2.default)({}, forwardedProps, {
218
+ return (0, _extends2.default)({}, forwardedProps, rootProps, {
219
+ onBlur: handleRootBlur,
220
+ onClick: handleRootClick,
221
+ onFocus: handleRootFocus,
222
+ onInput: handleRootInput,
223
+ onPaste: handleRootPaste,
224
+ onKeyDown: handleRootKeyDown,
225
+ onClear: handleClear
226
+ }, hiddenInputProps, {
446
227
  error,
447
228
  clearable: Boolean(clearable && !areAllSectionsEmpty && !readOnly && !disabled),
448
229
  focused: focusedProp ?? focused,
449
230
  sectionListRef: handleSectionListRef,
450
- onBlur: handleContainerBlur,
451
- onClick: handleContainerClick,
452
- onFocus: handleContainerFocus,
453
- onInput: handleContainerInput,
454
- onPaste: handleContainerPaste,
455
- onKeyDown: wrappedHandleContainerKeyDown,
456
- onClear: handleClear,
457
231
  // Additional
458
232
  enableAccessibleFieldDOMStructure: true,
459
233
  elements,
460
- // TODO v7: Try to set to undefined when there is a section selected.
461
- tabIndex: parsedSelectedSections === 0 ? -1 : 0,
462
- contentEditable: isContainerEditable,
463
- value: valueStr,
464
- onChange: handleValueStrChange,
465
234
  areAllSectionsEmpty,
466
235
  disabled,
467
236
  readOnly,
@@ -9,6 +9,7 @@ import { DateOrTimeViewWithMeridiem } from "../../models/index.js";
9
9
  */
10
10
  export declare const useMobilePicker: <TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TExternalProps extends UseMobilePickerProps<TView, TEnableAccessibleFieldDOMStructure, any, TExternalProps>>({
11
11
  props,
12
+ steps,
12
13
  ...pickerParams
13
14
  }: UseMobilePickerParams<TView, TEnableAccessibleFieldDOMStructure, TExternalProps>) => {
14
15
  renderPicker: () => React.JSX.Element;
@@ -15,8 +15,9 @@ var _usePicker = require("../usePicker");
15
15
  var _PickersLayout = require("../../../PickersLayout");
16
16
  var _PickerProvider = require("../../components/PickerProvider");
17
17
  var _PickerFieldUI = require("../../components/PickerFieldUI");
18
+ var _createNonRangePickerStepNavigation = require("../../utils/createNonRangePickerStepNavigation");
18
19
  var _jsxRuntime = require("react/jsx-runtime");
19
- const _excluded = ["props"],
20
+ const _excluded = ["props", "steps"],
20
21
  _excluded2 = ["ownerState"];
21
22
  /**
22
23
  * Hook managing all the single-date mobile pickers:
@@ -26,7 +27,8 @@ const _excluded = ["props"],
26
27
  */
27
28
  const useMobilePicker = _ref => {
28
29
  let {
29
- props
30
+ props,
31
+ steps
30
32
  } = _ref,
31
33
  pickerParams = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
32
34
  const {
@@ -36,6 +38,9 @@ const useMobilePicker = _ref => {
36
38
  inputRef,
37
39
  localeText
38
40
  } = props;
41
+ const getStepNavigation = (0, _createNonRangePickerStepNavigation.createNonRangePickerStepNavigation)({
42
+ steps
43
+ });
39
44
  const {
40
45
  providerProps,
41
46
  renderCurrentView,
@@ -45,7 +50,8 @@ const useMobilePicker = _ref => {
45
50
  localeText,
46
51
  autoFocusView: true,
47
52
  viewContainerRole: 'dialog',
48
- variant: 'mobile'
53
+ variant: 'mobile',
54
+ getStepNavigation
49
55
  }));
50
56
  const labelId = providerProps.privateContextValue.labelId;
51
57
  const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
@@ -7,6 +7,7 @@ import { PickerFieldSlotProps, PickerOwnerState } from "../../../models/index.js
7
7
  import { ExportedPickersLayoutSlots, ExportedPickersLayoutSlotProps, PickersLayoutSlotProps } from "../../../PickersLayout/PickersLayout.types.js";
8
8
  import { DateOrTimeViewWithMeridiem, PickerValue } from "../../models/index.js";
9
9
  import { PickerFieldUISlotsFromContext, PickerFieldUISlotPropsFromContext } from "../../components/PickerFieldUI.js";
10
+ import { PickerStep } from "../../utils/createNonRangePickerStepNavigation.js";
10
11
  export interface UseMobilePickerSlots extends PickersModalDialogSlots, ExportedPickersLayoutSlots<PickerValue>, PickerFieldUISlotsFromContext {
11
12
  /**
12
13
  * Component used to enter the date with the keyboard.
@@ -32,4 +33,10 @@ export interface UseMobilePickerProps<TView extends DateOrTimeViewWithMeridiem,
32
33
  }
33
34
  export interface UseMobilePickerParams<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TExternalProps extends UseMobilePickerProps<TView, TEnableAccessibleFieldDOMStructure, any, TExternalProps>> extends Pick<UsePickerParameters<PickerValue, TView, TExternalProps>, 'valueManager' | 'valueType' | 'validator' | 'ref'> {
34
35
  props: TExternalProps;
36
+ /**
37
+ * Steps available for the picker.
38
+ * This will be used to define the behavior of navigation actions.
39
+ * If null, the picker will not have any step navigation.
40
+ */
41
+ steps: PickerStep[] | null;
35
42
  }
@@ -10,5 +10,6 @@ export declare const usePicker: <TValue extends PickerValidValue, TView extends
10
10
  autoFocusView,
11
11
  rendererInterceptor: RendererInterceptor,
12
12
  localeText,
13
- viewContainerRole
13
+ viewContainerRole,
14
+ getStepNavigation
14
15
  }: UsePickerParameters<TValue, TView, TExternalProps>) => UsePickerReturnValue<TValue>;
@@ -31,7 +31,8 @@ const usePicker = ({
31
31
  autoFocusView,
32
32
  rendererInterceptor: RendererInterceptor,
33
33
  localeText,
34
- viewContainerRole
34
+ viewContainerRole,
35
+ getStepNavigation
35
36
  }) => {
36
37
  const {
37
38
  // View props
@@ -198,6 +199,13 @@ const usePicker = ({
198
199
  }
199
200
  return 'enabled';
200
201
  }, [disableOpenPicker, hasUIView, disabled, readOnly]);
202
+ const stepNavigation = getStepNavigation({
203
+ setView,
204
+ view,
205
+ initialView: initialView ?? views[0],
206
+ views
207
+ });
208
+ const wrappedGoToNextStep = (0, _useEventCallback.default)(stepNavigation.goToNextStep);
201
209
  const actionsContextValue = React.useMemo(() => ({
202
210
  setValue,
203
211
  setOpen,
@@ -205,8 +213,9 @@ const usePicker = ({
205
213
  setValueToToday,
206
214
  acceptValueChanges,
207
215
  cancelValueChanges,
208
- setView
209
- }), [setValue, setOpen, clearValue, setValueToToday, acceptValueChanges, cancelValueChanges, setView]);
216
+ setView,
217
+ goToNextStep: wrappedGoToNextStep
218
+ }), [setValue, setOpen, clearValue, setValueToToday, acceptValueChanges, cancelValueChanges, setView, wrappedGoToNextStep]);
210
219
  const contextValue = React.useMemo(() => (0, _extends2.default)({}, actionsContextValue, {
211
220
  value,
212
221
  timezone,
@@ -223,13 +232,14 @@ const usePicker = ({
223
232
  reduceAnimations,
224
233
  triggerRef,
225
234
  triggerStatus,
235
+ hasNextStep: stepNavigation.hasNextStep,
226
236
  fieldFormat: format ?? '',
227
237
  name,
228
238
  label,
229
239
  rootSx: sx,
230
240
  rootRef,
231
241
  rootClassName: className
232
- }), [actionsContextValue, value, rootRef, variant, orientation, reduceAnimations, disabled, readOnly, format, className, name, label, sx, triggerStatus, timezone, state.open, popperView, views, initialView, autoFocus]);
242
+ }), [actionsContextValue, value, rootRef, variant, orientation, reduceAnimations, disabled, readOnly, format, className, name, label, sx, triggerStatus, stepNavigation.hasNextStep, timezone, state.open, popperView, views, initialView, autoFocus]);
233
243
  const privateContextValue = React.useMemo(() => ({
234
244
  dismissViews,
235
245
  ownerState,
@@ -7,6 +7,7 @@ import { UseViewsOptions } from "../useViews.js";
7
7
  import { PickerProviderProps } from "../../components/PickerProvider.js";
8
8
  import { PickersInputLocaleText } from "../../../locales/index.js";
9
9
  import { PickerFieldPrivateContextValue } from "../useNullableFieldPrivateContext.js";
10
+ import { CreateStepNavigationReturnValue } from "../../utils/createStepNavigation.js";
10
11
  /**
11
12
  * Props common to all Picker headless implementations.
12
13
  * Those props are exposed on all the Pickers.
@@ -130,6 +131,7 @@ export interface UsePickerParameters<TValue extends PickerValidValue, TView exte
130
131
  */
131
132
  rendererInterceptor?: React.JSXElementConstructor<PickerRendererInterceptorProps<TValue, TView, TExternalProps>>;
132
133
  props: TExternalProps;
134
+ getStepNavigation: CreateStepNavigationReturnValue;
133
135
  }
134
136
  export interface UsePickerReturnValue<TValue extends PickerValidValue> {
135
137
  ownerState: PickerOwnerState;
@@ -9,6 +9,7 @@ import { DateOrTimeViewWithMeridiem } from "../../models/index.js";
9
9
  */
10
10
  export declare const useStaticPicker: <TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UseStaticPickerProps<TView, any, TExternalProps>>({
11
11
  props,
12
+ steps,
12
13
  ...pickerParams
13
14
  }: UseStaticPickerParams<TView, TExternalProps>) => {
14
15
  renderPicker: () => React.JSX.Element;
@@ -16,8 +16,9 @@ var _PickerProvider = require("../../components/PickerProvider");
16
16
  var _PickersLayout = require("../../../PickersLayout");
17
17
  var _dimensions = require("../../constants/dimensions");
18
18
  var _utils = require("../../utils/utils");
19
+ var _createNonRangePickerStepNavigation = require("../../utils/createNonRangePickerStepNavigation");
19
20
  var _jsxRuntime = require("react/jsx-runtime");
20
- const _excluded = ["props"];
21
+ const _excluded = ["props", "steps"];
21
22
  const PickerStaticLayout = (0, _styles.styled)(_PickersLayout.PickersLayout)(({
22
23
  theme
23
24
  }) => ({
@@ -34,7 +35,8 @@ const PickerStaticLayout = (0, _styles.styled)(_PickersLayout.PickersLayout)(({
34
35
  */
35
36
  const useStaticPicker = _ref => {
36
37
  let {
37
- props
38
+ props,
39
+ steps
38
40
  } = _ref,
39
41
  pickerParams = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
40
42
  const {
@@ -44,6 +46,9 @@ const useStaticPicker = _ref => {
44
46
  displayStaticWrapperAs,
45
47
  autoFocus
46
48
  } = props;
49
+ const getStepNavigation = (0, _createNonRangePickerStepNavigation.createNonRangePickerStepNavigation)({
50
+ steps
51
+ });
47
52
  const {
48
53
  providerProps,
49
54
  renderCurrentView
@@ -52,7 +57,8 @@ const useStaticPicker = _ref => {
52
57
  variant: displayStaticWrapperAs,
53
58
  autoFocusView: autoFocus ?? false,
54
59
  viewContainerRole: null,
55
- localeText
60
+ localeText,
61
+ getStepNavigation
56
62
  }));
57
63
  const Layout = slots?.layout ?? PickerStaticLayout;
58
64
  const renderPicker = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_PickerProvider.PickerProvider, (0, _extends2.default)({}, providerProps, {