@mui/x-date-pickers 8.0.0-alpha.4 → 8.0.0-alpha.6

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 (205) hide show
  1. package/CHANGELOG.md +182 -0
  2. package/DatePicker/DatePickerToolbar.d.ts +1 -2
  3. package/DatePicker/DatePickerToolbar.js +6 -17
  4. package/DateTimePicker/DateTimePicker.types.d.ts +2 -2
  5. package/DateTimePicker/DateTimePickerTabs.d.ts +2 -5
  6. package/DateTimePicker/DateTimePickerTabs.js +6 -13
  7. package/DateTimePicker/DateTimePickerToolbar.d.ts +8 -4
  8. package/DateTimePicker/DateTimePickerToolbar.js +13 -24
  9. package/DateTimePicker/shared.d.ts +2 -2
  10. package/DesktopDatePicker/DesktopDatePicker.types.d.ts +2 -3
  11. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +2 -2
  12. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +1 -2
  13. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -11
  14. package/DesktopTimePicker/DesktopTimePicker.types.d.ts +2 -2
  15. package/MobileDatePicker/MobileDatePicker.types.d.ts +2 -3
  16. package/MobileDateTimePicker/MobileDateTimePicker.types.d.ts +4 -4
  17. package/MobileTimePicker/MobileTimePicker.types.d.ts +4 -4
  18. package/MonthCalendar/MonthCalendar.d.ts +1 -1
  19. package/MonthCalendar/MonthCalendar.js +31 -11
  20. package/MonthCalendar/MonthCalendar.types.d.ts +2 -2
  21. package/MonthCalendar/MonthCalendarButton.d.ts +24 -0
  22. package/MonthCalendar/{PickersMonth.js → MonthCalendarButton.js} +20 -61
  23. package/MonthCalendar/index.d.ts +0 -3
  24. package/MonthCalendar/index.js +1 -2
  25. package/MonthCalendar/monthCalendarClasses.d.ts +7 -1
  26. package/MonthCalendar/monthCalendarClasses.js +1 -1
  27. package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +3 -0
  28. package/PickersActionBar/PickersActionBar.d.ts +0 -4
  29. package/PickersActionBar/PickersActionBar.js +12 -13
  30. package/PickersLayout/PickersLayout.d.ts +2 -2
  31. package/PickersLayout/PickersLayout.js +1 -11
  32. package/PickersLayout/PickersLayout.types.d.ts +12 -14
  33. package/PickersLayout/usePickerLayout.d.ts +2 -2
  34. package/PickersLayout/usePickerLayout.js +3 -18
  35. package/PickersSectionList/PickersSectionList.js +21 -16
  36. package/PickersSectionList/PickersSectionList.types.d.ts +13 -6
  37. package/PickersTextField/PickersFilledInput/PickersFilledInput.d.ts +7 -0
  38. package/PickersTextField/PickersFilledInput/PickersFilledInput.js +34 -28
  39. package/PickersTextField/PickersFilledInput/pickersFilledInputClasses.d.ts +1 -1
  40. package/PickersTextField/PickersInput/PickersInput.js +20 -14
  41. package/PickersTextField/PickersInput/pickersInputClasses.d.ts +3 -2
  42. package/PickersTextField/PickersInput/pickersInputClasses.js +1 -1
  43. package/PickersTextField/PickersInputBase/PickersInputBase.d.ts +3 -6
  44. package/PickersTextField/PickersInputBase/PickersInputBase.js +36 -37
  45. package/PickersTextField/PickersInputBase/PickersInputBase.types.d.ts +1 -0
  46. package/PickersTextField/PickersOutlinedInput/Outline.d.ts +0 -1
  47. package/PickersTextField/PickersOutlinedInput/Outline.js +13 -10
  48. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +8 -14
  49. package/PickersTextField/PickersTextField.js +75 -62
  50. package/PickersTextField/PickersTextField.types.d.ts +43 -4
  51. package/PickersTextField/usePickerTextFieldOwnerState.d.ts +4 -0
  52. package/PickersTextField/usePickerTextFieldOwnerState.js +11 -0
  53. package/StaticDatePicker/StaticDatePicker.types.d.ts +2 -3
  54. package/StaticDateTimePicker/StaticDateTimePicker.types.d.ts +2 -2
  55. package/StaticTimePicker/StaticTimePicker.types.d.ts +2 -2
  56. package/TimeClock/Clock.d.ts +4 -0
  57. package/TimeClock/Clock.js +9 -6
  58. package/TimeClock/TimeClock.js +21 -4
  59. package/TimePicker/TimePicker.types.d.ts +2 -2
  60. package/TimePicker/TimePickerToolbar.d.ts +2 -2
  61. package/TimePicker/TimePickerToolbar.js +6 -20
  62. package/YearCalendar/YearCalendar.js +46 -13
  63. package/YearCalendar/YearCalendar.types.d.ts +2 -2
  64. package/YearCalendar/YearCalendarButton.d.ts +23 -0
  65. package/YearCalendar/{PickersYear.js → YearCalendarButton.js} +20 -59
  66. package/YearCalendar/index.d.ts +0 -3
  67. package/YearCalendar/index.js +1 -2
  68. package/YearCalendar/yearCalendarClasses.d.ts +7 -1
  69. package/YearCalendar/yearCalendarClasses.js +1 -1
  70. package/hooks/index.d.ts +1 -0
  71. package/hooks/index.js +2 -1
  72. package/hooks/usePickerActionsContext.d.ts +5 -0
  73. package/hooks/usePickerActionsContext.js +16 -0
  74. package/hooks/usePickerContext.d.ts +3 -1
  75. package/hooks/usePickerContext.js +0 -1
  76. package/index.js +1 -1
  77. package/internals/components/PickerProvider.d.ts +11 -6
  78. package/internals/components/PickerProvider.js +12 -6
  79. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +3 -3
  80. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.types.d.ts +1 -1
  81. package/internals/components/PickersModalDialog.d.ts +1 -3
  82. package/internals/components/PickersModalDialog.js +9 -3
  83. package/internals/components/PickersPopper.d.ts +1 -3
  84. package/internals/components/PickersPopper.js +11 -6
  85. package/internals/components/PickersToolbar.d.ts +3 -3
  86. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +9 -9
  87. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +5 -5
  88. package/internals/hooks/useFieldOwnerState.d.ts +1 -0
  89. package/internals/hooks/useFieldOwnerState.js +6 -2
  90. package/internals/hooks/useMobilePicker/useMobilePicker.js +8 -7
  91. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +5 -5
  92. package/internals/hooks/usePicker/usePicker.js +1 -3
  93. package/internals/hooks/usePicker/usePicker.types.d.ts +2 -2
  94. package/internals/hooks/usePicker/usePickerProvider.js +5 -4
  95. package/internals/hooks/usePicker/usePickerValue.js +46 -64
  96. package/internals/hooks/usePicker/usePickerValue.types.d.ts +38 -17
  97. package/internals/hooks/usePicker/usePickerViews.d.ts +15 -4
  98. package/internals/hooks/usePicker/usePickerViews.js +9 -7
  99. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +4 -4
  100. package/internals/index.d.ts +4 -4
  101. package/internals/index.js +1 -1
  102. package/internals/models/props/tabs.d.ts +0 -13
  103. package/internals/models/props/toolbar.d.ts +1 -16
  104. package/models/fields.d.ts +11 -1
  105. package/modern/DatePicker/DatePickerToolbar.js +6 -17
  106. package/modern/DateTimePicker/DateTimePickerTabs.js +6 -13
  107. package/modern/DateTimePicker/DateTimePickerToolbar.js +13 -24
  108. package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -11
  109. package/modern/MonthCalendar/MonthCalendar.js +31 -11
  110. package/modern/MonthCalendar/{PickersMonth.js → MonthCalendarButton.js} +20 -61
  111. package/modern/MonthCalendar/index.js +1 -2
  112. package/modern/MonthCalendar/monthCalendarClasses.js +1 -1
  113. package/modern/MultiSectionDigitalClock/MultiSectionDigitalClock.js +3 -0
  114. package/modern/PickersActionBar/PickersActionBar.js +12 -13
  115. package/modern/PickersLayout/PickersLayout.js +1 -11
  116. package/modern/PickersLayout/usePickerLayout.js +3 -18
  117. package/modern/PickersSectionList/PickersSectionList.js +21 -16
  118. package/modern/PickersTextField/PickersFilledInput/PickersFilledInput.js +34 -28
  119. package/modern/PickersTextField/PickersInput/PickersInput.js +20 -14
  120. package/modern/PickersTextField/PickersInput/pickersInputClasses.js +1 -1
  121. package/modern/PickersTextField/PickersInputBase/PickersInputBase.js +36 -37
  122. package/modern/PickersTextField/PickersOutlinedInput/Outline.js +13 -10
  123. package/modern/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +8 -14
  124. package/modern/PickersTextField/PickersTextField.js +75 -62
  125. package/modern/PickersTextField/usePickerTextFieldOwnerState.js +11 -0
  126. package/modern/TimeClock/Clock.js +9 -6
  127. package/modern/TimeClock/TimeClock.js +21 -4
  128. package/modern/TimePicker/TimePickerToolbar.js +6 -20
  129. package/modern/YearCalendar/YearCalendar.js +46 -13
  130. package/modern/YearCalendar/{PickersYear.js → YearCalendarButton.js} +20 -59
  131. package/modern/YearCalendar/index.js +1 -2
  132. package/modern/YearCalendar/yearCalendarClasses.js +1 -1
  133. package/modern/hooks/index.js +2 -1
  134. package/modern/hooks/usePickerActionsContext.js +16 -0
  135. package/modern/hooks/usePickerContext.js +0 -1
  136. package/modern/index.js +1 -1
  137. package/modern/internals/components/PickerProvider.js +12 -6
  138. package/modern/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +3 -3
  139. package/modern/internals/components/PickersModalDialog.js +9 -3
  140. package/modern/internals/components/PickersPopper.js +11 -6
  141. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +9 -9
  142. package/modern/internals/hooks/useFieldOwnerState.js +6 -2
  143. package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +8 -7
  144. package/modern/internals/hooks/usePicker/usePicker.js +1 -3
  145. package/modern/internals/hooks/usePicker/usePickerProvider.js +5 -4
  146. package/modern/internals/hooks/usePicker/usePickerValue.js +46 -64
  147. package/modern/internals/hooks/usePicker/usePickerViews.js +9 -7
  148. package/modern/internals/index.js +1 -1
  149. package/node/DatePicker/DatePickerToolbar.js +6 -17
  150. package/node/DateTimePicker/DateTimePickerTabs.js +6 -13
  151. package/node/DateTimePicker/DateTimePickerToolbar.js +14 -25
  152. package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -11
  153. package/node/MonthCalendar/MonthCalendar.js +31 -11
  154. package/node/MonthCalendar/{PickersMonth.js → MonthCalendarButton.js} +20 -61
  155. package/node/MonthCalendar/index.js +1 -8
  156. package/node/MonthCalendar/monthCalendarClasses.js +1 -1
  157. package/node/MultiSectionDigitalClock/MultiSectionDigitalClock.js +3 -0
  158. package/node/PickersActionBar/PickersActionBar.js +12 -13
  159. package/node/PickersLayout/PickersLayout.js +1 -11
  160. package/node/PickersLayout/usePickerLayout.js +3 -18
  161. package/node/PickersSectionList/PickersSectionList.js +21 -16
  162. package/node/PickersTextField/PickersFilledInput/PickersFilledInput.js +34 -28
  163. package/node/PickersTextField/PickersInput/PickersInput.js +20 -14
  164. package/node/PickersTextField/PickersInput/pickersInputClasses.js +1 -1
  165. package/node/PickersTextField/PickersInputBase/PickersInputBase.js +36 -37
  166. package/node/PickersTextField/PickersOutlinedInput/Outline.js +13 -10
  167. package/node/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +8 -14
  168. package/node/PickersTextField/PickersTextField.js +75 -62
  169. package/node/PickersTextField/usePickerTextFieldOwnerState.js +18 -0
  170. package/node/TimeClock/Clock.js +9 -6
  171. package/node/TimeClock/TimeClock.js +21 -4
  172. package/node/TimePicker/TimePickerToolbar.js +6 -20
  173. package/node/YearCalendar/YearCalendar.js +45 -12
  174. package/node/YearCalendar/{PickersYear.js → YearCalendarButton.js} +20 -59
  175. package/node/YearCalendar/index.js +1 -8
  176. package/node/YearCalendar/yearCalendarClasses.js +1 -1
  177. package/node/hooks/index.js +8 -1
  178. package/node/hooks/usePickerActionsContext.js +22 -0
  179. package/node/index.js +1 -1
  180. package/node/internals/components/PickerProvider.js +13 -7
  181. package/node/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +3 -3
  182. package/node/internals/components/PickersModalDialog.js +9 -3
  183. package/node/internals/components/PickersPopper.js +11 -6
  184. package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +9 -9
  185. package/node/internals/hooks/useFieldOwnerState.js +6 -2
  186. package/node/internals/hooks/useMobilePicker/useMobilePicker.js +8 -7
  187. package/node/internals/hooks/usePicker/usePicker.js +1 -3
  188. package/node/internals/hooks/usePicker/usePickerProvider.js +5 -4
  189. package/node/internals/hooks/usePicker/usePickerValue.js +46 -64
  190. package/node/internals/hooks/usePicker/usePickerViews.js +9 -7
  191. package/node/internals/index.js +2 -2
  192. package/package.json +3 -3
  193. package/themeAugmentation/components.d.ts +0 -8
  194. package/themeAugmentation/overrides.d.ts +2 -4
  195. package/themeAugmentation/props.d.ts +4 -7
  196. package/MonthCalendar/PickersMonth.d.ts +0 -28
  197. package/MonthCalendar/pickersMonthClasses.d.ts +0 -13
  198. package/MonthCalendar/pickersMonthClasses.js +0 -5
  199. package/YearCalendar/PickersYear.d.ts +0 -27
  200. package/YearCalendar/pickersYearClasses.d.ts +0 -13
  201. package/YearCalendar/pickersYearClasses.js +0 -5
  202. package/modern/MonthCalendar/pickersMonthClasses.js +0 -5
  203. package/modern/YearCalendar/pickersYearClasses.js +0 -5
  204. package/node/MonthCalendar/pickersMonthClasses.js +0 -12
  205. package/node/YearCalendar/pickersYearClasses.js +0 -12
