@mui/x-date-pickers 6.4.0 → 6.6.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 (329) hide show
  1. package/AdapterDateFns/AdapterDateFns.d.ts +6 -0
  2. package/AdapterDateFns/AdapterDateFns.js +18 -0
  3. package/AdapterDateFnsJalali/AdapterDateFnsJalali.d.ts +6 -0
  4. package/AdapterDateFnsJalali/AdapterDateFnsJalali.js +18 -0
  5. package/AdapterDayjs/AdapterDayjs.d.ts +14 -1
  6. package/AdapterDayjs/AdapterDayjs.js +131 -14
  7. package/AdapterLuxon/AdapterLuxon.d.ts +7 -1
  8. package/AdapterLuxon/AdapterLuxon.js +58 -9
  9. package/AdapterMoment/AdapterMoment.d.ts +12 -1
  10. package/AdapterMoment/AdapterMoment.js +91 -2
  11. package/AdapterMomentHijri/AdapterMomentHijri.d.ts +4 -0
  12. package/AdapterMomentHijri/AdapterMomentHijri.js +10 -0
  13. package/AdapterMomentJalaali/AdapterMomentJalaali.d.ts +4 -0
  14. package/AdapterMomentJalaali/AdapterMomentJalaali.js +10 -0
  15. package/CHANGELOG.md +134 -2
  16. package/DateCalendar/DateCalendar.js +2 -2
  17. package/DateCalendar/DayCalendar.d.ts +1 -1
  18. package/DateCalendar/PickersCalendarHeader.d.ts +1 -1
  19. package/DateCalendar/PickersCalendarHeader.js +2 -2
  20. package/DateCalendar/PickersFadeTransitionGroup.d.ts +1 -1
  21. package/DateCalendar/PickersSlideTransition.d.ts +1 -1
  22. package/DateField/DateField.js +6 -0
  23. package/DateField/DateField.types.d.ts +2 -2
  24. package/DateField/index.d.ts +1 -1
  25. package/DateField/useDateField.d.ts +1 -1
  26. package/DateField/useDateField.js +9 -46
  27. package/DateTimeField/DateTimeField.js +6 -0
  28. package/DateTimeField/DateTimeField.types.d.ts +2 -2
  29. package/DateTimeField/index.d.ts +1 -1
  30. package/DateTimeField/useDateTimeField.d.ts +1 -1
  31. package/DateTimeField/useDateTimeField.js +9 -60
  32. package/DateTimePicker/DateTimePicker.js +19 -2
  33. package/DateTimePicker/DateTimePicker.types.d.ts +4 -3
  34. package/DateTimePicker/DateTimePickerTabs.d.ts +3 -3
  35. package/DateTimePicker/DateTimePickerTabs.js +6 -5
  36. package/DateTimePicker/DateTimePickerToolbar.d.ts +5 -4
  37. package/DateTimePicker/DateTimePickerToolbar.js +46 -22
  38. package/DateTimePicker/shared.d.ts +6 -6
  39. package/DayCalendarSkeleton/DayCalendarSkeleton.d.ts +1 -1
  40. package/DesktopDatePicker/DesktopDatePicker.js +2 -2
  41. package/DesktopDateTimePicker/DesktopDateTimePicker.js +54 -12
  42. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +10 -3
  43. package/DesktopTimePicker/DesktopTimePicker.js +3 -4
  44. package/MobileDateTimePicker/MobileDateTimePicker.js +1 -2
  45. package/MobileDateTimePicker/MobileDateTimePicker.types.d.ts +8 -7
  46. package/MobileTimePicker/MobileTimePicker.js +1 -2
  47. package/MonthCalendar/MonthCalendar.js +2 -2
  48. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +4 -3
  49. package/PickersActionBar/PickersActionBar.d.ts +2 -2
  50. package/PickersLayout/PickersLayout.d.ts +1 -1
  51. package/PickersShortcuts/PickersShortcuts.d.ts +2 -2
  52. package/README.md +5 -5
  53. package/StaticDateTimePicker/StaticDateTimePicker.types.d.ts +1 -1
  54. package/TimeClock/Clock.d.ts +1 -1
  55. package/TimeClock/ClockNumber.d.ts +1 -1
  56. package/TimeClock/ClockNumbers.d.ts +2 -2
  57. package/TimeClock/ClockPointer.d.ts +1 -1
  58. package/TimeField/TimeField.js +6 -0
  59. package/TimeField/TimeField.types.d.ts +1 -1
  60. package/TimeField/index.d.ts +1 -1
  61. package/TimeField/useTimeField.d.ts +1 -1
  62. package/TimeField/useTimeField.js +9 -50
  63. package/TimePicker/TimePickerToolbar.d.ts +2 -2
  64. package/YearCalendar/YearCalendar.js +2 -2
  65. package/dateTimeViewRenderers/dateTimeViewRenderers.d.ts +13 -0
  66. package/dateTimeViewRenderers/dateTimeViewRenderers.js +148 -0
  67. package/dateTimeViewRenderers/index.d.ts +2 -0
  68. package/dateTimeViewRenderers/index.js +1 -0
  69. package/dateTimeViewRenderers/package.json +6 -0
  70. package/dateViewRenderers/dateViewRenderers.d.ts +3 -2
  71. package/dateViewRenderers/dateViewRenderers.js +2 -2
  72. package/icons/index.d.ts +42 -0
  73. package/{internals/components/icons → icons}/index.js +7 -7
  74. package/icons/package.json +6 -0
  75. package/index.d.ts +1 -0
  76. package/index.js +3 -2
  77. package/internals/components/DateTimeViewWrapper/DateTimeViewWrapper.d.ts +2 -0
  78. package/internals/components/DateTimeViewWrapper/DateTimeViewWrapper.js +5 -0
  79. package/internals/components/DateTimeViewWrapper/index.d.ts +1 -0
  80. package/internals/components/DateTimeViewWrapper/index.js +1 -0
  81. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +3 -3
  82. package/internals/components/PickersModalDialog.d.ts +1 -1
  83. package/internals/components/PickersPopper.d.ts +1 -1
  84. package/internals/components/PickersToolbarButton.d.ts +1 -0
  85. package/internals/components/PickersToolbarButton.js +8 -3
  86. package/internals/constants/dimensions.d.ts +1 -0
  87. package/internals/constants/dimensions.js +2 -1
  88. package/internals/demo/DemoContainer.d.ts +2 -2
  89. package/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +2 -2
  90. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +2 -2
  91. package/internals/hooks/useField/useField.d.ts +1 -1
  92. package/internals/hooks/useField/useField.js +18 -5
  93. package/internals/hooks/useField/useField.types.d.ts +8 -2
  94. package/internals/hooks/useField/useFieldState.d.ts +1 -1
  95. package/internals/hooks/useField/useFieldState.js +22 -2
  96. package/internals/hooks/useMobilePicker/useMobilePicker.d.ts +2 -2
  97. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +2 -2
  98. package/internals/hooks/usePicker/usePickerValue.types.d.ts +32 -2
  99. package/internals/hooks/usePicker/usePickerViews.js +8 -10
  100. package/internals/hooks/useStaticPicker/useStaticPicker.d.ts +2 -2
  101. package/internals/hooks/useViews.js +12 -9
  102. package/internals/index.d.ts +4 -2
  103. package/internals/index.js +4 -2
  104. package/internals/models/fields.d.ts +1 -1
  105. package/internals/utils/date-utils.d.ts +4 -1
  106. package/internals/utils/date-utils.js +4 -1
  107. package/internals/utils/fields.d.ts +5 -0
  108. package/internals/utils/fields.js +28 -0
  109. package/internals/utils/getDefaultReferenceDate.d.ts +15 -0
  110. package/internals/utils/getDefaultReferenceDate.js +62 -0
  111. package/internals/utils/time-utils.d.ts +2 -1
  112. package/internals/utils/time-utils.js +1 -0
  113. package/internals/utils/validation/extractValidationProps.d.ts +5 -1
  114. package/internals/utils/validation/extractValidationProps.js +4 -1
  115. package/internals/utils/valueManagers.js +21 -3
  116. package/legacy/AdapterDateFns/AdapterDateFns.js +18 -0
  117. package/legacy/AdapterDateFnsJalali/AdapterDateFnsJalali.js +18 -0
  118. package/legacy/AdapterDayjs/AdapterDayjs.js +135 -14
  119. package/legacy/AdapterLuxon/AdapterLuxon.js +58 -9
  120. package/legacy/AdapterMoment/AdapterMoment.js +97 -6
  121. package/legacy/AdapterMomentHijri/AdapterMomentHijri.js +10 -0
  122. package/legacy/AdapterMomentJalaali/AdapterMomentJalaali.js +10 -0
  123. package/legacy/DateCalendar/DateCalendar.js +2 -2
  124. package/legacy/DateCalendar/PickersCalendarHeader.js +2 -2
  125. package/legacy/DateField/DateField.js +6 -0
  126. package/legacy/DateField/useDateField.js +8 -44
  127. package/legacy/DateTimeField/DateTimeField.js +6 -0
  128. package/legacy/DateTimeField/useDateTimeField.js +8 -60
  129. package/legacy/DateTimePicker/DateTimePicker.js +19 -2
  130. package/legacy/DateTimePicker/DateTimePickerTabs.js +6 -5
  131. package/legacy/DateTimePicker/DateTimePickerToolbar.js +51 -23
  132. package/legacy/DesktopDatePicker/DesktopDatePicker.js +2 -2
  133. package/legacy/DesktopDateTimePicker/DesktopDateTimePicker.js +55 -12
  134. package/legacy/DesktopTimePicker/DesktopTimePicker.js +3 -4
  135. package/legacy/MobileDateTimePicker/MobileDateTimePicker.js +1 -2
  136. package/legacy/MobileTimePicker/MobileTimePicker.js +1 -2
  137. package/legacy/MonthCalendar/MonthCalendar.js +2 -2
  138. package/legacy/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +4 -3
  139. package/legacy/TimeField/TimeField.js +6 -0
  140. package/legacy/TimeField/useTimeField.js +8 -48
  141. package/legacy/YearCalendar/YearCalendar.js +2 -2
  142. package/legacy/dateTimeViewRenderers/dateTimeViewRenderers.js +147 -0
  143. package/legacy/dateTimeViewRenderers/index.js +1 -0
  144. package/legacy/dateViewRenderers/dateViewRenderers.js +2 -4
  145. package/legacy/{internals/components/icons → icons}/index.js +7 -7
  146. package/legacy/index.js +3 -2
  147. package/legacy/internals/components/DateTimeViewWrapper/DateTimeViewWrapper.js +5 -0
  148. package/legacy/internals/components/DateTimeViewWrapper/index.js +1 -0
  149. package/legacy/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +3 -3
  150. package/legacy/internals/components/PickersToolbarButton.js +7 -2
  151. package/legacy/internals/constants/dimensions.js +2 -1
  152. package/legacy/internals/hooks/useField/useField.js +20 -7
  153. package/legacy/internals/hooks/useField/useFieldState.js +22 -2
  154. package/legacy/internals/hooks/usePicker/usePickerViews.js +4 -4
  155. package/legacy/internals/hooks/useViews.js +12 -9
  156. package/legacy/internals/index.js +4 -2
  157. package/legacy/internals/utils/date-utils.js +7 -0
  158. package/legacy/internals/utils/fields.js +28 -0
  159. package/legacy/internals/utils/getDefaultReferenceDate.js +64 -0
  160. package/legacy/internals/utils/time-utils.js +3 -0
  161. package/legacy/internals/utils/validation/extractValidationProps.js +4 -1
  162. package/legacy/internals/utils/valueManagers.js +20 -4
  163. package/legacy/locales/index.js +1 -0
  164. package/legacy/locales/viVN.js +93 -0
  165. package/legacy/models/index.js +1 -0
  166. package/legacy/models/timezone.js +1 -0
  167. package/legacy/tests/describeGregorianAdapter/describeGregorianAdapter.js +16 -1
  168. package/legacy/tests/describeGregorianAdapter/testCalculations.js +350 -80
  169. package/legacy/tests/describeGregorianAdapter/testLocalization.js +3 -3
  170. package/legacy/tests/describeValidation/testDayViewValidation.js +129 -52
  171. package/legacy/tests/describeValidation/testMinutesViewValidation.js +3 -10
  172. package/legacy/tests/describeValidation/testMonthViewValidation.js +3 -10
  173. package/legacy/tests/describeValidation/testYearViewValidation.js +3 -10
  174. package/legacy/tests/describeValue/describeValue.js +38 -4
  175. package/legacy/tests/describeValue/testControlledUnControlled.js +44 -23
  176. package/legacy/tests/describeValue/testPickerActionBar.js +51 -45
  177. package/legacy/tests/describeValue/testPickerOpenCloseLifeCycle.js +102 -78
  178. package/legacy/timeViewRenderers/timeViewRenderers.js +1 -1
  179. package/locales/index.d.ts +1 -0
  180. package/locales/index.js +1 -0
  181. package/locales/viVN.d.ts +53 -0
  182. package/locales/viVN.js +57 -0
  183. package/models/adapters.d.ts +50 -9
  184. package/models/fields.d.ts +1 -1
  185. package/models/index.d.ts +1 -0
  186. package/models/index.js +1 -0
  187. package/models/timezone.d.ts +1 -0
  188. package/models/timezone.js +1 -0
  189. package/modern/AdapterDateFns/AdapterDateFns.js +18 -0
  190. package/modern/AdapterDateFnsJalali/AdapterDateFnsJalali.js +18 -0
  191. package/modern/AdapterDayjs/AdapterDayjs.js +130 -14
  192. package/modern/AdapterLuxon/AdapterLuxon.js +57 -9
  193. package/modern/AdapterMoment/AdapterMoment.js +90 -2
  194. package/modern/AdapterMomentHijri/AdapterMomentHijri.js +10 -0
  195. package/modern/AdapterMomentJalaali/AdapterMomentJalaali.js +10 -0
  196. package/modern/DateCalendar/DateCalendar.js +2 -2
  197. package/modern/DateCalendar/PickersCalendarHeader.js +2 -2
  198. package/modern/DateField/DateField.js +6 -0
  199. package/modern/DateField/useDateField.js +9 -46
  200. package/modern/DateTimeField/DateTimeField.js +6 -0
  201. package/modern/DateTimeField/useDateTimeField.js +9 -60
  202. package/modern/DateTimePicker/DateTimePicker.js +19 -2
  203. package/modern/DateTimePicker/DateTimePickerTabs.js +6 -5
  204. package/modern/DateTimePicker/DateTimePickerToolbar.js +46 -22
  205. package/modern/DesktopDatePicker/DesktopDatePicker.js +2 -2
  206. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +53 -11
  207. package/modern/DesktopTimePicker/DesktopTimePicker.js +3 -4
  208. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +1 -2
  209. package/modern/MobileTimePicker/MobileTimePicker.js +1 -2
  210. package/modern/MonthCalendar/MonthCalendar.js +2 -2
  211. package/modern/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +4 -3
  212. package/modern/TimeField/TimeField.js +6 -0
  213. package/modern/TimeField/useTimeField.js +9 -50
  214. package/modern/YearCalendar/YearCalendar.js +2 -2
  215. package/modern/dateTimeViewRenderers/dateTimeViewRenderers.js +147 -0
  216. package/modern/dateTimeViewRenderers/index.js +1 -0
  217. package/modern/dateViewRenderers/dateViewRenderers.js +2 -2
  218. package/modern/{internals/components/icons → icons}/index.js +7 -7
  219. package/modern/index.js +3 -2
  220. package/modern/internals/components/DateTimeViewWrapper/DateTimeViewWrapper.js +5 -0
  221. package/modern/internals/components/DateTimeViewWrapper/index.js +1 -0
  222. package/modern/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +3 -3
  223. package/modern/internals/components/PickersToolbarButton.js +8 -3
  224. package/modern/internals/constants/dimensions.js +2 -1
  225. package/modern/internals/hooks/useField/useField.js +18 -5
  226. package/modern/internals/hooks/useField/useFieldState.js +22 -2
  227. package/modern/internals/hooks/usePicker/usePickerViews.js +8 -10
  228. package/modern/internals/hooks/useViews.js +12 -9
  229. package/modern/internals/index.js +4 -2
  230. package/modern/internals/utils/date-utils.js +4 -1
  231. package/modern/internals/utils/fields.js +28 -0
  232. package/modern/internals/utils/getDefaultReferenceDate.js +58 -0
  233. package/modern/internals/utils/time-utils.js +1 -0
  234. package/modern/internals/utils/validation/extractValidationProps.js +4 -1
  235. package/modern/internals/utils/valueManagers.js +21 -3
  236. package/modern/locales/index.js +1 -0
  237. package/modern/locales/viVN.js +57 -0
  238. package/modern/models/index.js +1 -0
  239. package/modern/models/timezone.js +1 -0
  240. package/modern/tests/describeGregorianAdapter/describeGregorianAdapter.js +13 -1
  241. package/modern/tests/describeGregorianAdapter/testCalculations.js +348 -80
  242. package/modern/tests/describeGregorianAdapter/testLocalization.js +3 -3
  243. package/modern/tests/describeValidation/testDayViewValidation.js +129 -52
  244. package/modern/tests/describeValidation/testMinutesViewValidation.js +3 -10
  245. package/modern/tests/describeValidation/testMonthViewValidation.js +3 -10
  246. package/modern/tests/describeValidation/testYearViewValidation.js +3 -10
  247. package/modern/tests/describeValue/describeValue.js +39 -4
  248. package/modern/tests/describeValue/testControlledUnControlled.js +35 -16
  249. package/modern/tests/describeValue/testPickerActionBar.js +38 -29
  250. package/modern/tests/describeValue/testPickerOpenCloseLifeCycle.js +89 -58
  251. package/modern/timeViewRenderers/timeViewRenderers.js +1 -1
  252. package/node/AdapterDateFns/AdapterDateFns.js +18 -0
  253. package/node/AdapterDateFnsJalali/AdapterDateFnsJalali.js +18 -0
  254. package/node/AdapterDayjs/AdapterDayjs.js +130 -14
  255. package/node/AdapterLuxon/AdapterLuxon.js +57 -9
  256. package/node/AdapterMoment/AdapterMoment.js +90 -2
  257. package/node/AdapterMomentHijri/AdapterMomentHijri.js +10 -0
  258. package/node/AdapterMomentJalaali/AdapterMomentJalaali.js +10 -0
  259. package/node/DateCalendar/DateCalendar.js +2 -2
  260. package/node/DateCalendar/PickersCalendarHeader.js +2 -2
  261. package/node/DateField/DateField.js +6 -0
  262. package/node/DateField/useDateField.js +9 -46
  263. package/node/DateTimeField/DateTimeField.js +6 -0
  264. package/node/DateTimeField/useDateTimeField.js +9 -60
  265. package/node/DateTimePicker/DateTimePicker.js +19 -2
  266. package/node/DateTimePicker/DateTimePickerTabs.js +6 -5
  267. package/node/DateTimePicker/DateTimePickerToolbar.js +46 -22
  268. package/node/DesktopDatePicker/DesktopDatePicker.js +2 -2
  269. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +53 -11
  270. package/node/DesktopTimePicker/DesktopTimePicker.js +3 -4
  271. package/node/MobileDateTimePicker/MobileDateTimePicker.js +1 -2
  272. package/node/MobileTimePicker/MobileTimePicker.js +1 -2
  273. package/node/MonthCalendar/MonthCalendar.js +2 -2
  274. package/node/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +3 -2
  275. package/node/TimeField/TimeField.js +6 -0
  276. package/node/TimeField/useTimeField.js +9 -50
  277. package/node/YearCalendar/YearCalendar.js +2 -2
  278. package/node/dateTimeViewRenderers/dateTimeViewRenderers.js +156 -0
  279. package/node/dateTimeViewRenderers/index.js +12 -0
  280. package/node/dateViewRenderers/dateViewRenderers.js +3 -3
  281. package/node/{internals/components/icons → icons}/index.js +15 -15
  282. package/node/index.js +13 -1
  283. package/node/internals/components/DateTimeViewWrapper/DateTimeViewWrapper.js +12 -0
  284. package/node/internals/components/DateTimeViewWrapper/index.js +12 -0
  285. package/node/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +3 -3
  286. package/node/internals/components/PickersToolbarButton.js +8 -3
  287. package/node/internals/constants/dimensions.js +4 -2
  288. package/node/internals/hooks/useField/useField.js +18 -5
  289. package/node/internals/hooks/useField/useFieldState.js +22 -2
  290. package/node/internals/hooks/usePicker/usePickerViews.js +8 -10
  291. package/node/internals/hooks/useViews.js +12 -9
  292. package/node/internals/index.js +26 -0
  293. package/node/internals/utils/date-utils.js +7 -2
  294. package/node/internals/utils/fields.js +36 -0
  295. package/node/internals/utils/getDefaultReferenceDate.js +66 -0
  296. package/node/internals/utils/time-utils.js +3 -1
  297. package/node/internals/utils/validation/extractValidationProps.js +8 -2
  298. package/node/internals/utils/valueManagers.js +21 -2
  299. package/node/locales/index.js +11 -0
  300. package/node/locales/viVN.js +64 -0
  301. package/node/models/index.js +11 -0
  302. package/node/models/timezone.js +5 -0
  303. package/node/tests/describeGregorianAdapter/describeGregorianAdapter.js +13 -1
  304. package/node/tests/describeGregorianAdapter/testCalculations.js +348 -80
  305. package/node/tests/describeGregorianAdapter/testLocalization.js +3 -4
  306. package/node/tests/describeValidation/testDayViewValidation.js +129 -52
  307. package/node/tests/describeValidation/testMinutesViewValidation.js +3 -10
  308. package/node/tests/describeValidation/testMonthViewValidation.js +3 -10
  309. package/node/tests/describeValidation/testYearViewValidation.js +3 -10
  310. package/node/tests/describeValue/describeValue.js +39 -4
  311. package/node/tests/describeValue/testControlledUnControlled.js +35 -16
  312. package/node/tests/describeValue/testPickerActionBar.js +38 -28
  313. package/node/tests/describeValue/testPickerOpenCloseLifeCycle.js +88 -57
  314. package/node/timeViewRenderers/timeViewRenderers.js +1 -1
  315. package/package.json +5 -5
  316. package/tests/describeGregorianAdapter/describeGregorianAdapter.js +14 -1
  317. package/tests/describeGregorianAdapter/testCalculations.js +348 -80
  318. package/tests/describeGregorianAdapter/testLocalization.js +3 -3
  319. package/tests/describeValidation/testDayViewValidation.js +129 -52
  320. package/tests/describeValidation/testMinutesViewValidation.js +3 -10
  321. package/tests/describeValidation/testMonthViewValidation.js +3 -10
  322. package/tests/describeValidation/testYearViewValidation.js +3 -10
  323. package/tests/describeValue/describeValue.js +39 -4
  324. package/tests/describeValue/testControlledUnControlled.js +35 -16
  325. package/tests/describeValue/testPickerActionBar.js +38 -29
  326. package/tests/describeValue/testPickerOpenCloseLifeCycle.js +89 -58
  327. package/timeViewRenderers/timeViewRenderers.d.ts +4 -4
  328. package/timeViewRenderers/timeViewRenderers.js +1 -1
  329. package/internals/components/icons/index.d.ts +0 -42
