@mui/x-date-pickers 8.0.0-alpha.5 → 8.0.0-alpha.7

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 (305) hide show
  1. package/AdapterDateFns/AdapterDateFns.d.ts +2 -4
  2. package/AdapterDateFns/AdapterDateFns.js +49 -47
  3. package/AdapterDateFnsBase/AdapterDateFnsBase.d.ts +1 -1
  4. package/AdapterDateFnsJalali/AdapterDateFnsJalali.d.ts +2 -4
  5. package/AdapterDateFnsJalali/AdapterDateFnsJalali.js +48 -46
  6. package/{AdapterDateFnsJalaliV3/AdapterDateFnsJalaliV3.d.ts → AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.d.ts} +2 -2
  7. package/{AdapterDateFnsJalaliV3/AdapterDateFnsJalaliV3.js → AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.js} +45 -52
  8. package/AdapterDateFnsJalaliV2/index.d.ts +1 -0
  9. package/AdapterDateFnsJalaliV2/index.js +1 -0
  10. package/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/package.json +1 -1
  11. package/{AdapterDateFnsV3/AdapterDateFnsV3.d.ts → AdapterDateFnsV2/AdapterDateFnsV2.d.ts} +2 -2
  12. package/{AdapterDateFnsV3/AdapterDateFnsV3.js → AdapterDateFnsV2/AdapterDateFnsV2.js} +46 -54
  13. package/AdapterDateFnsV2/index.d.ts +1 -0
  14. package/AdapterDateFnsV2/index.js +1 -0
  15. package/{AdapterDateFnsV3 → AdapterDateFnsV2}/package.json +1 -1
  16. package/AdapterDayjs/AdapterDayjs.d.ts +1 -1
  17. package/AdapterLuxon/AdapterLuxon.d.ts +1 -1
  18. package/AdapterMoment/AdapterMoment.d.ts +1 -1
  19. package/CHANGELOG.md +206 -1
  20. package/DateCalendar/DateCalendar.js +1 -1
  21. package/DateCalendar/PickersFadeTransitionGroup.d.ts +1 -1
  22. package/DateCalendar/PickersSlideTransition.d.ts +1 -1
  23. package/DateField/useDateField.d.ts +1 -1
  24. package/DateField/useDateField.js +13 -11
  25. package/DatePicker/DatePicker.js +1 -1
  26. package/DatePicker/DatePicker.types.d.ts +5 -0
  27. package/DatePicker/DatePickerToolbar.d.ts +1 -3
  28. package/DatePicker/DatePickerToolbar.js +10 -25
  29. package/DatePicker/shared.d.ts +1 -1
  30. package/DateTimeField/useDateTimeField.d.ts +1 -1
  31. package/DateTimeField/useDateTimeField.js +13 -11
  32. package/DateTimePicker/DateTimePicker.js +2 -2
  33. package/DateTimePicker/DateTimePicker.types.d.ts +2 -2
  34. package/DateTimePicker/DateTimePickerTabs.d.ts +2 -5
  35. package/DateTimePicker/DateTimePickerTabs.js +7 -14
  36. package/DateTimePicker/DateTimePickerToolbar.d.ts +12 -4
  37. package/DateTimePicker/DateTimePickerToolbar.js +42 -48
  38. package/DateTimePicker/shared.d.ts +3 -3
  39. package/DesktopDatePicker/DesktopDatePicker.js +9 -3
  40. package/DesktopDatePicker/DesktopDatePicker.types.d.ts +7 -3
  41. package/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -10
  42. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +2 -2
  43. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +1 -2
  44. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -15
  45. package/DesktopTimePicker/DesktopTimePicker.js +3 -7
  46. package/DesktopTimePicker/DesktopTimePicker.types.d.ts +2 -2
  47. package/MobileDatePicker/MobileDatePicker.js +2 -2
  48. package/MobileDatePicker/MobileDatePicker.types.d.ts +2 -3
  49. package/MobileDateTimePicker/MobileDateTimePicker.js +2 -2
  50. package/MobileDateTimePicker/MobileDateTimePicker.types.d.ts +4 -4
  51. package/MobileTimePicker/MobileTimePicker.js +2 -2
  52. package/MobileTimePicker/MobileTimePicker.types.d.ts +4 -4
  53. package/PickersActionBar/PickersActionBar.d.ts +6 -7
  54. package/PickersActionBar/PickersActionBar.js +18 -16
  55. package/PickersLayout/PickersLayout.d.ts +2 -2
  56. package/PickersLayout/PickersLayout.js +1 -15
  57. package/PickersLayout/PickersLayout.types.d.ts +12 -15
  58. package/PickersLayout/usePickerLayout.d.ts +2 -2
  59. package/PickersLayout/usePickerLayout.js +13 -47
  60. package/PickersShortcuts/PickersShortcuts.d.ts +2 -5
  61. package/PickersShortcuts/PickersShortcuts.js +13 -10
  62. package/PickersShortcuts/index.d.ts +1 -1
  63. package/PickersTextField/PickersInputBase/PickersInputBase.js +7 -0
  64. package/PickersTextField/PickersTextField.js +1 -1
  65. package/StaticDatePicker/StaticDatePicker.types.d.ts +2 -3
  66. package/StaticDateTimePicker/StaticDateTimePicker.types.d.ts +2 -2
  67. package/StaticTimePicker/StaticTimePicker.types.d.ts +2 -2
  68. package/TimeField/useTimeField.d.ts +1 -1
  69. package/TimeField/useTimeField.js +13 -11
  70. package/TimePicker/TimePicker.js +2 -2
  71. package/TimePicker/TimePicker.types.d.ts +2 -2
  72. package/TimePicker/TimePickerToolbar.d.ts +1 -2
  73. package/TimePicker/TimePickerToolbar.js +23 -35
  74. package/TimePicker/shared.d.ts +1 -1
  75. package/hooks/index.d.ts +2 -0
  76. package/hooks/index.js +3 -1
  77. package/hooks/useIsValidValue.d.ts +7 -0
  78. package/hooks/useIsValidValue.js +11 -0
  79. package/hooks/usePickerActionsContext.d.ts +7 -0
  80. package/hooks/usePickerActionsContext.js +15 -0
  81. package/hooks/usePickerContext.d.ts +3 -1
  82. package/hooks/usePickerContext.js +1 -2
  83. package/index.d.ts +1 -0
  84. package/index.js +3 -2
  85. package/internals/components/PickerProvider.d.ts +14 -8
  86. package/internals/components/PickerProvider.js +17 -6
  87. package/internals/components/PickersModalDialog.d.ts +1 -3
  88. package/internals/components/PickersModalDialog.js +9 -3
  89. package/internals/components/PickersPopper.d.ts +1 -3
  90. package/internals/components/PickersPopper.js +11 -6
  91. package/internals/components/PickersToolbar.d.ts +2 -3
  92. package/internals/components/PickersToolbar.js +1 -1
  93. package/internals/hooks/date-helpers-hooks.js +4 -3
  94. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +10 -12
  95. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +7 -7
  96. package/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
  97. package/internals/hooks/useField/index.d.ts +1 -1
  98. package/internals/hooks/useField/index.js +1 -1
  99. package/internals/hooks/useField/useField.d.ts +10 -1
  100. package/internals/hooks/useField/useField.js +17 -1
  101. package/internals/hooks/useField/useField.utils.js +2 -2
  102. package/internals/hooks/useField/useFieldState.js +2 -2
  103. package/internals/hooks/useField/useFieldV6TextField.js +2 -2
  104. package/internals/hooks/useMobilePicker/useMobilePicker.js +9 -10
  105. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +7 -7
  106. package/internals/hooks/useOpenState.js +3 -2
  107. package/internals/hooks/usePicker/usePicker.d.ts +1 -1
  108. package/internals/hooks/usePicker/usePicker.js +0 -8
  109. package/internals/hooks/usePicker/usePicker.types.d.ts +6 -7
  110. package/internals/hooks/usePicker/usePickerProvider.d.ts +5 -5
  111. package/internals/hooks/usePicker/usePickerProvider.js +8 -5
  112. package/internals/hooks/usePicker/usePickerValue.d.ts +1 -1
  113. package/internals/hooks/usePicker/usePickerValue.js +82 -217
  114. package/internals/hooks/usePicker/usePickerValue.types.d.ts +82 -67
  115. package/internals/hooks/usePicker/usePickerViews.d.ts +35 -20
  116. package/internals/hooks/usePicker/usePickerViews.js +22 -14
  117. package/internals/hooks/useStaticPicker/useStaticPicker.js +1 -4
  118. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +6 -6
  119. package/internals/hooks/useUtils.js +1 -1
  120. package/internals/index.d.ts +9 -7
  121. package/internals/index.js +5 -3
  122. package/internals/models/index.d.ts +1 -0
  123. package/internals/models/index.js +2 -1
  124. package/internals/models/manager.d.ts +12 -0
  125. package/internals/models/manager.js +1 -0
  126. package/internals/models/props/basePickerProps.d.ts +2 -2
  127. package/internals/models/props/tabs.d.ts +0 -13
  128. package/internals/models/props/toolbar.d.ts +1 -20
  129. package/internals/utils/date-utils.js +1 -1
  130. package/internals/utils/valueManagers.js +4 -4
  131. package/locales/index.d.ts +1 -0
  132. package/locales/index.js +1 -0
  133. package/locales/nbNO.js +15 -19
  134. package/locales/utils/getPickersLocalization.js +1 -1
  135. package/locales/zhTW.d.ts +80 -0
  136. package/locales/zhTW.js +73 -0
  137. package/managers/index.d.ts +6 -0
  138. package/managers/index.js +3 -0
  139. package/managers/package.json +6 -0
  140. package/managers/useDateManager.d.ts +27 -0
  141. package/managers/useDateManager.js +47 -0
  142. package/managers/useDateTimeManager.d.ts +28 -0
  143. package/managers/useDateTimeManager.js +52 -0
  144. package/managers/useTimeManager.d.ts +28 -0
  145. package/managers/useTimeManager.js +43 -0
  146. package/models/adapters.d.ts +1 -1
  147. package/models/index.d.ts +1 -0
  148. package/models/index.js +1 -0
  149. package/models/manager.d.ts +78 -0
  150. package/models/manager.js +1 -0
  151. package/models/pickers.d.ts +7 -0
  152. package/modern/AdapterDateFns/AdapterDateFns.js +49 -47
  153. package/modern/AdapterDateFnsJalali/AdapterDateFnsJalali.js +48 -46
  154. package/modern/{AdapterDateFnsJalaliV3/AdapterDateFnsJalaliV3.js → AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.js} +45 -52
  155. package/modern/AdapterDateFnsJalaliV2/index.js +1 -0
  156. package/modern/{AdapterDateFnsV3/AdapterDateFnsV3.js → AdapterDateFnsV2/AdapterDateFnsV2.js} +46 -54
  157. package/modern/AdapterDateFnsV2/index.js +1 -0
  158. package/modern/DateCalendar/DateCalendar.js +1 -1
  159. package/modern/DateField/useDateField.js +13 -11
  160. package/modern/DatePicker/DatePicker.js +1 -1
  161. package/modern/DatePicker/DatePickerToolbar.js +10 -25
  162. package/modern/DateTimeField/useDateTimeField.js +13 -11
  163. package/modern/DateTimePicker/DateTimePicker.js +2 -2
  164. package/modern/DateTimePicker/DateTimePickerTabs.js +7 -14
  165. package/modern/DateTimePicker/DateTimePickerToolbar.js +42 -48
  166. package/modern/DesktopDatePicker/DesktopDatePicker.js +9 -3
  167. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -10
  168. package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -15
  169. package/modern/DesktopTimePicker/DesktopTimePicker.js +3 -7
  170. package/modern/MobileDatePicker/MobileDatePicker.js +2 -2
  171. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +2 -2
  172. package/modern/MobileTimePicker/MobileTimePicker.js +2 -2
  173. package/modern/PickersActionBar/PickersActionBar.js +18 -16
  174. package/modern/PickersLayout/PickersLayout.js +1 -15
  175. package/modern/PickersLayout/usePickerLayout.js +13 -47
  176. package/modern/PickersShortcuts/PickersShortcuts.js +13 -10
  177. package/modern/PickersTextField/PickersInputBase/PickersInputBase.js +7 -0
  178. package/modern/PickersTextField/PickersTextField.js +1 -1
  179. package/modern/TimeField/useTimeField.js +13 -11
  180. package/modern/TimePicker/TimePicker.js +2 -2
  181. package/modern/TimePicker/TimePickerToolbar.js +23 -35
  182. package/modern/hooks/index.js +3 -1
  183. package/modern/hooks/useIsValidValue.js +11 -0
  184. package/modern/hooks/usePickerActionsContext.js +15 -0
  185. package/modern/hooks/usePickerContext.js +1 -2
  186. package/modern/index.js +3 -2
  187. package/modern/internals/components/PickerProvider.js +17 -6
  188. package/modern/internals/components/PickersModalDialog.js +9 -3
  189. package/modern/internals/components/PickersPopper.js +11 -6
  190. package/modern/internals/components/PickersToolbar.js +1 -1
  191. package/modern/internals/hooks/date-helpers-hooks.js +4 -3
  192. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +10 -12
  193. package/modern/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
  194. package/modern/internals/hooks/useField/index.js +1 -1
  195. package/modern/internals/hooks/useField/useField.js +17 -1
  196. package/modern/internals/hooks/useField/useField.utils.js +2 -2
  197. package/modern/internals/hooks/useField/useFieldState.js +2 -2
  198. package/modern/internals/hooks/useField/useFieldV6TextField.js +2 -2
  199. package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +9 -10
  200. package/modern/internals/hooks/useOpenState.js +3 -2
  201. package/modern/internals/hooks/usePicker/usePicker.js +0 -8
  202. package/modern/internals/hooks/usePicker/usePickerProvider.js +8 -5
  203. package/modern/internals/hooks/usePicker/usePickerValue.js +82 -217
  204. package/modern/internals/hooks/usePicker/usePickerViews.js +22 -14
  205. package/modern/internals/hooks/useStaticPicker/useStaticPicker.js +1 -4
  206. package/modern/internals/hooks/useUtils.js +1 -1
  207. package/modern/internals/index.js +5 -3
  208. package/modern/internals/models/index.js +2 -1
  209. package/modern/internals/models/manager.js +1 -0
  210. package/modern/internals/utils/date-utils.js +1 -1
  211. package/modern/internals/utils/valueManagers.js +4 -4
  212. package/modern/locales/index.js +1 -0
  213. package/modern/locales/nbNO.js +15 -19
  214. package/modern/locales/utils/getPickersLocalization.js +1 -1
  215. package/modern/locales/zhTW.js +73 -0
  216. package/modern/managers/index.js +3 -0
  217. package/modern/managers/useDateManager.js +47 -0
  218. package/modern/managers/useDateTimeManager.js +52 -0
  219. package/modern/managers/useTimeManager.js +43 -0
  220. package/modern/models/index.js +1 -0
  221. package/modern/models/manager.js +1 -0
  222. package/node/AdapterDateFns/AdapterDateFns.js +97 -97
  223. package/node/AdapterDateFnsJalali/AdapterDateFnsJalali.js +97 -96
  224. package/node/{AdapterDateFnsJalaliV3/AdapterDateFnsJalaliV3.js → AdapterDateFnsJalaliV2/AdapterDateFnsJalaliV2.js} +94 -101
  225. package/node/{AdapterDateFnsJalaliV3 → AdapterDateFnsJalaliV2}/index.js +1 -1
  226. package/node/AdapterDateFnsV2/AdapterDateFnsV2.js +291 -0
  227. package/node/{AdapterDateFnsV3 → AdapterDateFnsV2}/index.js +1 -1
  228. package/node/DateCalendar/DateCalendar.js +1 -1
  229. package/node/DateField/useDateField.js +12 -10
  230. package/node/DatePicker/DatePicker.js +1 -1
  231. package/node/DatePicker/DatePickerToolbar.js +10 -25
  232. package/node/DateTimeField/useDateTimeField.js +12 -10
  233. package/node/DateTimePicker/DateTimePicker.js +2 -2
  234. package/node/DateTimePicker/DateTimePickerTabs.js +7 -14
  235. package/node/DateTimePicker/DateTimePickerToolbar.js +43 -49
  236. package/node/DesktopDatePicker/DesktopDatePicker.js +9 -3
  237. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -10
  238. package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -15
  239. package/node/DesktopTimePicker/DesktopTimePicker.js +3 -7
  240. package/node/MobileDatePicker/MobileDatePicker.js +2 -2
  241. package/node/MobileDateTimePicker/MobileDateTimePicker.js +2 -2
  242. package/node/MobileTimePicker/MobileTimePicker.js +2 -2
  243. package/node/PickersActionBar/PickersActionBar.js +20 -18
  244. package/node/PickersLayout/PickersLayout.js +1 -15
  245. package/node/PickersLayout/usePickerLayout.js +17 -51
  246. package/node/PickersShortcuts/PickersShortcuts.js +13 -10
  247. package/node/PickersTextField/PickersInputBase/PickersInputBase.js +7 -0
  248. package/node/PickersTextField/PickersTextField.js +1 -1
  249. package/node/TimeField/useTimeField.js +12 -10
  250. package/node/TimePicker/TimePicker.js +2 -2
  251. package/node/TimePicker/TimePickerToolbar.js +23 -35
  252. package/node/hooks/index.js +15 -1
  253. package/node/hooks/useIsValidValue.js +18 -0
  254. package/node/hooks/usePickerActionsContext.js +22 -0
  255. package/node/hooks/usePickerContext.js +1 -1
  256. package/node/index.js +13 -1
  257. package/node/internals/components/PickerProvider.js +18 -7
  258. package/node/internals/components/PickersModalDialog.js +9 -3
  259. package/node/internals/components/PickersPopper.js +11 -6
  260. package/node/internals/components/PickersToolbar.js +1 -1
  261. package/node/internals/hooks/date-helpers-hooks.js +4 -3
  262. package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +10 -12
  263. package/node/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
  264. package/node/internals/hooks/useField/index.js +6 -0
  265. package/node/internals/hooks/useField/useField.js +18 -1
  266. package/node/internals/hooks/useField/useField.utils.js +2 -2
  267. package/node/internals/hooks/useField/useFieldState.js +2 -2
  268. package/node/internals/hooks/useField/useFieldV6TextField.js +2 -2
  269. package/node/internals/hooks/useMobilePicker/useMobilePicker.js +9 -10
  270. package/node/internals/hooks/useOpenState.js +4 -2
  271. package/node/internals/hooks/usePicker/usePicker.js +0 -9
  272. package/node/internals/hooks/usePicker/usePickerProvider.js +8 -5
  273. package/node/internals/hooks/usePicker/usePickerValue.js +82 -217
  274. package/node/internals/hooks/usePicker/usePickerViews.js +22 -15
  275. package/node/internals/hooks/useStaticPicker/useStaticPicker.js +1 -4
  276. package/node/internals/hooks/useUtils.js +1 -1
  277. package/node/internals/index.js +28 -20
  278. package/node/internals/models/index.js +11 -0
  279. package/node/internals/models/manager.js +5 -0
  280. package/node/internals/utils/date-utils.js +1 -1
  281. package/node/internals/utils/valueManagers.js +4 -4
  282. package/node/locales/index.js +11 -0
  283. package/node/locales/nbNO.js +15 -19
  284. package/node/locales/utils/getPickersLocalization.js +1 -1
  285. package/node/locales/zhTW.js +79 -0
  286. package/node/managers/index.js +26 -0
  287. package/node/managers/useDateManager.js +55 -0
  288. package/node/managers/useDateTimeManager.js +60 -0
  289. package/node/managers/useTimeManager.js +51 -0
  290. package/node/models/index.js +11 -0
  291. package/node/models/manager.js +5 -0
  292. package/package.json +3 -3
  293. package/themeAugmentation/props.d.ts +2 -3
  294. package/validation/extractValidationProps.d.ts +1 -1
  295. package/AdapterDateFnsJalaliV3/index.d.ts +0 -1
  296. package/AdapterDateFnsJalaliV3/index.js +0 -1
  297. package/AdapterDateFnsV3/index.d.ts +0 -1
  298. package/AdapterDateFnsV3/index.js +0 -1
  299. package/internals/hooks/defaultizedFieldProps.d.ts +0 -18
  300. package/internals/hooks/defaultizedFieldProps.js +0 -40
  301. package/modern/AdapterDateFnsJalaliV3/index.js +0 -1
  302. package/modern/AdapterDateFnsV3/index.js +0 -1
  303. package/modern/internals/hooks/defaultizedFieldProps.js +0 -40
  304. package/node/AdapterDateFnsV3/AdapterDateFnsV3.js +0 -299
  305. package/node/internals/hooks/defaultizedFieldProps.js +0 -50