@@ -45,15 +45,13 @@ export const usePicker = ({
45
45
  });
46
46
  return {
47
47
  // Picker value
48
- open: pickerValueResponse.open,
49
- actions: pickerValueResponse.actions,
50
48
  fieldProps: pickerValueResponse.fieldProps,
51
49
  // Picker views
52
50
  renderCurrentView: pickerViewsResponse.renderCurrentView,
53
51
  hasUIView: pickerViewsResponse.provider.hasUIView,
54
52
  shouldRestoreFocus: pickerViewsResponse.shouldRestoreFocus,
55
53
  // Picker layout
56
- layoutProps: _extends({}, pickerViewsResponse.layoutProps, pickerValueResponse.layoutProps),
54
+ layoutProps: _extends({}, pickerValueResponse.layoutProps),
57
55
  // Picker provider
58
56
  providerProps,
59
57
  // Picker owner state
@@ -53,18 +53,19 @@ 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
65
  return {
66
66
  localeText,
67
67
  contextValue,
68
+ actionsContextValue: paramsFromUsePickerValue.actionsContextValue,
68
69
  privateContextValue
69
70
  };
70
71
  }
@@ -251,49 +251,6 @@ export const usePickerValue = ({
251
251
  hasBeenModifiedSinceMount: true
252
252
  }));