@@ -0,0 +1,147 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import * as React from 'react';
3
+ import Divider from '@mui/material/Divider';
4
+ import { resolveComponentProps } from '@mui/base/utils';
5
+ import { DateCalendar } from '../DateCalendar';
6
+ import { MultiSectionDigitalClock, multiSectionDigitalClockSectionClasses } from '../MultiSectionDigitalClock';
7
+ import { DateTimeViewWrapper } from '../internals/components/DateTimeViewWrapper';
8
+ import { isInternalTimeView } from '../internals/utils/time-utils';
9
+ import { isDatePickerView } from '../internals/utils/date-utils';
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ import { jsxs as _jsxs } from "react/jsx-runtime";
12
+ export const renderDesktopDateTimeView = ({
13
+ view,
14
+ onViewChange,
15
+ views,
16
+ focusedView,
17
+ onFocusedViewChange,
18
+ value,
19
+ defaultValue,
20
+ onChange,
21
+ className,
22
+ classes,
23
+ disableFuture,
24
+ disablePast,
25
+ minDate,
26
+ minTime,
27
+ maxDate,
28
+ maxTime,
29
+ shouldDisableDate,
30
+ shouldDisableMonth,
31
+ shouldDisableYear,
32
+ shouldDisableTime,
33
+ shouldDisableClock,
34
+ reduceAnimations,
35
+ minutesStep,
36
+ ampm,
37
+ onMonthChange,
38
+ monthsPerRow,
39
+ onYearChange,
40
+ yearsPerRow,
41
+ defaultCalendarMonth,
42
+ components,
43
+ componentsProps,
44
+ slots,
45
+ slotProps,
46
+ loading,
47
+ renderLoading,
48
+ disableHighlightToday,
49
+ readOnly,
50
+ disabled,
51
+ showDaysOutsideCurrentMonth,
52
+ dayOfWeekFormatter,
53
+ sx,
54
+ autoFocus,
55
+ fixedWeekNumber,
56
+ displayWeekNumber,
57
+ disableIgnoringDatePartForTimeValidation,
58
+ timeSteps,
59
+ skipDisabled,
60
+ timeViewsCount
61
+ }) => {
62
+ const isActionBarVisible = !!resolveComponentProps(slotProps?.actionBar ?? componentsProps?.actionBar, {})?.actions?.length;
63
+ return /*#__PURE__*/_jsxs(React.Fragment, {
64
+ children: [/*#__PURE__*/_jsxs(DateTimeViewWrapper, {
65
+ children: [/*#__PURE__*/_jsx(DateCalendar, {
66
+ view: isDatePickerView(view) ? view : 'day',
67
+ onViewChange: onViewChange,
68
+ views: views.filter(isDatePickerView),
69
+ focusedView: focusedView && isDatePickerView(focusedView) ? focusedView : null,
70
+ onFocusedViewChange: onFocusedViewChange,
71
+ value: value,
72
+ defaultValue: defaultValue,
73
+ onChange: onChange,
74
+ className: className,
75
+ classes: classes,
76
+ disableFuture: disableFuture,
77
+ disablePast: disablePast,
78
+ minDate: minDate,
79
+ maxDate: maxDate,
80
+ shouldDisableDate: shouldDisableDate,
81
+ shouldDisableMonth: shouldDisableMonth,
82
+ shouldDisableYear: shouldDisableYear,
83
+ reduceAnimations: reduceAnimations,
84
+ onMonthChange: onMonthChange,
85
+ monthsPerRow: monthsPerRow,
86
+ onYearChange: onYearChange,
87
+ yearsPerRow: yearsPerRow,
88
+ defaultCalendarMonth: defaultCalendarMonth,
89
+ components: components,
90
+ componentsProps: componentsProps,
91
+ slots: slots,
92
+ slotProps: slotProps,
93
+ loading: loading,
94
+ renderLoading: renderLoading,
95
+ disableHighlightToday: disableHighlightToday,
96
+ readOnly: readOnly,
97
+ disabled: disabled,
98
+ showDaysOutsideCurrentMonth: showDaysOutsideCurrentMonth,
99
+ dayOfWeekFormatter: dayOfWeekFormatter,
100
+ sx: sx,
101
+ autoFocus: autoFocus,
102
+ fixedWeekNumber: fixedWeekNumber,
103
+ displayWeekNumber: displayWeekNumber
104
+ }), timeViewsCount > 0 && /*#__PURE__*/_jsxs(React.Fragment, {
105
+ children: [/*#__PURE__*/_jsx(Divider, {
106
+ orientation: "vertical"
107
+ }), /*#__PURE__*/_jsx(MultiSectionDigitalClock, {
108
+ view: isInternalTimeView(view) ? view : 'hours',
109
+ onViewChange: onViewChange,
110
+ focusedView: focusedView && isInternalTimeView(focusedView) ? focusedView : null,
111
+ onFocusedViewChange: onFocusedViewChange,
112
+ views: views.filter(isInternalTimeView),
113
+ value: value,
114
+ defaultValue: defaultValue,
115
+ onChange: onChange,
116
+ className: className,
117
+ classes: classes,
118
+ disableFuture: disableFuture,
119
+ disablePast: disablePast,
120
+ minTime: minTime,
121
+ maxTime: maxTime,
122
+ shouldDisableTime: shouldDisableTime,
123
+ shouldDisableClock: shouldDisableClock,
124
+ minutesStep: minutesStep,
125
+ ampm: ampm,
126
+ components: components,
127
+ componentsProps: componentsProps,
128
+ slots: slots,
129
+ slotProps: slotProps,
130
+ readOnly: readOnly,
131
+ disabled: disabled,
132
+ sx: _extends({
133
+ borderBottom: 0,
134
+ width: 'auto',
135
+ [`.${multiSectionDigitalClockSectionClasses.root}`]: {
136
+ maxHeight: '100%'
137
+ }
138
+ }, Array.isArray(sx) ? sx : [sx]),
139
+ autoFocus: autoFocus,
140
+ disableIgnoringDatePartForTimeValidation: disableIgnoringDatePartForTimeValidation,
141
+ timeSteps: timeSteps,
142
+ skipDisabled: skipDisabled
143
+ })]
144
+ })]
145
+ }), isActionBarVisible && /*#__PURE__*/_jsx(Divider, {})]
146
+ });
147
+ };
@@ -0,0 +1 @@
1
+ export { renderDesktopDateTimeView } from './dateTimeViewRenderers';
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { DateCalendar } from '../DateCalendar';
3
+ import { isDatePickerView } from '../internals/utils/date-utils';
3
4
  import { jsx as _jsx } from "react/jsx-runtime";