@@ -148,7 +148,7 @@ export const useFieldState = params => {
148
148
  const updateValueFromValueStr = valueStr => {
149
149
  const parseDateStr = (dateStr, referenceDate) => {
150
150
  const date = utils.parse(dateStr, format);
151
- if (date == null || !utils.isValid(date)) {
151
+ if (!utils.isValid(date)) {
152
152
  return null;
153
153
  }
154
154
  const sections = buildSectionsFromFormat({
@@ -199,7 +199,7 @@ export const useFieldState = params => {
199
199
  * Then we merge the value of the modified sections into the reference date.
200
200
  * This makes sure that we don't lose some information of the initial date (like the time on a date field).
201
201
  */
202
- if (newActiveDate != null && utils.isValid(newActiveDate)) {
202
+ if (utils.isValid(newActiveDate)) {
203
203
  const mergedDate = mergeDateIntoReferenceDate(utils, newActiveDate, newActiveDateSections, activeDateManager.referenceDate, true);
204
204
  values = activeDateManager.getNewValuesFromNewActiveDate(mergedDate);
205
205
  shouldPublish = true;
@@ -35,8 +35,8 @@ export const addPositionPropertiesToSections = (sections, localizedDigits, isRtl
35
35
  };
36
36
  export const useFieldV6TextField = params => {
37
37
  const isRtl = useRtl();
38
- const focusTimeoutRef = React.useRef();
39
- const selectionSyncTimeoutRef = React.useRef();
38
+ const focusTimeoutRef = React.useRef(undefined);
39
+ const selectionSyncTimeoutRef = React.useRef(undefined);
40
40
  const {
41
41
  forwardedProps: {
42
42
  onFocus,
@@ -46,9 +46,6 @@ export const useMobilePicker = _ref => {
46
46
  const labelId = useId();
47
47
  const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
48
48
  const {
49
- open,
50
- actions,
51
- layoutProps,
52
49
  providerProps,
53
50
  renderCurrentView,
54
51
  fieldProps: pickerFieldProps,
@@ -58,7 +55,6 @@ export const useMobilePicker = _ref => {
58
55
  fieldRef,
59
56
  localeText,
60
57
  autoFocusView: true,
61
- additionalViewProps: {},
62
58
  variant: 'mobile'
63
59
  }));
64
60
  const Field = slots.field;
@@ -86,8 +82,12 @@ export const useMobilePicker = _ref => {
86
82
  }, isToolbarHidden && {
87
83
  id: labelId
88
84
  }, !(disabled || readOnly) && {
89
- onClick: actions.onOpen,
90
- onKeyDown: onSpaceOrEnter(actions.onOpen)
85
+ // These direct access to `providerProps` will go away in https://github.com/mui/mui-x/pull/15671
86
+ onClick: event => {
87
+ event.preventDefault();
88
+ providerProps.contextValue.setOpen(true);
89
+ },
90
+ onKeyDown: onSpaceOrEnter(() => providerProps.contextValue.setOpen(true))
91
91
  }, !!inputRef && {
92
92
  inputRef
93
93
  }),
@@ -124,16 +124,15 @@ export const useMobilePicker = _ref => {
124
124
  slots: slotsForField,
125
125
  slotProps: slotProps,
126
126
  unstableFieldRef: handleFieldRef
127
- })), /*#__PURE__*/_jsx(PickersModalDialog, _extends({}, actions, {
128
- open: open,
127
+ })), /*#__PURE__*/_jsx(PickersModalDialog, {
129
128
  slots: slots,
130
129
  slotProps: slotProps,
131
- children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps?.layout, {
130
+ children: /*#__PURE__*/_jsx(Layout, _extends({}, slotProps?.layout, {
132
131
  slots: slots,
133
132
  slotProps: slotProps,
134
133
  children: renderCurrentView()
135
134
  }))
136
- }))]
135
+ })]
137
136
  }));
138
137
  return {
139
138
  renderPicker
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import useEventCallback from '@mui/utils/useEventCallback';
2
3
  export const useOpenState = ({
3
4
  open,
4
5
  onOpen,
@@ -17,7 +18,7 @@ export const useOpenState = ({
17
18
  setOpenState(open);
18
19
  }
19
20
  }, [isControllingOpenProp, open]);
20
- const setOpen = React.useCallback(action => {
21
+ const setOpen = useEventCallback(action => {
21
22
  const newOpen = typeof action === 'function' ? action(openState) : action;
22
23
  if (!isControllingOpenProp) {
23
24
  setOpenState(newOpen);
@@ -28,7 +29,7 @@ export const useOpenState = ({
28
29
  if (!newOpen && onClose) {
29
30
  onClose();
30
31
  }
31
- }, [isControllingOpenProp, onOpen, onClose, openState]);
32
+ });
32
33
  return {
33
34
  open: openState,
34
35
  setOpen
@@ -1,4 +1,3 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
1
  import { warnOnce } from '@mui/x-internals/warning';
3
2
  import { usePickerValue } from "./usePickerValue.js";
4
3
  import { usePickerViews } from "./usePickerViews.js";
@@ -8,7 +7,6 @@ export const usePicker = ({
8
7
  valueManager,
9
8
  valueType,
10
9
  variant,
11
- additionalViewProps,
12
10
  validator,
13
11
  autoFocusView,
14
12
  rendererInterceptor,
@@ -24,12 +22,10 @@ export const usePicker = ({
24
22
  props,
25
23
  valueManager,
26
24
  valueType,
27
- variant,
28
25
  validator
29
26
  });
30
27
  const pickerViewsResponse = usePickerViews({
31
28
  props,
32
- additionalViewProps,
33
29
  autoFocusView,
34
30
  fieldRef,
35
31
  propsFromPickerValue: pickerValueResponse.viewProps,
@@ -45,15 +41,11 @@ export const usePicker = ({
45
41
  });
46
42
  return {
47
43
  // Picker value
48
- open: pickerValueResponse.open,
49
- actions: pickerValueResponse.actions,
50
44
  fieldProps: pickerValueResponse.fieldProps,
51
45
  // Picker views
52
46
  renderCurrentView: pickerViewsResponse.renderCurrentView,
53
47
  hasUIView: pickerViewsResponse.provider.hasUIView,
54
48
  shouldRestoreFocus: pickerViewsResponse.shouldRestoreFocus,
55
- // Picker layout
56
- layoutProps: _extends({}, pickerViewsResponse.layoutProps, pickerValueResponse.layoutProps),
57
49
  // Picker provider
58
50
  providerProps,
59
51
  // Picker owner state
@@ -53,19 +53,22 @@ export function usePickerProvider(parameters) {
53
53
  pickerOrientation: orientation,
54
54
  pickerVariant: variant
55
55
  }), [utils, valueManager, paramsFromUsePickerValue.value, paramsFromUsePickerValue.contextValue.open, orientation, variant, props.disabled, props.readOnly]);
56
- const contextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.contextValue, {
56
+ const contextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.contextValue, paramsFromUsePickerViews.contextValue, {
57
57
  disabled: props.disabled ?? false,
58
58
  readOnly: props.readOnly ?? false,
59
59
  variant,
60
60
  orientation
61
- }), [paramsFromUsePickerValue.contextValue, variant, orientation, props.disabled, props.readOnly]);
62
- const privateContextValue = React.useMemo(() => ({
61
+ }), [paramsFromUsePickerValue.contextValue, paramsFromUsePickerViews.contextValue, variant, orientation, props.disabled, props.readOnly]);
62
+ const privateContextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.privateContextValue, {
63
63
  ownerState
64
- }), [ownerState]);
64
+ }), [paramsFromUsePickerValue, ownerState]);
65
+ const actionsContextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.actionsContextValue, paramsFromUsePickerViews.actionsContextValue), [paramsFromUsePickerValue.actionsContextValue, paramsFromUsePickerViews.actionsContextValue]);
65
66
  return {
66
67
  localeText,
67
68
  contextValue,
68
- privateContextValue
69
+ privateContextValue,
70
+ actionsContextValue,
71
+ isValidContextValue: paramsFromUsePickerValue.isValidContextValue
69
72
  };
70
73
  }
71
74
 
@@ -5,106 +5,6 @@ import { useOpenState } from "../useOpenState.js";
5
5
  import { useLocalizationContext, useUtils } from "../useUtils.js";
6
6
  import { useValidation } from "../../../validation/index.js";
7
7
  import { useValueWithTimezone } from "../useValueWithTimezone.js";
8
- /**
9
- * Decide if the new value should be published
10
- * The published value will be passed to `onChange` if defined.
11
- */
12
- const shouldPublishValue = params => {
13
- const {
14
- action,
15
- hasChanged,
16
- dateState,
17
- isControlled
18
- } = params;
19
- const isCurrentValueTheDefaultValue = !isControlled && !dateState.hasBeenModifiedSinceMount;
20
-
21
- // The field is responsible for only calling `onChange` when needed.
22
- if (action.name === 'setValueFromField') {
23
- return true;
24
- }
25
- if (action.name === 'setValueFromAction') {
26
- // If the component is not controlled, and the value has not been modified since the mount,
27
- // Then we want to publish the default value whenever the user pressed the "Accept", "Today" or "Clear" button.
28
- if (isCurrentValueTheDefaultValue && ['accept', 'today', 'clear'].includes(action.pickerAction)) {
29
- return true;
30
- }
31
- return hasChanged(dateState.lastPublishedValue);
32
- }
33
- if (action.name === 'setValueFromView' && action.selectionState !== 'shallow') {
34
- // On the first view,
35
- // If the value is not controlled, then clicking on any value (including the one equal to `defaultValue`) should call `onChange`
36
- if (isCurrentValueTheDefaultValue) {
37
- return true;
38
- }
39
- return hasChanged(dateState.lastPublishedValue);
40
- }
41
- if (action.name === 'setValueFromShortcut') {
42
- // On the first view,
43
- // If the value is not controlled, then clicking on any value (including the one equal to `defaultValue`) should call `onChange`
44
- if (isCurrentValueTheDefaultValue) {
45
- return true;
46
- }
47
- return hasChanged(dateState.lastPublishedValue);
48
- }
49
- return false;
50
- };
51
-
52
- /**
53
- * Decide if the new value should be committed.
54
- * The committed value will be passed to `onAccept` if defined.
55
- * It will also be used as a reset target when calling the `cancel` picker action (when clicking on the "Cancel" button).
56
- */
57
- const shouldCommitValue = params => {
58
- const {
59
- action,
60
- hasChanged,
61
- dateState,
62
- isControlled,
63
- closeOnSelect
64
- } = params;
65
- const isCurrentValueTheDefaultValue = !isControlled && !dateState.hasBeenModifiedSinceMount;
66
- if (action.name === 'setValueFromAction') {
67
- // If the component is not controlled, and the value has not been modified since the mount,
68
- // Then we want to commit the default value whenever the user pressed the "Accept", "Today" or "Clear" button.
69
- if (isCurrentValueTheDefaultValue && ['accept', 'today', 'clear'].includes(action.pickerAction)) {
70
- return true;
71
- }
72
- return hasChanged(dateState.lastCommittedValue);
73
- }
74
- if (action.name === 'setValueFromView' && action.selectionState === 'finish' && closeOnSelect) {
75
- // On picker where the 1st view is also the last view,
76
- // If the value is not controlled, then clicking on any value (including the one equal to `defaultValue`) should call `onAccept`
77
- if (isCurrentValueTheDefaultValue) {
78
- return true;
79
- }
80
- return hasChanged(dateState.lastCommittedValue);
81
- }
82
- if (action.name === 'setValueFromShortcut') {
83
- return action.changeImportance === 'accept' && hasChanged(dateState.lastCommittedValue);
84
- }
85
- return false;
86
- };
87
-
88
- /**
89
- * Decide if the picker should be closed after the value is updated.
90
- */
91
- const shouldClosePicker = params => {
92
- const {
93
- action,
94
- closeOnSelect
95
- } = params;
96
- if (action.name === 'setValueFromAction') {
97
- return true;
98
- }
99
- if (action.name === 'setValueFromView') {
100
- return action.selectionState === 'finish' && closeOnSelect;
101
- }
102
- if (action.name === 'setValueFromShortcut') {
103
- return action.changeImportance === 'accept';
104
- }
105
- return false;
106
- };
107
-
108
8
  /**
109
9
  * Manage the value lifecycle of all the pickers.
110
10
  */
@@ -112,7 +12,6 @@ export const usePickerValue = ({
112
12
  props,
113
13
  valueManager,
114
14
  valueType,
115
- variant,
116
15
  validator
117
16
  }) => {
118
17
  const {
@@ -120,7 +19,7 @@ export const usePickerValue = ({
120
19
  onChange,
121
20
  value: inValueWithoutRenderTimezone,
122
21
  defaultValue: inDefaultValue,
123
- closeOnSelect = variant === 'desktop',
22
+ closeOnSelect = false,
124
23
  timezone: timezoneProp,
125
24
  referenceDate
126
25
  } = props;
@@ -200,43 +99,49 @@ export const usePickerValue = ({
200
99
  value: dateState.draft,
201
100
  onError: props.onError
202
101
  });
203
- const updateDate = useEventCallback(action => {
204
- const updaterParams = {
205
- action,
206
- dateState,
207
- hasChanged: comparison => !valueManager.areValuesEqual(utils, action.value, comparison),
208
- isControlled,
209
- closeOnSelect
210
- };
211
- const shouldPublish = shouldPublishValue(updaterParams);
212
- const shouldCommit = shouldCommitValue(updaterParams);
213
- const shouldClose = shouldClosePicker(updaterParams);
102
+ const setValue = useEventCallback((newValue, options) => {
103
+ const {
104
+ changeImportance = 'accept',
105
+ skipPublicationIfPristine = false,
106
+ validationError,
107
+ shortcut
108
+ } = options ?? {};
109
+ let shouldPublish;
110
+ let shouldCommit;
111
+ if (!skipPublicationIfPristine && !isControlled && !dateState.hasBeenModifiedSinceMount) {
112
+ // If the value is not controlled and the value has never been modified before,
113
+ // Then clicking on any value (including the one equal to `defaultValue`) should call `onChange` and `onAccept`
114
+ shouldPublish = true;
115
+ shouldCommit = changeImportance === 'accept';
116
+ } else {
117
+ shouldPublish = !valueManager.areValuesEqual(utils, newValue, dateState.lastPublishedValue);
118
+ shouldCommit = changeImportance === 'accept' && !valueManager.areValuesEqual(utils, newValue, dateState.lastCommittedValue);
119
+ }
214
120
  setDateState(prev => _extends({}, prev, {
215
- draft: action.value,
216
- lastPublishedValue: shouldPublish ? action.value : prev.lastPublishedValue,
217
- lastCommittedValue: shouldCommit ? action.value : prev.lastCommittedValue,
121
+ draft: newValue,
122
+ lastPublishedValue: shouldPublish ? newValue : prev.lastPublishedValue,
123
+ lastCommittedValue: shouldCommit ? newValue : prev.lastCommittedValue,
218
124
  hasBeenModifiedSinceMount: true
219
125
  }));
220
126
  let cachedContext = null;
221
127
  const getContext = () => {
222
128
  if (!cachedContext) {
223
- const validationError = action.name === 'setValueFromField' ? action.context.validationError : getValidationErrorForNewValue(action.value);
224
129
  cachedContext = {
225
- validationError
130
+ validationError: validationError == null ? getValidationErrorForNewValue(newValue) : validationError
226
131
  };
227
- if (action.name === 'setValueFromShortcut') {
228
- cachedContext.shortcut = action.shortcut;
132
+ if (shortcut) {
133
+ cachedContext.shortcut = shortcut;
229
134
  }
230
135
  }
231
136
  return cachedContext;
232
137
  };
233
138
  if (shouldPublish) {
234
- handleValueChange(action.value, getContext());
139
+ handleValueChange(newValue, getContext());
235
140
  }
236
141
  if (shouldCommit && onAccept) {
237
- onAccept(action.value, getContext());
142
+ onAccept(newValue, getContext());
238
143
  }
239
- if (shouldClose) {
144
+ if (changeImportance === 'accept') {
240
145
  setOpen(false);
241
146
  }
242
147
  });
@@ -251,85 +156,6 @@ export const usePickerValue = ({
251
156
  hasBeenModifiedSinceMount: true
252
157
  }));
253
158
  }
254
- const handleClear = useEventCallback(() => {
255
- updateDate({
256
- value: valueManager.emptyValue,
257
- name: 'setValueFromAction',
258
- pickerAction: 'clear'
259
- });
260
- });
261
- const handleAccept = useEventCallback(() => {
262
- updateDate({
263
- value: dateState.lastPublishedValue,
264
- name: 'setValueFromAction',
265
- pickerAction: 'accept'
266
- });
267
- });
268
- const handleDismiss = useEventCallback(() => {
269
- updateDate({
270
- value: dateState.lastPublishedValue,
271
- name: 'setValueFromAction',
272
- pickerAction: 'dismiss'
273
- });
274
- });
275
- const handleCancel = useEventCallback(() => {
276
- updateDate({
277
- value: dateState.lastCommittedValue,
278
- name: 'setValueFromAction',
279
- pickerAction: 'cancel'
280
- });
281
- });
282
- const handleSetToday = useEventCallback(() => {
283
- updateDate({
284
- value: valueManager.getTodayValue(utils, timezone, valueType),
285
- name: 'setValueFromAction',
286
- pickerAction: 'today'
287
- });
288
- });
289
- const handleOpen = useEventCallback(event => {
290
- event.preventDefault();
291
- setOpen(true);
292
- });
293
- const handleClose = useEventCallback(event => {
294
- event?.preventDefault();
295
- setOpen(false);
296
- });
297
- const handleChange = useEventCallback((newValue, selectionState = 'partial') => updateDate({
298
- name: 'setValueFromView',
299
- value: newValue,
300
- selectionState
301
- }));
302
- const handleSelectShortcut = useEventCallback((newValue, changeImportance, shortcut) => updateDate({
303
- name: 'setValueFromShortcut',
304
- value: newValue,
305
- changeImportance,
306
- shortcut
307
- }));
308
- const handleChangeFromField = useEventCallback((newValue, context) => updateDate({
309
- name: 'setValueFromField',
310
- value: newValue,
311
- context
312
- }));
313
- const actions = {
314
- onClear: handleClear,
315
- onAccept: handleAccept,
316
- onDismiss: handleDismiss,
317
- onCancel: handleCancel,
318
- onSetToday: handleSetToday,
319
- onOpen: handleOpen,
320
- onClose: handleClose
321
- };
322
- const fieldResponse = {
323
- value: dateState.draft,
324
- onChange: handleChangeFromField
325
- };
326
- const valueWithoutError = React.useMemo(() => valueManager.cleanValue(utils, dateState.draft), [utils, valueManager, dateState.draft]);
327
- const viewResponse = {
328
- value: valueWithoutError,
329
- onChange: handleChange,
330
- onClose: handleClose,
331
- open
332
- };
333
159
  const isValid = testedValue => {
334
160
  const error = validator({
335
161
  adapter,
@@ -339,28 +165,67 @@ export const usePickerValue = ({
339
165
  });
340
166
  return !valueManager.hasError(error);
341
167
  };
342
- const layoutResponse = _extends({}, actions, {
343
- value: valueWithoutError,
344
- onChange: handleChange,
345
- onSelectShortcut: handleSelectShortcut,
346
- isValid
168
+ const clearValue = useEventCallback(() => setValue(valueManager.emptyValue));
169
+ const setValueToToday = useEventCallback(() => setValue(valueManager.getTodayValue(utils, timezone, valueType)));
170
+ const acceptValueChanges = useEventCallback(() => setValue(dateState.lastPublishedValue));
171
+ const cancelValueChanges = useEventCallback(() => setValue(dateState.lastCommittedValue, {
172
+ skipPublicationIfPristine: true
173
+ }));
174
+ const dismissViews = useEventCallback(() => {
175
+ setValue(dateState.lastPublishedValue, {
176
+ skipPublicationIfPristine: true
177
+ });
347
178
  });
348
- const contextValue = React.useMemo(() => {
349
- return {
350
- open,
351
- setOpen
352
- };
353
- }, [open, setOpen]);
179
+ const fieldResponse = {
180
+ value: dateState.draft,
181
+ onChange: (newValue, context) => setValue(newValue, {
182
+ validationError: context.validationError
183
+ })
184
+ };
185
+ const setValueFromView = useEventCallback((newValue, selectionState = 'partial') => {
186
+ // TODO: Expose a new method (private?) like `setView` that only updates the draft value.
187
+ if (selectionState === 'shallow') {
188
+ setDateState(prev => _extends({}, prev, {
189
+ draft: newValue,
190
+ hasBeenModifiedSinceMount: true
191
+ }));
192
+ }
193
+ setValue(newValue, {
194
+ changeImportance: selectionState === 'finish' && closeOnSelect ? 'accept' : 'set'
195
+ });
196
+ });
197
+ const valueWithoutError = React.useMemo(() => valueManager.cleanValue(utils, dateState.draft), [utils, valueManager, dateState.draft]);
198
+ const viewResponse = {
199
+ value: valueWithoutError,
200
+ onChange: setValueFromView,
201
+ open,
202
+ setOpen
203
+ };
204
+ const actionsContextValue = React.useMemo(() => ({
205
+ setValue,
206
+ setOpen,
207
+ clearValue,
208
+ setValueToToday,
209
+ acceptValueChanges,
210
+ cancelValueChanges
211
+ }), [setValue, setOpen, clearValue, setValueToToday, acceptValueChanges, cancelValueChanges]);
212
+ const contextValue = React.useMemo(() => _extends({}, actionsContextValue, {
213
+ open,
214
+ value: dateState.draft
215
+ }), [actionsContextValue, open, dateState.draft]);
216
+ const privateContextValue = React.useMemo(() => ({
217
+ dismissViews
218
+ }), [dismissViews]);
354
219
  const providerParams = {
355
220
  value: valueWithoutError,
356
- contextValue
221
+ contextValue,
222
+ actionsContextValue,
223
+ privateContextValue,
224
+ isValidContextValue: isValid
357
225
  };
358
226
  return {
359
- open,
360
227
  fieldProps: fieldResponse,
361
228
  viewProps: viewResponse,
362
- layoutProps: layoutResponse,
363
- actions,
364
229
  provider: providerParams
365
230
  };
366
231
  };
@@ -14,7 +14,7 @@ import { isTimeView } from "../../utils/time-utils.js";
14
14
  /**
15
15
  * Props used to handle the value of the pickers.
16
16
  */
17
-
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
18
  /**
19
19
  * Manage the views of all the pickers:
20
20
  * - Handles the view switch
@@ -24,15 +24,15 @@ import { isTimeView } from "../../utils/time-utils.js";
24
24
  export const usePickerViews = ({
25
25
  props,
26
26
  propsFromPickerValue,
27
- additionalViewProps,
28
27
  autoFocusView,
29
- rendererInterceptor,
28
+ rendererInterceptor: RendererInterceptor,
30
29
  fieldRef
31
30
  }) => {
32
31
  const {
33
32
  onChange,
33
+ value,
34
34
  open,
35
- onClose
35
+ setOpen
36
36
  } = propsFromPickerValue;
37
37
  const {
38
38
  view: inView,
@@ -92,7 +92,7 @@ export const usePickerViews = ({
92
92
  useEnhancedEffect(() => {
93
93
  // Handle case of `DateTimePicker` without time renderers
94
94
  if (currentViewMode === 'field' && open) {
95
- onClose();
95
+ setOpen(false);
96
96
  setTimeout(() => {
97
97
  fieldRef?.current?.setSelectedSections(view);
98
98
  // focusing the input before the range selection is done
@@ -123,18 +123,21 @@ export const usePickerViews = ({
123
123
  setFocusedView(newView, true);
124
124
  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps
125
125
 
126
- const layoutProps = {
126
+ const actionsContextValue = React.useMemo(() => ({
127
+ setView
128
+ }), [setView]);
129
+ const contextValue = React.useMemo(() => _extends({}, actionsContextValue, {
127
130
  views,
128
- view: popperView,
129
- onViewChange: setView
130
- };
131
+ view: popperView
132
+ }), [actionsContextValue, views, popperView]);
131
133
  const providerParams = {
132
134
  hasUIView,
133
- views
135
+ views,
136
+ contextValue,
137
+ actionsContextValue
134
138
  };
135
139
  return {
136
140
  shouldRestoreFocus,
137
- layoutProps,
138
141
  provider: providerParams,
139
142
  renderCurrentView: () => {
140
143
  if (popperView == null) {
@@ -144,9 +147,10 @@ export const usePickerViews = ({
144
147
  if (renderer == null) {
145
148
  return null;
146
149
  }
147
- const rendererProps = _extends({}, propsToForwardToView, additionalViewProps, propsFromPickerValue, {
150
+ const rendererProps = _extends({}, propsToForwardToView, {
148
151
  views,
149
152
  timezone,
153
+ value,
150
154
  onChange: setValueAndGoToNextView,
151
155
  view: popperView,
152
156
  onViewChange: setView,
@@ -155,8 +159,12 @@ export const usePickerViews = ({
155
159
  showViewSwitcher: timeViewsCount > 1,
156
160
  timeViewsCount
157
161
  });
158
- if (rendererInterceptor) {
159
- return rendererInterceptor(viewRenderers, popperView, rendererProps);
162
+ if (RendererInterceptor) {
163
+ return /*#__PURE__*/_jsx(RendererInterceptor, {
164
+ viewRenderers: viewRenderers,
165
+ popperView: popperView,
166
+ rendererProps: rendererProps
167
+ });
160
168
  }
161
169
  return renderer(rendererProps);
162
170
  }
@@ -39,20 +39,17 @@ export const useStaticPicker = _ref => {
39
39
  autoFocus
40
40
  } = props;
41
41
  const {
42
- layoutProps,
43
42
  providerProps,
44
43
  renderCurrentView
45
44
  } = usePicker(_extends({}, pickerParams, {
46
45
  props,
47
46
  autoFocusView: autoFocus ?? false,
48
- fieldRef: undefined,
49
47
  localeText,
50
- additionalViewProps: {},
51
48
  variant: displayStaticWrapperAs
52
49
  }));
53
50
  const Layout = slots?.layout ?? PickerStaticLayout;
54
51
  const renderPicker = () => /*#__PURE__*/_jsx(PickerProvider, _extends({}, providerProps, {
55
- children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps?.layout, {
52
+ children: /*#__PURE__*/_jsx(Layout, _extends({}, slotProps?.layout, {
56
53
  slots: slots,
57
54
  slotProps: slotProps,
58
55
  sx: [...(Array.isArray(sx) ? sx : [sx]), ...(Array.isArray(slotProps?.layout?.sx) ? slotProps.layout.sx : [slotProps?.layout?.sx])],
@@ -19,7 +19,7 @@ export const useUtils = () => useLocalizationContext().utils;
19
19
  export const useDefaultDates = () => useLocalizationContext().defaultDates;
20
20
  export const useNow = timezone => {
21
21
  const utils = useUtils();
22
- const now = React.useRef();
22
+ const now = React.useRef(undefined);
23
23
  if (now.current === undefined) {
24
24
  now.current = utils.date(undefined, timezone);
25
25
  }