253
253
  }
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
254
  const handleChange = useEventCallback((newValue, selectionState = 'partial') => updateDate({
298
255
  name: 'setValueFromView',
299
256
  value: newValue,
@@ -310,15 +267,6 @@ export const usePickerValue = ({
310
267
  value: newValue,
311
268
  context
312
269
  }));
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
270
  const fieldResponse = {
323
271
  value: dateState.draft,
324
272
  onChange: handleChangeFromField
@@ -327,8 +275,8 @@ export const usePickerValue = ({
327
275
  const viewResponse = {
328
276
  value: valueWithoutError,
329
277
  onChange: handleChange,
330
- onClose: handleClose,
331
- open
278
+ open,
279
+ setOpen
332
280
  };
333
281
  const isValid = testedValue => {
334
282
  const error = validator({
@@ -339,28 +287,62 @@ export const usePickerValue = ({
339
287
  });
340
288
  return !valueManager.hasError(error);
341
289
  };
342
- const layoutResponse = _extends({}, actions, {
290
+ const layoutResponse = {
343
291
  value: valueWithoutError,
344
292
  onChange: handleChange,
345
293
  onSelectShortcut: handleSelectShortcut,
346
294
  isValid
295
+ };
296
+ const clearValue = useEventCallback(() => updateDate({
297
+ value: valueManager.emptyValue,
298
+ name: 'setValueFromAction',
299
+ pickerAction: 'clear'
300
+ }));
301
+ const setValueToToday = useEventCallback(() => updateDate({
302
+ value: valueManager.getTodayValue(utils, timezone, valueType),
303
+ name: 'setValueFromAction',
304
+ pickerAction: 'today'
305
+ }));
306
+ const acceptValueChanges = useEventCallback(() => updateDate({
307
+ value: dateState.lastPublishedValue,
308
+ name: 'setValueFromAction',
309
+ pickerAction: 'accept'
310
+ }));
311
+ const cancelValueChanges = useEventCallback(() => updateDate({
312
+ value: dateState.lastCommittedValue,
313
+ name: 'setValueFromAction',
314
+ pickerAction: 'cancel'
315
+ }));
316
+ const dismissViews = useEventCallback(() => {
317
+ updateDate({
318
+ value: dateState.lastPublishedValue,
319
+ name: 'setValueFromAction',
320
+ pickerAction: 'dismiss'
321
+ });
347
322
  });
348
- const contextValue = React.useMemo(() => {
349
- return {
350
- open,
351
- setOpen
352
- };
353
- }, [open, setOpen]);
323
+ const actionsContextValue = React.useMemo(() => ({
324
+ setOpen,
325
+ clearValue,
326
+ setValueToToday,
327
+ acceptValueChanges,
328
+ cancelValueChanges
329
+ }), [setOpen, clearValue, setValueToToday, acceptValueChanges, cancelValueChanges]);
330
+ const contextValue = React.useMemo(() => _extends({}, actionsContextValue, {
331
+ open
332
+ }), [actionsContextValue, open]);
333
+ const privateContextValue = React.useMemo(() => ({
334
+ dismissViews
335
+ }), [dismissViews]);
354
336
  const providerParams = {
355
337
  value: valueWithoutError,
356
- contextValue
338
+ contextValue,
339
+ actionsContextValue,
340
+ privateContextValue
357
341
  };
358
342
  return {
359
- open,
360
343
  fieldProps: fieldResponse,
361
344
  viewProps: viewResponse,
362
345
  layoutProps: layoutResponse,
363
- actions,
364
346
  provider: providerParams
365
347
  };
366
348
  };
@@ -31,8 +31,9 @@ export const usePickerViews = ({
31
31
  }) => {
32
32
  const {
33
33
  onChange,
34
+ value,
34
35
  open,
35
- onClose
36
+ setOpen
36
37
  } = propsFromPickerValue;
37
38
  const {
38
39
  view: inView,
@@ -92,7 +93,7 @@ export const usePickerViews = ({
92
93
  useEnhancedEffect(() => {
93
94
  // Handle case of `DateTimePicker` without time renderers
94
95
  if (currentViewMode === 'field' && open) {
95
- onClose();
96
+ setOpen(false);
96
97
  setTimeout(() => {
97
98
  fieldRef?.current?.setSelectedSections(view);
98
99
  // focusing the input before the range selection is done
@@ -123,18 +124,18 @@ export const usePickerViews = ({
123
124
  setFocusedView(newView, true);
124
125
  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps
125
126
 
126
- const layoutProps = {
127
+ const contextValue = React.useMemo(() => ({
127
128
  views,
128
129
  view: popperView,
129
130
  onViewChange: setView
130
- };
131
+ }), [views, popperView, setView]);
131
132
  const providerParams = {
132
133
  hasUIView,
133
- views
134
+ views,
135
+ contextValue
134
136
  };
135
137
  return {
136
138
  shouldRestoreFocus,
137
- layoutProps,
138
139
  provider: providerParams,
139
140
  renderCurrentView: () => {
140
141
  if (popperView == null) {
@@ -144,9 +145,10 @@ export const usePickerViews = ({
144
145
  if (renderer == null) {
145
146
  return null;
146
147
  }
147
- const rendererProps = _extends({}, propsToForwardToView, additionalViewProps, propsFromPickerValue, {
148
+ const rendererProps = _extends({}, propsToForwardToView, additionalViewProps, {
148
149
  views,
149
150
  timezone,
151
+ value,
150
152
  onChange: setValueAndGoToNextView,
151
153
  view: popperView,
152
154
  onViewChange: setView,
@@ -31,4 +31,4 @@ export { applyDefaultViewProps } from "./utils/views.js";
31
31
  export { DayCalendar } from "../DateCalendar/DayCalendar.js";
32
32
  export { useCalendarState } from "../DateCalendar/useCalendarState.js";
33
33
  export { isInternalTimeView, isTimeView } from "./utils/time-utils.js";
34
- export { DateTimePickerToolbarForceDesktopVariant } from "../DateTimePicker/DateTimePickerToolbar.js";
34
+ export { DateTimePickerToolbarOverrideContext } from "../DateTimePicker/DateTimePickerToolbar.js";
@@ -21,8 +21,9 @@ var _useUtils = require("../internals/hooks/useUtils");
21
21
  var _datePickerToolbarClasses = require("./datePickerToolbarClasses");
22
22
  var _dateUtils = require("../internals/utils/date-utils");
23
23
  var _useToolbarOwnerState = require("../internals/hooks/useToolbarOwnerState");
24
+ var _hooks = require("../hooks");
24
25
  var _jsxRuntime = require("react/jsx-runtime");
25
- const _excluded = ["value", "isLandscape", "onChange", "toolbarFormat", "toolbarPlaceholder", "views", "className", "classes", "onViewChange", "view"];
26
+ const _excluded = ["value", "isLandscape", "onChange", "toolbarFormat", "toolbarPlaceholder", "className", "classes"];
26
27
  const useUtilityClasses = classes => {
27
28
  const slots = {
28
29
  root: ['root'],
@@ -69,12 +70,14 @@ const DatePickerToolbar = exports.DatePickerToolbar = /*#__PURE__*/React.forward
69
70
  isLandscape,
70
71
  toolbarFormat,
71
72
  toolbarPlaceholder = '––',
72
- views,
73
73
  className,
74
74
  classes: classesProp
75
75
  } = props,
76
76
  other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
77
77
  const utils = (0, _useUtils.useUtils)();
78
+ const {
79
+ views
80
+ } = (0, _hooks.usePickerContext)();
78
81
  const translations = (0, _usePickerTranslations.usePickerTranslations)();
79
82
  const ownerState = (0, _useToolbarOwnerState.useToolbarOwnerState)();
80
83
  const classes = useUtilityClasses(classesProp);
@@ -120,12 +123,6 @@ process.env.NODE_ENV !== "production" ? DatePickerToolbar.propTypes = {
120
123
  hidden: _propTypes.default.bool,
121
124
  isLandscape: _propTypes.default.bool.isRequired,
122
125
  onChange: _propTypes.default.func.isRequired,
123
- /**
124
- * Callback called when a toolbar is clicked
125
- * @template TView
126
- * @param {TView} view The view to open
127
- */
128
- onViewChange: _propTypes.default.func.isRequired,
129
126
  /**
130
127
  * The system prop that allows defining system overrides as well as additional CSS styles.
131
128
  */
@@ -140,13 +137,5 @@ process.env.NODE_ENV !== "production" ? DatePickerToolbar.propTypes = {
140
137
  * @default "––"
141
138
  */
142
139
  toolbarPlaceholder: _propTypes.default.node,
143
- value: _propTypes.default.object,
144
- /**
145
- * Currently visible picker view.
146
- */
147
- view: _propTypes.default.oneOf(['day', 'month', 'year']).isRequired,
148
- /**
149
- * Available views.
150
- */
151
- views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'month', 'year']).isRequired).isRequired
140
+ value: _propTypes.default.object
152
141
  } : void 0;
@@ -19,6 +19,7 @@ var _usePickerTranslations = require("../hooks/usePickerTranslations");
19
19
  var _dateTimePickerTabsClasses = require("./dateTimePickerTabsClasses");
20
20
  var _dateUtils = require("../internals/utils/date-utils");
21
21
  var _usePickerPrivateContext = require("../internals/hooks/usePickerPrivateContext");
22
+ var _hooks = require("../hooks");
22
23
  var _jsxRuntime = require("react/jsx-runtime");
23
24
  const viewToTab = view => {
24
25
  if ((0, _dateUtils.isDatePickerView)(view)) {
@@ -72,9 +73,7 @@ const DateTimePickerTabs = exports.DateTimePickerTabs = function DateTimePickerT
72
73
  });
73
74
  const {
74
75
  dateIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.DateRangeIcon, {}),
75
- onViewChange,
76
76
  timeIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.TimeIcon, {}),
77
- view,
78
77
  hidden = typeof window === 'undefined' || window.innerHeight < 667,
79
78
  className,
80
79
  classes: classesProp,
@@ -84,6 +83,10 @@ const DateTimePickerTabs = exports.DateTimePickerTabs = function DateTimePickerT
84
83
  const {
85
84
  ownerState
86
85
  } = (0, _usePickerPrivateContext.usePickerPrivateContext)();
86
+ const {
87
+ view,
88
+ onViewChange
89
+ } = (0, _hooks.usePickerContext)();
87
90
  const classes = useUtilityClasses(classesProp);
88
91
  const handleChange = (event, value) => {
89
92
  onViewChange(tabToView(value));
@@ -133,12 +136,6 @@ process.env.NODE_ENV !== "production" ? DateTimePickerTabs.propTypes = {
133
136
  * @default `window.innerHeight < 667` for `DesktopDateTimePicker` and `MobileDateTimePicker`, `displayStaticWrapperAs === 'desktop'` for `StaticDateTimePicker`
134
137
  */
135
138
  hidden: _propTypes.default.bool,
136
- /**
137
- * Callback called when a tab is clicked.
138
- * @template TView
139
- * @param {TView} view The view to open
140
- */
141
- onViewChange: _propTypes.default.func.isRequired,
142
139
  /**
143
140
  * The system prop that allows defining system overrides as well as additional CSS styles.
144
141
  */
@@ -147,9 +144,5 @@ process.env.NODE_ENV !== "production" ? DateTimePickerTabs.propTypes = {
147
144
  * Time tab icon.
148
145
  * @default Time
149
146
  */
150
- timeIcon: _propTypes.default.node,
151
- /**
152
- * Currently visible picker view.
153
- */
154
- view: _propTypes.default.oneOf(['day', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'year']).isRequired
147
+ timeIcon: _propTypes.default.node
155
148
  } : void 0;
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
9
  exports.DateTimePickerToolbar = DateTimePickerToolbar;
10
- exports.DateTimePickerToolbarForceDesktopVariant = void 0;
10
+ exports.DateTimePickerToolbarOverrideContext = void 0;
11
11
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
12
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
13
  var React = _interopRequireWildcard(require("react"));
@@ -30,7 +30,7 @@ var _pickersToolbarClasses = require("../internals/components/pickersToolbarClas
30
30
  var _usePickerContext = require("../hooks/usePickerContext");
31
31
  var _useToolbarOwnerState = require("../internals/hooks/useToolbarOwnerState");
32
32
  var _jsxRuntime = require("react/jsx-runtime");
33
- const _excluded = ["ampm", "ampmInClock", "value", "onChange", "view", "isLandscape", "onViewChange", "toolbarFormat", "toolbarPlaceholder", "views", "toolbarTitle", "className", "classes"];
33
+ const _excluded = ["ampm", "ampmInClock", "value", "onChange", "isLandscape", "toolbarFormat", "toolbarPlaceholder", "toolbarTitle", "className", "classes"];
34
34
  const useUtilityClasses = (classes, ownerState) => {
35
35
  const {
36
36
  pickerOrientation,
@@ -214,10 +214,11 @@ const DateTimePickerToolbarAmPmSelection = (0, _styles.styled)('div', {
214
214
  });
215
215
 
216
216
  /**
217
- * If this context value is set to true, the toolbar will always be rendered in the desktop mode.
217
+ * If `forceDesktopVariant` is set to `true`, the toolbar will always be rendered in the desktop mode.
218
+ * If `onViewChange` is defined, the toolbar will call it instead of calling the default handler from `usePickerContext`.
218
219
  * This is used by the Date Time Range Picker Toolbar.
219
220
  */
220
- const DateTimePickerToolbarForceDesktopVariant = exports.DateTimePickerToolbarForceDesktopVariant = /*#__PURE__*/React.createContext(false);
221
+ const DateTimePickerToolbarOverrideContext = exports.DateTimePickerToolbarOverrideContext = /*#__PURE__*/React.createContext(null);
221
222
 
222
223
  /**
223
224
  * Demos:
@@ -239,12 +240,9 @@ function DateTimePickerToolbar(inProps) {
239
240
  ampmInClock,
240
241
  value,
241
242
  onChange,
242
- view,
243
243
  isLandscape,
244
- onViewChange,
245
244
  toolbarFormat,
246
245
  toolbarPlaceholder = '––',
247
- views,
248
246
  toolbarTitle: inToolbarTitle,
249
247
  className,
250
248
  classes: classesProp
@@ -253,7 +251,10 @@ function DateTimePickerToolbar(inProps) {
253
251
  const {
254
252
  disabled,
255
253
  readOnly,
256
- variant
254
+ variant,
255
+ view: viewCtx,
256
+ onViewChange: onViewChangeCtx,
257
+ views
257
258
  } = (0, _usePickerContext.usePickerContext)();
258
259
  const ownerState = (0, _useToolbarOwnerState.useToolbarOwnerState)();
259
260
  const classes = useUtilityClasses(classesProp, ownerState);
@@ -263,11 +264,13 @@ function DateTimePickerToolbar(inProps) {
263
264
  handleMeridiemChange
264
265
  } = (0, _dateHelpersHooks.useMeridiemMode)(value, ampm, onChange);
265
266
  const translations = (0, _usePickerTranslations.usePickerTranslations)();
266
- const forceDesktopVariant = React.useContext(DateTimePickerToolbarForceDesktopVariant);
267
- const toolbarVariant = forceDesktopVariant ? 'desktop' : variant;
267
+ const overrides = React.useContext(DateTimePickerToolbarOverrideContext);
268
+ const toolbarVariant = overrides?.forceDesktopVariant ? 'desktop' : variant;
268
269
  const isDesktop = toolbarVariant === 'desktop';
269
270
  const showAmPmControl = Boolean(ampm && !ampmInClock);
270
271
  const toolbarTitle = inToolbarTitle ?? translations.dateTimePickerToolbarTitle;
272
+ const view = overrides ? overrides.view : viewCtx;
273
+ const onViewChange = overrides ? overrides.onViewChange : onViewChangeCtx;
271
274
  const formatHours = time => ampm ? utils.format(time, 'hours12h') : utils.format(time, 'hours24h');
272
275
  const dateText = React.useMemo(() => {
273
276
  if (!value) {
@@ -392,12 +395,6 @@ process.env.NODE_ENV !== "production" ? DateTimePickerToolbar.propTypes = {
392
395
  hidden: _propTypes.default.bool,
393
396
  isLandscape: _propTypes.default.bool.isRequired,
394
397
  onChange: _propTypes.default.func.isRequired,
395
- /**
396
- * Callback called when a toolbar is clicked
397
- * @template TView
398
- * @param {TView} view The view to open
399
- */
400
- onViewChange: _propTypes.default.func.isRequired,
401
398
  /**
402
399
  * The system prop that allows defining system overrides as well as additional CSS styles.
403
400
  */
@@ -416,13 +413,5 @@ process.env.NODE_ENV !== "production" ? DateTimePickerToolbar.propTypes = {
416
413
  * If provided, it will be used instead of `dateTimePickerToolbarTitle` from localization.
417
414
  */
418
415
  toolbarTitle: _propTypes.default.node,
419
- value: _propTypes.default.object,
420
- /**
421
- * Currently visible picker view.
422
- */
423
- view: _propTypes.default.oneOf(['day', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'year']),
424
- /**
425
- * Available views.
426
- */
427
- views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'year']).isRequired).isRequired
416
+ value: _propTypes.default.object
428
417
  } : void 0;
@@ -74,16 +74,8 @@ process.env.NODE_ENV !== "production" ? DesktopDateTimePickerLayout.propTypes =
74
74
  classes: _propTypes.default.object,
75
75
  className: _propTypes.default.string,
76
76
  isValid: _propTypes.default.func.isRequired,
77
- onAccept: _propTypes.default.func.isRequired,
78
- onCancel: _propTypes.default.func.isRequired,
79
77
  onChange: _propTypes.default.func.isRequired,
80
- onClear: _propTypes.default.func.isRequired,
81
- onClose: _propTypes.default.func.isRequired,
82
- onDismiss: _propTypes.default.func.isRequired,
83
- onOpen: _propTypes.default.func.isRequired,
84
78
  onSelectShortcut: _propTypes.default.func.isRequired,
85
- onSetToday: _propTypes.default.func.isRequired,
86
- onViewChange: _propTypes.default.func.isRequired,
87
79
  /**
88
80
  * The props used for each component slot.
89
81
  * @default {}
@@ -98,7 +90,5 @@ process.env.NODE_ENV !== "production" ? DesktopDateTimePickerLayout.propTypes =
98
90
  * The system prop that allows defining system overrides as well as additional CSS styles.
99
91
  */
100
92
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
101
- value: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.object), _propTypes.default.object]),
102
- view: _propTypes.default.oneOf(['day', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'year']),
103
- views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'year']).isRequired).isRequired
93
+ value: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.object), _propTypes.default.object])
104
94
  } : void 0;
@@ -14,9 +14,10 @@ var React = _interopRequireWildcard(require("react"));
14
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
15
  var _clsx = _interopRequireDefault(require("clsx"));
16
16
  var _RtlProvider = require("@mui/system/RtlProvider");
17
+ var _createStyled = require("@mui/system/createStyled");
17
18
  var _styles = require("@mui/material/styles");
18
19
  var _utils = require("@mui/utils");
19
- var _PickersMonth = require("./PickersMonth");
20
+ var _MonthCalendarButton = require("./MonthCalendarButton");
20
21
  var _useUtils = require("../internals/hooks/useUtils");
21
22
  var _monthCalendarClasses = require("./monthCalendarClasses");
22
23
  var _dateUtils = require("../internals/utils/date-utils");
@@ -26,7 +27,7 @@ var _useValueWithTimezone = require("../internals/hooks/useValueWithTimezone");
26
27
  var _dimensions = require("../internals/constants/dimensions");
27
28
  var _usePickerPrivateContext = require("../internals/hooks/usePickerPrivateContext");
28
29
  var _jsxRuntime = require("react/jsx-runtime");
29
- const _excluded = ["className", "classes", "value", "defaultValue", "referenceDate", "disabled", "disableFuture", "disablePast", "maxDate", "minDate", "onChange", "shouldDisableMonth", "readOnly", "disableHighlightToday", "autoFocus", "onMonthFocus", "hasFocus", "onFocusedViewChange", "monthsPerRow", "timezone", "gridLabelId", "slots", "slotProps"];
30
+ const _excluded = ["autoFocus", "className", "classes", "value", "defaultValue", "referenceDate", "disabled", "disableFuture", "disablePast", "maxDate", "minDate", "onChange", "shouldDisableMonth", "readOnly", "disableHighlightToday", "onMonthFocus", "hasFocus", "onFocusedViewChange", "monthsPerRow", "timezone", "gridLabelId", "slots", "slotProps"];
30
31
  const useUtilityClasses = classes => {
31
32
  const slots = {
32
33
  root: ['root']
@@ -44,6 +45,7 @@ function useMonthCalendarDefaultizedProps(props, name) {
44
45
  disableFuture: false,
45
46
  disablePast: false
46
47
  }, themeProps, {
48
+ monthsPerRow: themeProps.monthsPerRow ?? 3,
47
49
  minDate: (0, _dateUtils.applyDefaultDate)(utils, themeProps.minDate, defaultDates.minDate),
48
50
  maxDate: (0, _dateUtils.applyDefaultDate)(utils, themeProps.maxDate, defaultDates.maxDate)
49
51
  });
@@ -51,15 +53,32 @@ function useMonthCalendarDefaultizedProps(props, name) {
51
53
  const MonthCalendarRoot = (0, _styles.styled)('div', {
52
54
  name: 'MuiMonthCalendar',
53
55
  slot: 'Root',
54
- overridesResolver: (props, styles) => styles.root
56
+ overridesResolver: (props, styles) => styles.root,
57
+ shouldForwardProp: prop => (0, _createStyled.shouldForwardProp)(prop) && prop !== 'monthsPerRow'
55
58
  })({
56
59
  display: 'flex',
57
60
  flexWrap: 'wrap',
58
- alignContent: 'stretch',
59
- padding: '0 4px',
61
+ justifyContent: 'space-evenly',
62
+ rowGap: 16,
63
+ padding: '8px 0',
60
64
  width: _dimensions.DIALOG_WIDTH,
61
65
  // avoid padding increasing width over defined
62
- boxSizing: 'border-box'
66
+ boxSizing: 'border-box',
67
+ variants: [{
68
+ props: {
69
+ monthsPerRow: 3
70
+ },
71
+ style: {
72
+ columnGap: 24
73
+ }
74
+ }, {
75
+ props: {
76
+ monthsPerRow: 4
77
+ },
78
+ style: {
79
+ columnGap: 0
80
+ }
81
+ }]
63
82
  });
64
83
  /**
65
84
  * Demos:
@@ -73,6 +92,7 @@ const MonthCalendarRoot = (0, _styles.styled)('div', {
73
92
  const MonthCalendar = exports.MonthCalendar = /*#__PURE__*/React.forwardRef(function MonthCalendar(inProps, ref) {
74
93
  const props = useMonthCalendarDefaultizedProps(inProps, 'MuiMonthCalendar');
75
94
  const {
95
+ autoFocus,
76
96
  className,
77
97
  classes: classesProp,
78
98
  value: valueProp,
@@ -86,11 +106,10 @@ const MonthCalendar = exports.MonthCalendar = /*#__PURE__*/React.forwardRef(func
86
106
  onChange,
87
107
  shouldDisableMonth,
88
108
  readOnly,
89
- autoFocus = false,
90
109
  onMonthFocus,
91
110
  hasFocus,
92
111
  onFocusedViewChange,
93
- monthsPerRow = 3,
112
+ monthsPerRow,
94
113
  timezone: timezoneProp,
95
114
  gridLabelId,
96
115
  slots,
@@ -217,7 +236,8 @@ const MonthCalendar = exports.MonthCalendar = /*#__PURE__*/React.forwardRef(func
217
236
  className: (0, _clsx.default)(classes.root, className),
218
237
  ownerState: ownerState,
219
238
  role: "radiogroup",
220
- "aria-labelledby": gridLabelId
239
+ "aria-labelledby": gridLabelId,
240
+ monthsPerRow: monthsPerRow
221
241
  }, other, {
222
242
  children: (0, _dateUtils.getMonthsInYear)(utils, value ?? referenceDate).map(month => {
223
243
  const monthNumber = utils.getMonth(month);
@@ -225,7 +245,7 @@ const MonthCalendar = exports.MonthCalendar = /*#__PURE__*/React.forwardRef(func
225
245
  const monthLabel = utils.format(month, 'month');
226
246
  const isSelected = monthNumber === selectedMonth;
227
247
  const isDisabled = disabled || isMonthDisabled(month);
228
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PickersMonth.PickersMonth, {
248
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_MonthCalendarButton.MonthCalendarButton, {
229
249
  selected: isSelected,
230
250
  value: monthNumber,
231
251
  onClick: handleMonthSelection,
@@ -237,9 +257,9 @@ const MonthCalendar = exports.MonthCalendar = /*#__PURE__*/React.forwardRef(func
237
257
  onBlur: handleMonthBlur,
238
258
  "aria-current": todayMonth === monthNumber ? 'date' : undefined,
239
259
  "aria-label": monthLabel,
240
- monthsPerRow: monthsPerRow,
241
260
  slots: slots,
242
261
  slotProps: slotProps,
262
+ classes: classesProp,
243
263
  children: monthText
244
264
  }, monthText);
245
265
  })