4
- const isDatePickerView = view => view === 'year' || view === 'month' || view === 'day';
5
5
  export const renderDateViewCalendar = ({
6
6
  view,
7
7
  onViewChange,
@@ -45,7 +45,7 @@ export const renderDateViewCalendar = ({
45
45
  view: view,
46
46
  onViewChange: onViewChange,
47
47
  views: views.filter(isDatePickerView),
48
- focusedView: focusedView,
48
+ focusedView: focusedView && isDatePickerView(focusedView) ? focusedView : null,
49
49
  onFocusedViewChange: onFocusedViewChange,
50
50
  value: value,
51
51
  defaultValue: defaultValue,
@@ -6,35 +6,35 @@ import * as React from 'react';
6
6
  */
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
8
8
  import { jsxs as _jsxs } from "react/jsx-runtime";
9
- export const ArrowDropDown = createSvgIcon( /*#__PURE__*/_jsx("path", {
9
+ export const ArrowDropDownIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
10
10
  d: "M7 10l5 5 5-5z"
11
11
  }), 'ArrowDropDown');
12
12
 
13
13
  /**
14
14
  * @ignore - internal component.
15
15
  */
16
- export const ArrowLeft = createSvgIcon( /*#__PURE__*/_jsx("path", {
16
+ export const ArrowLeftIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
17
17
  d: "M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z"
18
18
  }), 'ArrowLeft');
19
19
 
20
20
  /**
21
21
  * @ignore - internal component.
22
22
  */
23
- export const ArrowRight = createSvgIcon( /*#__PURE__*/_jsx("path", {
23
+ export const ArrowRightIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
24
24
  d: "M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z"
25
25
  }), 'ArrowRight');
26
26
 
27
27
  /**
28
28
  * @ignore - internal component.
29
29
  */
30
- export const Calendar = createSvgIcon( /*#__PURE__*/_jsx("path", {
30
+ export const CalendarIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
31
31
  d: "M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"
32
32
  }), 'Calendar');
33
33
 
34
34
  /**
35
35
  * @ignore - internal component.
36
36
  */
37
- export const Clock = createSvgIcon( /*#__PURE__*/_jsxs(React.Fragment, {
37
+ export const ClockIcon = createSvgIcon( /*#__PURE__*/_jsxs(React.Fragment, {
38
38
  children: [/*#__PURE__*/_jsx("path", {
39
39
  d: "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"
40
40
  }), /*#__PURE__*/_jsx("path", {
@@ -45,14 +45,14 @@ export const Clock = createSvgIcon( /*#__PURE__*/_jsxs(React.Fragment, {
45
45
  /**
46
46
  * @ignore - internal component.
47
47
  */
48
- export const DateRange = createSvgIcon( /*#__PURE__*/_jsx("path", {
48
+ export const DateRangeIcon = createSvgIcon( /*#__PURE__*/_jsx("path", {
49
49
  d: "M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z"
50
50
  }), 'DateRange');
51
51
 
52
52
  /**
53
53
  * @ignore - internal component.
54
54
  */
55
- export const Time = createSvgIcon( /*#__PURE__*/_jsxs(React.Fragment, {
55
+ export const TimeIcon = createSvgIcon( /*#__PURE__*/_jsxs(React.Fragment, {
56
56
  children: [/*#__PURE__*/_jsx("path", {
57
57
  d: "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"
58
58
  }), /*#__PURE__*/_jsx("path", {
package/modern/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v6.4.0
2
+ * @mui/x-date-pickers v6.6.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -47,4 +47,5 @@ export * from './PickersLayout';
47
47
  export * from './PickersActionBar';
48
48
  export * from './PickersShortcuts';
49
49
  export { DEFAULT_DESKTOP_MODE_MEDIA_QUERY } from './internals/utils/utils';
50
- export * from './models';
50
+ export * from './models';
51
+ export * from './icons';
@@ -0,0 +1,5 @@
1
+ import { styled } from '@mui/material/styles';
2
+ export const DateTimeViewWrapper = styled('div')({
3
+ display: 'flex',
4
+ margin: '0 auto'
5
+ });
@@ -0,0 +1 @@
1
+ export { DateTimeViewWrapper } from './DateTimeViewWrapper';
@@ -10,7 +10,7 @@ import { useTheme, styled, useThemeProps } from '@mui/material/styles';
10
10
  import { unstable_composeClasses as composeClasses } from '@mui/utils';
11
11
  import { useSlotProps } from '@mui/base/utils';
12
12
  import IconButton from '@mui/material/IconButton';
13
- import { ArrowLeft, ArrowRight } from '../icons';
13
+ import { ArrowLeftIcon, ArrowRightIcon } from '../../../icons';
14
14
  import { getPickersArrowSwitcherUtilityClass } from './pickersArrowSwitcherClasses';
15
15
  import { jsx as _jsx } from "react/jsx-runtime";
16
16
  import { jsxs as _jsxs } from "react/jsx-runtime";
@@ -121,7 +121,7 @@ export const PickersArrowSwitcher = /*#__PURE__*/React.forwardRef(function Picke
121
121
  }),
122
122
  className: classes.button
123
123
  });
124
- const LeftArrowIcon = slots?.leftArrowIcon ?? ArrowLeft;
124
+ const LeftArrowIcon = slots?.leftArrowIcon ?? ArrowLeftIcon;
125
125
  // The spread is here to avoid this bug mui/material-ui#34056
126
126
  const _useSlotProps = useSlotProps({
127
127
  elementType: LeftArrowIcon,
@@ -132,7 +132,7 @@ export const PickersArrowSwitcher = /*#__PURE__*/React.forwardRef(function Picke
132
132
  ownerState: undefined
133
133
  }),
134
134
  leftArrowIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
135
- const RightArrowIcon = slots?.rightArrowIcon ?? ArrowRight;
135
+ const RightArrowIcon = slots?.rightArrowIcon ?? ArrowRightIcon;
136
136
  // The spread is here to avoid this bug mui/material-ui#34056
137
137
  const _useSlotProps2 = useSlotProps({
138
138
  elementType: RightArrowIcon,
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["align", "className", "selected", "typographyClassName", "value", "variant"];
3
+ const _excluded = ["align", "className", "selected", "typographyClassName", "value", "variant", "width"];
4
4
  import * as React from 'react';
5
5
  import clsx from 'clsx';
6
6
  import Button from '@mui/material/Button';
@@ -38,7 +38,8 @@ export const PickersToolbarButton = /*#__PURE__*/React.forwardRef(function Picke
38
38
  selected,
39
39
  typographyClassName,
40
40
  value,
41
- variant
41
+ variant,
42
+ width
42
43
  } = props,
43
44
  other = _objectWithoutPropertiesLoose(props, _excluded);
44
45
  const classes = useUtilityClasses(props);
@@ -46,7 +47,11 @@ export const PickersToolbarButton = /*#__PURE__*/React.forwardRef(function Picke
46
47
  variant: "text",
47
48
  ref: ref,
48
49
  className: clsx(className, classes.root)
49
- }, other, {
50
+ }, width ? {
51
+ sx: {
52
+ width
53
+ }
54
+ } : {}, other, {
50
55
  children: /*#__PURE__*/_jsx(PickersToolbarText, {
51
56
  align: align,
52
57
  className: typographyClassName,
@@ -2,4 +2,5 @@ export const DAY_SIZE = 36;
2
2
  export const DAY_MARGIN = 2;
3
3
  export const DIALOG_WIDTH = 320;
4
4
  export const VIEW_HEIGHT = 358;
5
- export const DIGITAL_CLOCK_VIEW_HEIGHT = 232;
5
+ export const DIGITAL_CLOCK_VIEW_HEIGHT = 232;
6
+ export const MULTI_SECTION_CLOCK_SECTION_WIDTH = 48;
@@ -68,8 +68,16 @@ export const useField = params => {
68
68
  return;
69
69
  }
70
70
  const browserStartIndex = inputRef.current.selectionStart ?? 0;
71
- const nextSectionIndex = browserStartIndex <= state.sections[0].startInInput ? 1 // Special case if browser index is in invisible characters at the beginning.
72
- : state.sections.findIndex(section => section.startInInput - section.startSeparator.length > browserStartIndex);
71
+ let nextSectionIndex;
72
+ if (browserStartIndex <= state.sections[0].startInInput) {
73
+ // Special case if browser index is in invisible characters at the beginning
74
+ nextSectionIndex = 1;
75
+ } else if (browserStartIndex >= state.sections[state.sections.length - 1].endInInput) {
76
+ // If the click is after the last character of the input, then we want to select the 1st section.
77
+ nextSectionIndex = 1;
78
+ } else {
79
+ nextSectionIndex = state.sections.findIndex(section => section.startInInput - section.startSeparator.length > browserStartIndex);
80
+ }
73
81
  const sectionIndex = nextSectionIndex === -1 ? state.sections.length - 1 : nextSectionIndex - 1;
74
82
  setSelectedSections(sectionIndex);
75
83
  };
@@ -150,7 +158,7 @@ export const useField = params => {
150
158
  return;
151
159
  }
152
160
  let keyPressed;
153
- if (selectedSectionIndexes.startIndex === 0 && selectedSectionIndexes.endIndex === state.sections.length - 1) {
161
+ if (selectedSectionIndexes.startIndex === 0 && selectedSectionIndexes.endIndex === state.sections.length - 1 && cleanValueStr.length === 1) {
154
162
  keyPressed = cleanValueStr;
155
163
  } else {
156
164
  const prevValueStr = cleanString(fieldValueManager.getValueStrFromSections(state.sections, isRTL));
@@ -173,7 +181,7 @@ export const useField = params => {
173
181
 
174
182
  // The active section being selected, the browser has replaced its value with the key pressed by the user.
175
183
  const activeSectionEndRelativeToNewValue = cleanValueStr.length - prevValueStr.length + activeSection.end - cleanString(activeSection.endSeparator || '').length;
176
- keyPressed = cleanValueStr.slice(activeSection.start, activeSectionEndRelativeToNewValue);
184
+ keyPressed = cleanValueStr.slice(activeSection.start + cleanString(activeSection.startSeparator || '').length, activeSectionEndRelativeToNewValue);
177
185
  }
178
186
  if (isAndroid() && keyPressed.length === 0) {
179
187
  setTempAndroidValueStr(valueStr);
@@ -289,7 +297,12 @@ export const useField = params => {
289
297
  if (selectionStart !== inputRef.current.selectionStart || selectionEnd !== inputRef.current.selectionEnd) {
290
298
  // Fix scroll jumping on iOS browser: https://github.com/mui/mui-x/issues/8321
291
299
  const currentScrollTop = inputRef.current.scrollTop;
292
- inputRef.current.setSelectionRange(selectionStart, selectionEnd);
300
+ // On multi input range pickers we want to update selection range only for the active input
301
+ // This helps avoiding the focus jumping on Safari https://github.com/mui/mui-x/issues/9003
302
+ // because WebKit implements the `setSelectionRange` based on the spec: https://bugs.webkit.org/show_bug.cgi?id=224425
303
+ if (inputRef.current && inputRef.current === getActiveElement(document)) {
304
+ inputRef.current.setSelectionRange(selectionStart, selectionEnd);
305
+ }
293
306
  // Even reading this variable seems to do the trick, but also setting it just to make use of it
294
307
  inputRef.current.scrollTop = currentScrollTop;
295
308
  }
@@ -4,6 +4,7 @@ import useControlled from '@mui/utils/useControlled';
4
4
  import { useTheme } from '@mui/material/styles';
5
5
  import { useUtils, useLocaleText, useLocalizationContext } from '../useUtils';
6
6
  import { addPositionPropertiesToSections, splitFormatIntoSections, clampDaySectionIfPossible, mergeDateIntoReferenceDate, getSectionsBoundaries, validateSections, getDateFromDateSections } from './useField.utils';
7
+ import { getSectionTypeGranularity } from '../../utils/getDefaultReferenceDate';
7
8
  export const useFieldState = params => {
8
9
  const utils = useUtils();
9
10
  const localeText = useLocaleText();
@@ -19,6 +20,7 @@ export const useFieldState = params => {
19
20
  internalProps: {
20
21
  value: valueProp,
21
22
  defaultValue,
23
+ referenceDate: referenceDateProp,
22
24
  onChange,
23
25
  format,
24
26
  formatDensity = 'dense',
@@ -35,12 +37,24 @@ export const useFieldState = params => {
35
37
  const [state, setState] = React.useState(() => {
36
38
  const sections = getSectionsFromValue(valueFromTheOutside);
37
39
  validateSections(sections, valueType);
38
- return {
40
+ const stateWithoutReferenceDate = {
39
41
  sections,
40
42
  value: valueFromTheOutside,
41
- referenceValue: fieldValueManager.updateReferenceValue(utils, valueFromTheOutside, valueManager.getTodayValue(utils, valueType)),
43
+ referenceValue: valueManager.emptyValue,
42
44
  tempValueStrAndroid: null
43
45
  };
46
+ const granularity = getSectionTypeGranularity(sections);
47
+ const referenceValue = valueManager.getInitialReferenceValue({
48
+ referenceDate: referenceDateProp,
49
+ value: valueFromTheOutside,
50
+ valueType,
51
+ utils,
52
+ props: internalProps,
53
+ granularity
54
+ });
55
+ return _extends({}, stateWithoutReferenceDate, {
56
+ referenceValue
57
+ });
44
58
  });
45
59
  const [selectedSections, innerSetSelectedSections] = useControlled({
46
60
  controlled: selectedSectionsProp,
@@ -240,7 +254,13 @@ export const useFieldState = params => {
240
254
  tempValueStrAndroid
241
255
  }));
242
256
  React.useEffect(() => {
257
+ let shouldUpdate = false;
243
258
  if (!valueManager.areValuesEqual(utils, state.value, valueFromTheOutside)) {
259
+ shouldUpdate = true;
260
+ } else {
261
+ shouldUpdate = valueManager.getTimezone(utils, state.value) !== valueManager.getTimezone(utils, valueFromTheOutside);
262
+ }
263
+ if (shouldUpdate) {
244
264
  setState(prevState => _extends({}, prevState, {
245
265
  value: valueFromTheOutside,
246
266
  referenceValue: fieldValueManager.updateReferenceValue(utils, valueFromTheOutside, prevState.referenceValue),
@@ -82,15 +82,12 @@ export const usePickerViews = ({
82
82
  hasUIView: false,
83
83
  viewModeLookup: {}
84
84
  }), [disableOpenPicker, viewRenderers, views]);
85
- const hasMultipleUITimeView = React.useMemo(() => {
86
- const numberUITimeViews = views.reduce((acc, viewForReduce) => {
87
- if (viewRenderers[viewForReduce] != null && isTimeView(viewForReduce)) {
88
- return acc + 1;
89
- }
90
- return acc;
91
- }, 0);
92
- return numberUITimeViews > 1;
93
- }, [viewRenderers, views]);
85
+ const timeViewsCount = React.useMemo(() => views.reduce((acc, viewForReduce) => {
86
+ if (viewRenderers[viewForReduce] != null && isTimeView(viewForReduce)) {
87
+ return acc + 1;
88
+ }
89
+ return acc;
90
+ }, 0), [viewRenderers, views]);
94
91
  const currentViewMode = viewModeLookup[view];
95
92
  const shouldRestoreFocus = useEventCallback(() => currentViewMode === 'UI');
96
93
  const [popperView, setPopperView] = React.useState(currentViewMode === 'UI' ? view : null);
@@ -152,7 +149,8 @@ export const usePickerViews = ({
152
149
  onViewChange: setView,
153
150
  focusedView,
154
151
  onFocusedViewChange: setFocusedView,
155
- showViewSwitcher: hasMultipleUITimeView
152
+ showViewSwitcher: timeViewsCount > 1,
153
+ timeViewsCount
156
154
  }));
157
155
  }
158
156
  };
@@ -44,20 +44,13 @@ export function useViews({
44
44
  // Update the current view when `openTo` or `views` props change
45
45
  if (previousOpenTo.current && previousOpenTo.current !== openTo || previousViews.current && previousViews.current.some(previousView => !views.includes(previousView))) {
46
46
  setView(views.includes(openTo) ? openTo : views[0]);
47
+ previousViews.current = views;
48
+ previousOpenTo.current = openTo;
47
49
  }
48
50
  }, [openTo, setView, view, views]);
49
51
  const viewIndex = views.indexOf(view);
50
52
  const previousView = views[viewIndex - 1] ?? null;
51
53
  const nextView = views[viewIndex + 1] ?? null;
52
- const handleChangeView = useEventCallback(newView => {
53
- if (newView === view) {
54
- return;
55
- }
56
- setView(newView);
57
- if (onViewChange) {
58
- onViewChange(newView);
59
- }
60
- });
61
54
  const handleFocusedViewChange = useEventCallback((viewToFocus, hasFocus) => {
62
55
  if (hasFocus) {
63
56
  // Focus event
@@ -70,6 +63,16 @@ export function useViews({
70
63
 
71
64
  onFocusedViewChange?.(viewToFocus, hasFocus);
72
65
  });
66
+ const handleChangeView = useEventCallback(newView => {
67
+ if (newView === view) {
68
+ return;
69
+ }
70
+ setView(newView);
71
+ handleFocusedViewChange(newView, true);
72
+ if (onViewChange) {
73
+ onViewChange(newView);
74
+ }
75
+ });
73
76
  const goToNextView = useEventCallback(() => {
74
77
  if (nextView) {
75
78
  handleChangeView(nextView);
@@ -15,14 +15,16 @@ export { useStaticPicker } from './hooks/useStaticPicker';
15
15
  export { useLocalizationContext, useDefaultDates, useUtils, useLocaleText, useNow } from './hooks/useUtils';
16
16
  export { useValidation } from './hooks/useValidation';
17
17
  export { usePreviousMonthDisabled, useNextMonthDisabled } from './hooks/date-helpers-hooks';
18
- export { applyDefaultDate, replaceInvalidDateByNull, areDatesEqual } from './utils/date-utils';
18
+ export { applyDefaultDate, replaceInvalidDateByNull, areDatesEqual, getTodayDate } from './utils/date-utils';
19
+ export { splitFieldInternalAndForwardedProps } from './utils/fields';
20
+ export { getDefaultReferenceDate } from './utils/getDefaultReferenceDate';
19
21
  export { executeInTheNextEventLoopTick, getActiveElement, onSpaceOrEnter, DEFAULT_DESKTOP_MODE_MEDIA_QUERY } from './utils/utils';
20
22
  export { defaultReduceAnimations } from './utils/defaultReduceAnimations';
21
23
  export { extractValidationProps } from './utils/validation/extractValidationProps';
22
24
  export { validateDate } from './utils/validation/validateDate';
23
25
  export { validateDateTime } from './utils/validation/validateDateTime';
24
26
  export { validateTime } from './utils/validation/validateTime';
25
- export { buildDeprecatedPropsWarning } from './utils/warning';
27
+ export { buildDeprecatedPropsWarning, buildWarning } from './utils/warning';
26
28
  export { uncapitalizeObjectKeys } from './utils/slots-migration';
27
29
  export { PickersCalendarHeader } from '../DateCalendar/PickersCalendarHeader';
28
30
  export { DayCalendar } from '../DateCalendar/DayCalendar';
@@ -85,4 +85,7 @@ export const mergeDateAndTime = (utils, dateParam, timeParam) => {
85
85
  mergedDate = utils.setMinutes(mergedDate, utils.getMinutes(timeParam));
86
86
  mergedDate = utils.setSeconds(mergedDate, utils.getSeconds(timeParam));
87
87
  return mergedDate;
88
- };
88
+ };
89
+ export const getTodayDate = (utils, valueType) => valueType === 'date' ? utils.startOfDay(utils.date()) : utils.date();
90
+ const dateViews = ['year', 'month', 'day'];
91
+ export const isDatePickerView = view => dateViews.includes(view);
@@ -0,0 +1,28 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import { DATE_TIME_VALIDATION_PROP_NAMES, DATE_VALIDATION_PROP_NAMES, TIME_VALIDATION_PROP_NAMES } from './validation/extractValidationProps';
3
+ const SHARED_FIELD_INTERNAL_PROP_NAMES = ['value', 'defaultValue', 'referenceDate', 'format', 'formatDensity', 'onChange', 'readOnly', 'onError', 'shouldRespectLeadingZeros', 'selectedSections', 'onSelectedSectionsChange', 'unstableFieldRef'];
4
+ export const splitFieldInternalAndForwardedProps = (props, valueType) => {
5
+ const forwardedProps = _extends({}, props);
6
+ const internalProps = {};
7
+ const extractProp = propName => {
8
+ if (forwardedProps.hasOwnProperty(propName)) {
9
+ // @ts-ignore
10
+ internalProps[propName] = forwardedProps[propName];
11
+ delete forwardedProps[propName];
12
+ }
13
+ };
14
+ SHARED_FIELD_INTERNAL_PROP_NAMES.forEach(extractProp);
15
+ if (valueType === 'date') {
16
+ DATE_VALIDATION_PROP_NAMES.forEach(extractProp);
17
+ } else if (valueType === 'time') {
18
+ TIME_VALIDATION_PROP_NAMES.forEach(extractProp);
19
+ } else if (valueType === 'date-time') {
20
+ DATE_VALIDATION_PROP_NAMES.forEach(extractProp);
21
+ TIME_VALIDATION_PROP_NAMES.forEach(extractProp);
22
+ DATE_TIME_VALIDATION_PROP_NAMES.forEach(extractProp);
23
+ }
24
+ return {
25
+ forwardedProps,
26
+ internalProps
27
+ };
28
+ };
@@ -0,0 +1,58 @@
1
+ import { createIsAfterIgnoreDatePart } from './time-utils';
2
+ import { mergeDateAndTime, getTodayDate } from './date-utils';
3
+ const SECTION_TYPE_GRANULARITY = {
4
+ year: 1,
5
+ month: 2,
6
+ day: 3,
7
+ hours: 4,
8
+ minutes: 5,
9
+ seconds: 6,
10
+ milliseconds: 7
11
+ };
12
+ export const getSectionTypeGranularity = sections => Math.max(...sections.map(section => SECTION_TYPE_GRANULARITY[section.type] ?? 1));
13
+ const roundDate = (utils, granularity, date) => {
14
+ if (granularity === SECTION_TYPE_GRANULARITY.year) {
15
+ return utils.startOfYear(date);
16
+ }
17
+ if (granularity === SECTION_TYPE_GRANULARITY.month) {
18
+ return utils.startOfMonth(date);
19
+ }
20
+ if (granularity === SECTION_TYPE_GRANULARITY.day) {
21
+ return utils.startOfDay(date);
22
+ }
23
+
24
+ // We don't have startOfHour / startOfMinute / startOfSecond
25
+ let roundedDate = date;
26
+ if (granularity < SECTION_TYPE_GRANULARITY.minutes) {
27
+ roundedDate = utils.setMinutes(roundedDate, 0);
28
+ }
29
+ if (granularity < SECTION_TYPE_GRANULARITY.seconds) {
30
+ roundedDate = utils.setSeconds(roundedDate, 0);
31
+ }
32
+ if (granularity < SECTION_TYPE_GRANULARITY.milliseconds) {
33
+ roundedDate = utils.setMilliseconds(roundedDate, 0);
34
+ }
35
+ return roundedDate;
36
+ };
37
+ export const getDefaultReferenceDate = ({
38
+ props,
39
+ utils,
40
+ valueType,
41
+ granularity
42
+ }) => {
43
+ let referenceDate = roundDate(utils, granularity, getTodayDate(utils, valueType));
44
+ if (props.minDate != null && utils.isAfterDay(props.minDate, referenceDate)) {
45
+ referenceDate = roundDate(utils, granularity, props.minDate);
46
+ }
47
+ if (props.maxDate != null && utils.isBeforeDay(props.maxDate, referenceDate)) {
48
+ referenceDate = roundDate(utils, granularity, props.maxDate);
49
+ }
50
+ const isAfter = createIsAfterIgnoreDatePart(props.disableIgnoringDatePartForTimeValidation ?? false, utils);
51
+ if (props.minTime != null && isAfter(props.minTime, referenceDate)) {
52
+ referenceDate = roundDate(utils, granularity, props.disableIgnoringDatePartForTimeValidation ? props.minTime : mergeDateAndTime(utils, referenceDate, props.minTime));
53
+ }
54
+ if (props.maxTime != null && isAfter(referenceDate, props.maxTime)) {
55
+ referenceDate = roundDate(utils, granularity, props.disableIgnoringDatePartForTimeValidation ? props.maxTime : mergeDateAndTime(utils, referenceDate, props.maxTime));
56
+ }
57
+ return referenceDate;
58
+ };
@@ -1,5 +1,6 @@
1
1
  const timeViews = ['hours', 'minutes', 'seconds'];
2
2
  export const isTimeView = view => timeViews.includes(view);
3
+ export const isInternalTimeView = view => timeViews.includes(view) || view === 'meridiem';
3
4
  export const getMeridiem = (date, utils) => {
4
5
  if (!date) {
5
6
  return null;
@@ -1,4 +1,7 @@
1
- const VALIDATION_PROP_NAMES = ['disablePast', 'disableFuture', 'minDate', 'maxDate', 'minTime', 'maxTime', 'minDateTime', 'maxDateTime', 'shouldDisableDate', 'shouldDisableMonth', 'shouldDisableYear', 'shouldDisableClock', 'shouldDisableTime', 'minutesStep'];
1
+ export const DATE_VALIDATION_PROP_NAMES = ['disablePast', 'disableFuture', 'minDate', 'maxDate', 'shouldDisableDate', 'shouldDisableMonth', 'shouldDisableYear'];
2
+ export const TIME_VALIDATION_PROP_NAMES = ['disablePast', 'disableFuture', 'minTime', 'maxTime', 'shouldDisableClock', 'shouldDisableTime', 'minutesStep', 'ampm', 'disableIgnoringDatePartForTimeValidation'];
3
+ export const DATE_TIME_VALIDATION_PROP_NAMES = ['minDateTime', 'maxDateTime'];
4
+ const VALIDATION_PROP_NAMES = [...DATE_VALIDATION_PROP_NAMES, ...TIME_VALIDATION_PROP_NAMES, ...DATE_TIME_VALIDATION_PROP_NAMES];
2
5
  /**
3
6
  * Extract the validation props for the props received by a component.
4
7
  * Limit the risk of forgetting some of them and reduce the bundle size.