@mui/x-date-pickers 6.11.2 → 6.12.1

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 (150) hide show
  1. package/AdapterDateFns/AdapterDateFns.d.ts +2 -2
  2. package/AdapterDateFnsJalali/AdapterDateFnsJalali.d.ts +2 -2
  3. package/AdapterDayjs/AdapterDayjs.d.ts +2 -2
  4. package/AdapterLuxon/AdapterLuxon.d.ts +2 -2
  5. package/AdapterMoment/AdapterMoment.d.ts +2 -2
  6. package/AdapterMomentHijri/AdapterMomentHijri.d.ts +2 -2
  7. package/AdapterMomentJalaali/AdapterMomentJalaali.d.ts +2 -2
  8. package/CHANGELOG.md +158 -33
  9. package/DateCalendar/DateCalendar.js +3 -3
  10. package/DateCalendar/DateCalendar.types.d.ts +1 -1
  11. package/DateCalendar/DayCalendar.js +2 -2
  12. package/DateField/DateField.js +0 -4
  13. package/DatePicker/DatePicker.js +6 -1
  14. package/DateTimeField/DateTimeField.js +0 -4
  15. package/DateTimePicker/DateTimePicker.js +6 -1
  16. package/DesktopDatePicker/DesktopDatePicker.js +6 -1
  17. package/DesktopDateTimePicker/DesktopDateTimePicker.js +6 -1
  18. package/DesktopTimePicker/DesktopTimePicker.js +6 -1
  19. package/MobileDatePicker/MobileDatePicker.js +6 -1
  20. package/MobileDateTimePicker/MobileDateTimePicker.js +6 -1
  21. package/MobileTimePicker/MobileTimePicker.js +6 -1
  22. package/MonthCalendar/PickersMonth.js +1 -1
  23. package/StaticDatePicker/StaticDatePicker.js +6 -1
  24. package/StaticDateTimePicker/StaticDateTimePicker.js +6 -1
  25. package/StaticTimePicker/StaticTimePicker.js +6 -1
  26. package/TimeField/TimeField.js +0 -4
  27. package/TimePicker/TimePicker.js +6 -1
  28. package/YearCalendar/YearCalendar.js +5 -2
  29. package/dateTimeViewRenderers/dateTimeViewRenderers.d.ts +1 -1
  30. package/dateTimeViewRenderers/dateTimeViewRenderers.js +3 -0
  31. package/dateViewRenderers/dateViewRenderers.d.ts +1 -1
  32. package/dateViewRenderers/dateViewRenderers.js +2 -0
  33. package/index.js +1 -1
  34. package/internals/components/PickersPopper.d.ts +5 -3
  35. package/internals/components/PickersPopper.js +58 -30
  36. package/internals/demo/DemoContainer.d.ts +8 -0
  37. package/internals/demo/DemoContainer.js +9 -0
  38. package/internals/hooks/useDefaultReduceAnimations.d.ts +1 -1
  39. package/internals/hooks/useDefaultReduceAnimations.js +7 -2
  40. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +1 -1
  41. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +2 -2
  42. package/internals/hooks/useField/useField.js +6 -6
  43. package/internals/hooks/useField/useField.utils.d.ts +0 -1
  44. package/internals/hooks/useField/useField.utils.js +0 -48
  45. package/internals/hooks/useField/useFieldState.js +5 -25
  46. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +2 -2
  47. package/internals/hooks/usePicker/usePicker.d.ts +1 -1
  48. package/internals/hooks/usePicker/usePicker.types.d.ts +3 -3
  49. package/internals/hooks/usePicker/usePickerValue.js +1 -1
  50. package/internals/hooks/usePicker/usePickerViews.d.ts +11 -6
  51. package/internals/hooks/usePicker/usePickerViews.js +1 -1
  52. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +1 -1
  53. package/internals/hooks/useValidation.d.ts +2 -4
  54. package/internals/hooks/useValueWithTimezone.js +2 -2
  55. package/internals/hooks/useViews.js +1 -1
  56. package/internals/models/props/basePickerProps.d.ts +1 -1
  57. package/legacy/DateCalendar/DateCalendar.js +3 -3
  58. package/legacy/DateCalendar/DayCalendar.js +2 -2
  59. package/legacy/DateField/DateField.js +0 -4
  60. package/legacy/DatePicker/DatePicker.js +6 -1
  61. package/legacy/DateTimeField/DateTimeField.js +0 -4
  62. package/legacy/DateTimePicker/DateTimePicker.js +6 -1
  63. package/legacy/DesktopDatePicker/DesktopDatePicker.js +6 -1
  64. package/legacy/DesktopDateTimePicker/DesktopDateTimePicker.js +6 -1
  65. package/legacy/DesktopTimePicker/DesktopTimePicker.js +6 -1
  66. package/legacy/MobileDatePicker/MobileDatePicker.js +6 -1
  67. package/legacy/MobileDateTimePicker/MobileDateTimePicker.js +6 -1
  68. package/legacy/MobileTimePicker/MobileTimePicker.js +6 -1
  69. package/legacy/MonthCalendar/PickersMonth.js +1 -1
  70. package/legacy/StaticDatePicker/StaticDatePicker.js +6 -1
  71. package/legacy/StaticDateTimePicker/StaticDateTimePicker.js +6 -1
  72. package/legacy/StaticTimePicker/StaticTimePicker.js +6 -1
  73. package/legacy/TimeField/TimeField.js +0 -4
  74. package/legacy/TimePicker/TimePicker.js +6 -1
  75. package/legacy/YearCalendar/YearCalendar.js +5 -2
  76. package/legacy/dateTimeViewRenderers/dateTimeViewRenderers.js +3 -0
  77. package/legacy/dateViewRenderers/dateViewRenderers.js +2 -0
  78. package/legacy/index.js +1 -1
  79. package/legacy/internals/components/PickersPopper.js +54 -30
  80. package/legacy/internals/demo/DemoContainer.js +9 -0
  81. package/legacy/internals/hooks/useDefaultReduceAnimations.js +7 -2
  82. package/legacy/internals/hooks/useDesktopPicker/useDesktopPicker.js +1 -1
  83. package/legacy/internals/hooks/useField/useField.js +6 -6
  84. package/legacy/internals/hooks/useField/useField.utils.js +0 -52
  85. package/legacy/internals/hooks/useField/useFieldState.js +4 -24
  86. package/legacy/internals/hooks/usePicker/usePickerValue.js +1 -1
  87. package/legacy/internals/hooks/usePicker/usePickerViews.js +1 -1
  88. package/legacy/internals/hooks/useValueWithTimezone.js +2 -2
  89. package/legacy/internals/hooks/useViews.js +1 -1
  90. package/legacy/tests/describeValue/testControlledUnControlled.js +1 -1
  91. package/legacy/timeViewRenderers/timeViewRenderers.js +6 -0
  92. package/models/adapters.d.ts +2 -1
  93. package/modern/DateCalendar/DateCalendar.js +1 -1
  94. package/modern/DateField/DateField.js +0 -4
  95. package/modern/DatePicker/DatePicker.js +6 -1
  96. package/modern/DateTimeField/DateTimeField.js +0 -4
  97. package/modern/DateTimePicker/DateTimePicker.js +6 -1
  98. package/modern/DesktopDatePicker/DesktopDatePicker.js +6 -1
  99. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +6 -1
  100. package/modern/DesktopTimePicker/DesktopTimePicker.js +6 -1
  101. package/modern/MobileDatePicker/MobileDatePicker.js +6 -1
  102. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +6 -1
  103. package/modern/MobileTimePicker/MobileTimePicker.js +6 -1
  104. package/modern/StaticDatePicker/StaticDatePicker.js +6 -1
  105. package/modern/StaticDateTimePicker/StaticDateTimePicker.js +6 -1
  106. package/modern/StaticTimePicker/StaticTimePicker.js +6 -1
  107. package/modern/TimeField/TimeField.js +0 -4
  108. package/modern/TimePicker/TimePicker.js +6 -1
  109. package/modern/YearCalendar/YearCalendar.js +4 -1
  110. package/modern/dateTimeViewRenderers/dateTimeViewRenderers.js +3 -0
  111. package/modern/dateViewRenderers/dateViewRenderers.js +2 -0
  112. package/modern/index.js +1 -1
  113. package/modern/internals/components/PickersPopper.js +56 -28
  114. package/modern/internals/demo/DemoContainer.js +9 -0
  115. package/modern/internals/hooks/useDefaultReduceAnimations.js +7 -2
  116. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +1 -1
  117. package/modern/internals/hooks/useField/useField.utils.js +0 -48
  118. package/modern/internals/hooks/useField/useFieldState.js +4 -24
  119. package/modern/timeViewRenderers/timeViewRenderers.js +6 -0
  120. package/node/DateCalendar/DateCalendar.js +1 -1
  121. package/node/DateField/DateField.js +0 -4
  122. package/node/DatePicker/DatePicker.js +6 -1
  123. package/node/DateTimeField/DateTimeField.js +0 -4
  124. package/node/DateTimePicker/DateTimePicker.js +6 -1
  125. package/node/DesktopDatePicker/DesktopDatePicker.js +6 -1
  126. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +6 -1
  127. package/node/DesktopTimePicker/DesktopTimePicker.js +6 -1
  128. package/node/MobileDatePicker/MobileDatePicker.js +6 -1
  129. package/node/MobileDateTimePicker/MobileDateTimePicker.js +6 -1
  130. package/node/MobileTimePicker/MobileTimePicker.js +6 -1
  131. package/node/StaticDatePicker/StaticDatePicker.js +6 -1
  132. package/node/StaticDateTimePicker/StaticDateTimePicker.js +6 -1
  133. package/node/StaticTimePicker/StaticTimePicker.js +6 -1
  134. package/node/TimeField/TimeField.js +0 -4
  135. package/node/TimePicker/TimePicker.js +6 -1
  136. package/node/YearCalendar/YearCalendar.js +4 -1
  137. package/node/dateTimeViewRenderers/dateTimeViewRenderers.js +3 -0
  138. package/node/dateViewRenderers/dateViewRenderers.js +2 -0
  139. package/node/index.js +1 -1
  140. package/node/internals/components/PickersPopper.js +56 -28
  141. package/node/internals/demo/DemoContainer.js +9 -0
  142. package/node/internals/hooks/useDefaultReduceAnimations.js +9 -4
  143. package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +1 -1
  144. package/node/internals/hooks/useField/useField.utils.js +1 -50
  145. package/node/internals/hooks/useField/useFieldState.js +3 -23
  146. package/node/timeViewRenderers/timeViewRenderers.js +6 -0
  147. package/package.json +3 -3
  148. package/tests/describeValue/testControlledUnControlled.js +1 -1
  149. package/timeViewRenderers/timeViewRenderers.d.ts +3 -3
  150. package/timeViewRenderers/timeViewRenderers.js +6 -0
package/legacy/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v6.11.2
2
+ * @mui/x-date-pickers v6.12.1
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -1,5 +1,7 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
2
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
+ var _excluded = ["PaperComponent", "popperPlacement", "ownerState", "children", "paperSlotProps", "paperClasses", "onPaperClick", "onPaperTouchStart"];
3
5
  import * as React from 'react';
4
6
  import { useSlotProps } from '@mui/base/utils';
5
7
  import Grow from '@mui/material/Grow';
@@ -42,9 +44,9 @@ var PickersPopperPaper = styled(MuiPaper, {
42
44
  })(function (_ref2) {
43
45
  var ownerState = _ref2.ownerState;
44
46
  return _extends({
45
- transformOrigin: 'top center',
46
- outline: 0
47
- }, ownerState.placement === 'top' && {
47
+ outline: 0,
48
+ transformOrigin: 'top center'
49
+ }, ownerState.placement.includes('top') && {
48
50
  transformOrigin: 'bottom center'
49
51
  });
50
52
  });
@@ -163,6 +165,45 @@ function useClickAwayListener(active, onClickAway) {
163
165
  }, [active, handleClickAway]);
164
166
  return [nodeRef, handleSynthetic, handleSynthetic];
165
167
  }
168
+ var PickersPopperPaperWrapper = /*#__PURE__*/React.forwardRef(function (props, ref) {
169
+ var PaperComponent = props.PaperComponent,
170
+ popperPlacement = props.popperPlacement,
171
+ inOwnerState = props.ownerState,
172
+ children = props.children,
173
+ paperSlotProps = props.paperSlotProps,
174
+ paperClasses = props.paperClasses,
175
+ onPaperClick = props.onPaperClick,
176
+ onPaperTouchStart = props.onPaperTouchStart,
177
+ other = _objectWithoutProperties(props, _excluded);
178
+ var ownerState = _extends({}, inOwnerState, {
179
+ placement: popperPlacement
180
+ });
181
+ var paperProps = useSlotProps({
182
+ elementType: PaperComponent,
183
+ externalSlotProps: paperSlotProps,
184
+ additionalProps: {
185
+ tabIndex: -1,
186
+ elevation: 8,
187
+ ref: ref
188
+ },
189
+ className: paperClasses,
190
+ ownerState: ownerState
191
+ });
192
+ return /*#__PURE__*/_jsx(PaperComponent, _extends({}, other, paperProps, {
193
+ onClick: function onClick(event) {
194
+ var _paperProps$onClick;
195
+ onPaperClick(event);
196
+ (_paperProps$onClick = paperProps.onClick) == null || _paperProps$onClick.call(paperProps, event);
197
+ },
198
+ onTouchStart: function onTouchStart(event) {
199
+ var _paperProps$onTouchSt;
200
+ onPaperTouchStart(event);
201
+ (_paperProps$onTouchSt = paperProps.onTouchStart) == null || _paperProps$onTouchSt.call(paperProps, event);
202
+ },
203
+ ownerState: ownerState,
204
+ children: children
205
+ }));
206
+ });
166
207
  export function PickersPopper(inProps) {
167
208
  var _slots$desktopTransit, _slots$desktopTrapFoc, _slots$desktopPaper, _slots$popper;
168
209
  var props = useThemeProps({
@@ -233,18 +274,6 @@ export function PickersPopper(inProps) {
233
274
  var Transition = ((_slots$desktopTransit = slots == null ? void 0 : slots.desktopTransition) != null ? _slots$desktopTransit : reduceAnimations) ? Fade : Grow;
234
275
  var TrapFocus = (_slots$desktopTrapFoc = slots == null ? void 0 : slots.desktopTrapFocus) != null ? _slots$desktopTrapFoc : MuiTrapFocus;
235
276
  var Paper = (_slots$desktopPaper = slots == null ? void 0 : slots.desktopPaper) != null ? _slots$desktopPaper : PickersPopperPaper;
236
- var paperProps = useSlotProps({
237
- elementType: Paper,
238
- externalSlotProps: slotProps == null ? void 0 : slotProps.desktopPaper,
239
- additionalProps: {
240
- tabIndex: -1,
241
- elevation: 8,
242
- ref: handlePaperRef
243
- },
244
- className: classes.paper,
245
- ownerState: {} // Is overridden below to use `placement
246
- });
247
-
248
277
  var Popper = (_slots$popper = slots == null ? void 0 : slots.popper) != null ? _slots$popper : PickersPopperRoot;
249
278
  var popperProps = useSlotProps({
250
279
  elementType: Popper,
@@ -278,22 +307,17 @@ export function PickersPopper(inProps) {
278
307
  }
279
308
  }, slotProps == null ? void 0 : slotProps.desktopTrapFocus, {
280
309
  children: /*#__PURE__*/_jsx(Transition, _extends({}, TransitionProps, slotProps == null ? void 0 : slotProps.desktopTransition, {
281
- children: /*#__PURE__*/_jsx(Paper, _extends({}, paperProps, {
282
- onClick: function onClick(event) {
283
- var _paperProps$onClick;
284
- onPaperClick(event);
285
- (_paperProps$onClick = paperProps.onClick) == null ? void 0 : _paperProps$onClick.call(paperProps, event);
286
- },
287
- onTouchStart: function onTouchStart(event) {
288
- var _paperProps$onTouchSt;
289
- onPaperTouchStart(event);
290
- (_paperProps$onTouchSt = paperProps.onTouchStart) == null ? void 0 : _paperProps$onTouchSt.call(paperProps, event);
291
- },
292
- ownerState: _extends({}, ownerState, {
293
- placement: popperPlacement
294
- }),
310
+ children: /*#__PURE__*/_jsx(PickersPopperPaperWrapper, {
311
+ PaperComponent: Paper,
312
+ ownerState: ownerState,
313
+ popperPlacement: popperPlacement,
314
+ ref: handlePaperRef,
315
+ onPaperClick: onPaperClick,
316
+ onPaperTouchStart: onPaperTouchStart,
317
+ paperClasses: classes.paper,
318
+ paperSlotProps: slotProps == null ? void 0 : slotProps.desktopPaper,
295
319
  children: _children
296
- }))
320
+ })
297
321
  }))
298
322
  }));
299
323
  }
@@ -33,6 +33,10 @@ var getSupportedSectionFromChildName = function getSupportedSectionFromChildName
33
33
  }
34
34
  return 'time';
35
35
  };
36
+ /**
37
+ * WARNING: This is an internal component used in documentation to achieve a desired layout.
38
+ * Please do not use it in your application.
39
+ */
36
40
  export function DemoItem(props) {
37
41
  var label = props.label,
38
42
  children = props.children,
@@ -59,6 +63,11 @@ export function DemoItem(props) {
59
63
  }), children]
60
64
  });
61
65
  }
66
+
67
+ /**
68
+ * WARNING: This is an internal component used in documentation to achieve a desired layout.
69
+ * Please do not use it in your application.
70
+ */
62
71
  export function DemoContainer(props) {
63
72
  var children = props.children,
64
73
  components = props.components,
@@ -1,9 +1,14 @@
1
1
  import useMediaQuery from '@mui/material/useMediaQuery';
2
2
  var PREFERS_REDUCED_MOTION = '@media (prefers-reduced-motion: reduce)';
3
- export var defaultReduceAnimations = typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent);
3
+
4
+ // detect if user agent has Android version < 10 or iOS version < 13
5
+ var mobileVersionMatches = typeof navigator !== 'undefined' && navigator.userAgent.match(/android\s(\d+)|OS\s(\d+)/i);
6
+ var androidVersion = mobileVersionMatches && mobileVersionMatches[1] ? parseInt(mobileVersionMatches[1], 10) : null;
7
+ var iOSVersion = mobileVersionMatches && mobileVersionMatches[2] ? parseInt(mobileVersionMatches[2], 10) : null;
8
+ export var slowAnimationDevices = androidVersion && androidVersion < 10 || iOSVersion && iOSVersion < 13 || false;
4
9
  export var useDefaultReduceAnimations = function useDefaultReduceAnimations() {
5
10
  var prefersReduced = useMediaQuery(PREFERS_REDUCED_MOTION, {
6
11
  defaultMatches: false
7
12
  });
8
- return prefersReduced || defaultReduceAnimations;
13
+ return prefersReduced || slowAnimationDevices;
9
14
  };
@@ -78,7 +78,7 @@ export var useDesktopPicker = function useDesktopPicker(_ref) {
78
78
  externalSlotProps: innerSlotProps == null ? void 0 : innerSlotProps.openPickerButton,
79
79
  additionalProps: {
80
80
  disabled: disabled || readOnly,
81
- onClick: actions.onOpen,
81
+ onClick: open ? actions.onClose : actions.onOpen,
82
82
  'aria-label': getOpenDialogAriaText(pickerFieldProps.value, utils),
83
83
  edge: inputAdornmentProps.position
84
84
  },
@@ -89,11 +89,11 @@ export var useField = function useField(params) {
89
89
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
90
90
  args[_key] = arguments[_key];
91
91
  }
92
- onClick == null ? void 0 : onClick.apply(void 0, _toConsumableArray(args));
92
+ onClick == null || onClick.apply(void 0, _toConsumableArray(args));
93
93
  syncSelectionFromDOM();
94
94
  });
95
95
  var handleInputMouseUp = useEventCallback(function (event) {
96
- onMouseUp == null ? void 0 : onMouseUp(event);
96
+ onMouseUp == null || onMouseUp(event);
97
97
 
98
98
  // Without this, the browser will remove the selected when clicking inside an already-selected section.
99
99
  event.preventDefault();
@@ -102,7 +102,7 @@ export var useField = function useField(params) {
102
102
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
103
103
  args[_key2] = arguments[_key2];
104
104
  }
105
- onFocus == null ? void 0 : onFocus.apply(void 0, _toConsumableArray(args));
105
+ onFocus == null || onFocus.apply(void 0, _toConsumableArray(args));
106
106
  // The ref is guaranteed to be resolved at this point.
107
107
  var input = inputRef.current;
108
108
  window.clearTimeout(focusTimeoutRef.current);
@@ -127,11 +127,11 @@ export var useField = function useField(params) {
127
127
  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
128
128
  args[_key3] = arguments[_key3];
129
129
  }
130
- onBlur == null ? void 0 : onBlur.apply(void 0, _toConsumableArray(args));
130
+ onBlur == null || onBlur.apply(void 0, _toConsumableArray(args));
131
131
  _setSelectedSections(null);
132
132
  });
133
133
  var handleInputPaste = useEventCallback(function (event) {
134
- onPaste == null ? void 0 : onPaste(event);
134
+ onPaste == null || onPaste(event);
135
135
  if (readOnly) {
136
136
  event.preventDefault();
137
137
  return;
@@ -212,7 +212,7 @@ export var useField = function useField(params) {
212
212
  });
213
213
  });
214
214
  var handleInputKeyDown = useEventCallback(function (event) {
215
- onKeyDown == null ? void 0 : onKeyDown(event);
215
+ onKeyDown == null || onKeyDown(event);
216
216
 
217
217
  // eslint-disable-next-line default-case
218
218
  switch (true) {
@@ -679,58 +679,6 @@ export var mergeDateIntoReferenceDate = function mergeDateIntoReferenceDate(util
679
679
  export var isAndroid = function isAndroid() {
680
680
  return navigator.userAgent.toLowerCase().indexOf('android') > -1;
681
681
  };
682
- export var clampDaySectionIfPossible = function clampDaySectionIfPossible(utils, timezone, sections, sectionsValueBoundaries) {
683
- // We can only clamp the day value if:
684
- // 1. if all the sections are filled (except the week day section which can be empty)
685
- // 2. there is a day section
686
- var canClamp = sections.every(function (section) {
687
- return section.type === 'weekDay' || section.value !== '';
688
- }) && sections.some(function (section) {
689
- return section.type === 'day';
690
- });
691
- if (!canClamp) {
692
- return null;
693
- }
694
-
695
- // We try to generate a valid date representing the start of the month of the invalid date typed by the user.
696
- var sectionsForStartOfMonth = sections.map(function (section) {
697
- if (section.type !== 'day') {
698
- return section;
699
- }
700
- var dayBoundaries = sectionsValueBoundaries.day({
701
- currentDate: null,
702
- format: section.format,
703
- contentType: section.contentType
704
- });
705
- return _extends({}, section, {
706
- value: cleanDigitSectionValue(utils, timezone, dayBoundaries.minimum, dayBoundaries, section)
707
- });
708
- });
709
- var startOfMonth = getDateFromDateSections(utils, sectionsForStartOfMonth);
710
-
711
- // Even the start of the month is invalid, we probably have other invalid sections, the clamping failed.
712
- if (startOfMonth == null || !utils.isValid(startOfMonth)) {
713
- return null;
714
- }
715
-
716
- // The only invalid section was the day of the month, we replace its value with the maximum boundary for the correct month.
717
- return sections.map(function (section) {
718
- if (section.type !== 'day') {
719
- return section;
720
- }
721
- var dayBoundaries = sectionsValueBoundaries.day({
722
- currentDate: startOfMonth,
723
- format: section.format,
724
- contentType: section.contentType
725
- });
726
- if (Number(section.value) <= dayBoundaries.maximum) {
727
- return section;
728
- }
729
- return _extends({}, section, {
730
- value: dayBoundaries.maximum.toString()
731
- });
732
- });
733
- };
734
682
  export var getSectionOrder = function getSectionOrder(sections, isRTL) {
735
683
  var neighbors = {};
736
684
  if (!isRTL) {
@@ -5,7 +5,7 @@ import * as React from 'react';
5
5
  import useControlled from '@mui/utils/useControlled';
6
6
  import { useTheme } from '@mui/material/styles';
7
7
  import { useUtils, useLocaleText, useLocalizationContext } from '../useUtils';
8
- import { addPositionPropertiesToSections, splitFormatIntoSections, clampDaySectionIfPossible, mergeDateIntoReferenceDate, getSectionsBoundaries, validateSections, getDateFromDateSections } from './useField.utils';
8
+ import { addPositionPropertiesToSections, splitFormatIntoSections, mergeDateIntoReferenceDate, getSectionsBoundaries, validateSections, getDateFromDateSections } from './useField.utils';
9
9
  import { useValueWithTimezone } from '../useValueWithTimezone';
10
10
  import { getSectionTypeGranularity } from '../../utils/getDefaultReferenceDate';
11
11
  export var useFieldState = function useFieldState(params) {
@@ -90,7 +90,7 @@ export var useFieldState = function useFieldState(params) {
90
90
  innerSetSelectedSections = _useControlled2[1];
91
91
  var setSelectedSections = function setSelectedSections(newSelectedSections) {
92
92
  innerSetSelectedSections(newSelectedSections);
93
- onSelectedSectionsChange == null ? void 0 : onSelectedSectionsChange(newSelectedSections);
93
+ onSelectedSectionsChange == null || onSelectedSectionsChange(newSelectedSections);
94
94
  setState(function (prevState) {
95
95
  return _extends({}, prevState, {
96
96
  selectedSectionQuery: null
@@ -233,20 +233,6 @@ export var useFieldState = function useFieldState(params) {
233
233
  var newSections = setSectionValue(selectedSectionIndexes.startIndex, newSectionValue);
234
234
  var newActiveDateSections = activeDateManager.getSections(newSections);
235
235
  var newActiveDate = getDateFromDateSections(utils, newActiveDateSections);
236
- var shouldRegenSections = false;
237
-
238
- /**
239
- * If the date is invalid,
240
- * Then we can try to clamp the day section to see if that produces a valid date.
241
- * This can be useful if the month has fewer days than the day value currently provided.
242
- */
243
- if (!utils.isValid(newActiveDate)) {
244
- var clampedSections = clampDaySectionIfPossible(utils, timezone, newActiveDateSections, sectionsValueBoundaries);
245
- if (clampedSections != null) {
246
- shouldRegenSections = true;
247
- newActiveDate = getDateFromDateSections(utils, clampedSections);
248
- }
249
- }
250
236
  var values;
251
237
  var shouldPublish;
252
238
 
@@ -264,23 +250,17 @@ export var useFieldState = function useFieldState(params) {
264
250
  shouldPublish = (newActiveDate != null && !utils.isValid(newActiveDate)) !== (activeDateManager.date != null && !utils.isValid(activeDateManager.date));
265
251
  }
266
252
 
267
- /**
268
- * If the value has been modified (to clamp the day).
269
- * Then we need to re-generate the sections to make sure they also have this change.
270
- */
271
- var sections = shouldRegenSections ? getSectionsFromValue(values.value, state.sections) : newSections;
272
-
273
253
  /**
274
254
  * Publish or update the internal state with the new value and sections.
275
255
  */
276
256
  if (shouldPublish) {
277
257
  return publishValue(_extends({}, values, {
278
- sections: sections
258
+ sections: newSections
279
259
  }));
280
260
  }
281
261
  return setState(function (prevState) {
282
262
  return _extends({}, prevState, values, {
283
- sections: sections,
263
+ sections: newSections,
284
264
  tempValueStrAndroid: null
285
265
  });
286
266
  });
@@ -315,7 +315,7 @@ export var usePickerValue = function usePickerValue(_ref) {
315
315
  });
316
316
  var handleFieldSelectedSectionsChange = useEventCallback(function (newSelectedSections) {
317
317
  setSelectedSections(newSelectedSections);
318
- onSelectedSectionsChange == null ? void 0 : onSelectedSectionsChange(newSelectedSections);
318
+ onSelectedSectionsChange == null || onSelectedSectionsChange(newSelectedSections);
319
319
  });
320
320
  var actions = {
321
321
  onClear: handleClear,
@@ -107,7 +107,7 @@ export var usePickerViews = function usePickerViews(_ref) {
107
107
  setTimeout(function () {
108
108
  // focusing the input before the range selection is done
109
109
  // calling `onSelectedSectionsChange` outside of timeout results in an inconsistent behavior between Safari And Chrome
110
- inputRef == null ? void 0 : inputRef.current.focus();
110
+ inputRef == null || inputRef.current.focus();
111
111
  onSelectedSectionsChange(view);
112
112
  });
113
113
  }
@@ -36,7 +36,7 @@ export var useValueWithTimezone = function useValueWithTimezone(_ref) {
36
36
  for (var _len = arguments.length, otherParams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
37
37
  otherParams[_key - 1] = arguments[_key];
38
38
  }
39
- onChange == null ? void 0 : onChange.apply(void 0, [newValueWithInputTimezone].concat(otherParams));
39
+ onChange == null || onChange.apply(void 0, [newValueWithInputTimezone].concat(otherParams));
40
40
  });
41
41
  return {
42
42
  value: valueWithTimezoneToRender,
@@ -69,7 +69,7 @@ export var useControlledValueWithTimezone = function useControlledValueWithTimez
69
69
  for (var _len2 = arguments.length, otherParams = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
70
70
  otherParams[_key2 - 1] = arguments[_key2];
71
71
  }
72
- onChangeProp == null ? void 0 : onChangeProp.apply(void 0, [newValue].concat(otherParams));
72
+ onChangeProp == null || onChangeProp.apply(void 0, [newValue].concat(otherParams));
73
73
  });
74
74
  return useValueWithTimezone({
75
75
  timezone: timezoneProp,
@@ -72,7 +72,7 @@ export function useViews(_ref) {
72
72
  );
73
73
  }
74
74
 
75
- onFocusedViewChange == null ? void 0 : onFocusedViewChange(viewToFocus, hasFocus);
75
+ onFocusedViewChange == null || onFocusedViewChange(viewToFocus, hasFocus);
76
76
  });
77
77
  var handleChangeView = useEventCallback(function (newView) {
78
78
  if (newView === view) {
@@ -76,7 +76,7 @@ export var testControlledUnControlled = function testControlledUnControlled(Elem
76
76
  setValue = _React$useState2[1];
77
77
  var handleChange = React.useCallback(function (newValue) {
78
78
  setValue(newValue);
79
- props == null ? void 0 : props.onChange(newValue);
79
+ props == null || props.onChange(newValue);
80
80
  }, [props]);
81
81
  return {
82
82
  value: value,
@@ -12,6 +12,7 @@ export var renderTimeViewClock = function renderTimeViewClock(_ref) {
12
12
  views = _ref.views,
13
13
  value = _ref.value,
14
14
  defaultValue = _ref.defaultValue,
15
+ referenceDate = _ref.referenceDate,
15
16
  onChange = _ref.onChange,
16
17
  className = _ref.className,
17
18
  classes = _ref.classes,
@@ -43,6 +44,7 @@ export var renderTimeViewClock = function renderTimeViewClock(_ref) {
43
44
  views: views.filter(isTimeView),
44
45
  value: value,
45
46
  defaultValue: defaultValue,
47
+ referenceDate: referenceDate,
46
48
  onChange: onChange,
47
49
  className: className,
48
50
  classes: classes,
@@ -76,6 +78,7 @@ export var renderDigitalClockTimeView = function renderDigitalClockTimeView(_ref
76
78
  views = _ref2.views,
77
79
  value = _ref2.value,
78
80
  defaultValue = _ref2.defaultValue,
81
+ referenceDate = _ref2.referenceDate,
79
82
  onChange = _ref2.onChange,
80
83
  className = _ref2.className,
81
84
  classes = _ref2.classes,
@@ -107,6 +110,7 @@ export var renderDigitalClockTimeView = function renderDigitalClockTimeView(_ref
107
110
  views: views.filter(isTimeView),
108
111
  value: value,
109
112
  defaultValue: defaultValue,
113
+ referenceDate: referenceDate,
110
114
  onChange: onChange,
111
115
  className: className,
112
116
  classes: classes,
@@ -140,6 +144,7 @@ export var renderMultiSectionDigitalClockTimeView = function renderMultiSectionD
140
144
  views = _ref3.views,
141
145
  value = _ref3.value,
142
146
  defaultValue = _ref3.defaultValue,
147
+ referenceDate = _ref3.referenceDate,
143
148
  onChange = _ref3.onChange,
144
149
  className = _ref3.className,
145
150
  classes = _ref3.classes,
@@ -171,6 +176,7 @@ export var renderMultiSectionDigitalClockTimeView = function renderMultiSectionD
171
176
  views: views.filter(isTimeView),
172
177
  value: value,
173
178
  defaultValue: defaultValue,
179
+ referenceDate: referenceDate,
174
180
  onChange: onChange,
175
181
  className: className,
176
182
  classes: classes,
@@ -171,6 +171,7 @@ export type AdapterOptions<TLocale, TInstance> = {
171
171
  formats?: Partial<AdapterFormats>;
172
172
  locale?: TLocale;
173
173
  } & PropertyIfNotNever<'instance', TInstance>;
174
+ export type DateBuilderReturnType<T extends string | null | undefined, TDate> = T extends null ? null : TDate;
174
175
  export interface MuiPickersAdapter<TDate, TLocale = any> {
175
176
  /**
176
177
  * A boolean confirming that the adapter used is an MUI adapter.
@@ -212,7 +213,7 @@ export interface MuiPickersAdapter<TDate, TLocale = any> {
212
213
  * @param {PickersTimezone} timezone The timezone of the date.
213
214
  * @returns {TDate | null} The parsed date.
214
215
  */
215
- dateWithTimezone(value: string | null | undefined, timezone: PickersTimezone): TDate | null;
216
+ dateWithTimezone<T extends string | null | undefined>(value: T, timezone: PickersTimezone): DateBuilderReturnType<T, TDate>;
216
217
  /**
217
218
  * Extracts the timezone from a date.
218
219
  * @template TDate
@@ -485,7 +485,7 @@ process.env.NODE_ENV !== "production" ? DateCalendar.propTypes = {
485
485
  readOnly: PropTypes.bool,
486
486
  /**
487
487
  * If `true`, disable heavy animations.
488
- * @default `@media(prefers-reduced-motion: reduce)` || typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
488
+ * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
489
489
  */
490
490
  reduceAnimations: PropTypes.bool,
491
491
  /**
@@ -207,10 +207,6 @@ process.env.NODE_ENV !== "production" ? DateField.propTypes = {
207
207
  * @param {FieldChangeHandlerContext<TError>} context The context containing the validation result of the current value.
208
208
  */
209
209
  onChange: PropTypes.func,
210
- /**
211
- * @ignore
212
- */
213
- onClick: PropTypes.func,
214
210
  /**
215
211
  * Callback fired when the error associated to the current value changes.
216
212
  * @template TValue The value type. Will be either the same type as `value` or `null`. Can be in `[start, end]` format in case of range value.
@@ -242,9 +242,14 @@ process.env.NODE_ENV !== "production" ? DatePicker.propTypes = {
242
242
  readOnly: PropTypes.bool,
243
243
  /**
244
244
  * If `true`, disable heavy animations.
245
- * @default `@media(prefers-reduced-motion: reduce)` || typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
245
+ * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
246
246
  */
247
247
  reduceAnimations: PropTypes.bool,
248
+ /**
249
+ * The date used to generate the new value when both `value` and `defaultValue` are empty.
250
+ * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
251
+ */
252
+ referenceDate: PropTypes.any,
248
253
  /**
249
254
  * Component displaying when passed `loading` true.
250
255
  * @returns {React.ReactNode} The node to render when loading.
@@ -240,10 +240,6 @@ process.env.NODE_ENV !== "production" ? DateTimeField.propTypes = {
240
240
  * @param {FieldChangeHandlerContext<TError>} context The context containing the validation result of the current value.
241
241
  */
242
242
  onChange: PropTypes.func,
243
- /**
244
- * @ignore
245
- */
246
- onClick: PropTypes.func,
247
243
  /**
248
244
  * Callback fired when the error associated to the current value changes.
249
245
  * @template TValue The value type. Will be either the same type as `value` or `null`. Can be in `[start, end]` format in case of range value.
@@ -280,9 +280,14 @@ process.env.NODE_ENV !== "production" ? DateTimePicker.propTypes = {
280
280
  readOnly: PropTypes.bool,
281
281
  /**
282
282
  * If `true`, disable heavy animations.
283
- * @default `@media(prefers-reduced-motion: reduce)` || typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
283
+ * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
284
284
  */
285
285
  reduceAnimations: PropTypes.bool,
286
+ /**
287
+ * The date used to generate the new value when both `value` and `defaultValue` are empty.
288
+ * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
289
+ */
290
+ referenceDate: PropTypes.any,
286
291
  /**
287
292
  * Component displaying when passed `loading` true.
288
293
  * @returns {React.ReactNode} The node to render when loading.
@@ -256,9 +256,14 @@ DesktopDatePicker.propTypes = {
256
256
  readOnly: PropTypes.bool,
257
257
  /**
258
258
  * If `true`, disable heavy animations.
259
- * @default `@media(prefers-reduced-motion: reduce)` || typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
259
+ * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
260
260
  */
261
261
  reduceAnimations: PropTypes.bool,
262
+ /**
263
+ * The date used to generate the new value when both `value` and `defaultValue` are empty.
264
+ * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
265
+ */
266
+ referenceDate: PropTypes.any,
262
267
  /**
263
268
  * Component displaying when passed `loading` true.
264
269
  * @returns {React.ReactNode} The node to render when loading.
@@ -330,9 +330,14 @@ DesktopDateTimePicker.propTypes = {
330
330
  readOnly: PropTypes.bool,
331
331
  /**
332
332
  * If `true`, disable heavy animations.
333
- * @default `@media(prefers-reduced-motion: reduce)` || typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
333
+ * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
334
334
  */
335
335
  reduceAnimations: PropTypes.bool,
336
+ /**
337
+ * The date used to generate the new value when both `value` and `defaultValue` are empty.
338
+ * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
339
+ */
340
+ referenceDate: PropTypes.any,
336
341
  /**
337
342
  * Component displaying when passed `loading` true.
338
343
  * @returns {React.ReactNode} The node to render when loading.
@@ -252,9 +252,14 @@ DesktopTimePicker.propTypes = {
252
252
  readOnly: PropTypes.bool,
253
253
  /**
254
254
  * If `true`, disable heavy animations.
255
- * @default `@media(prefers-reduced-motion: reduce)` || typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
255
+ * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
256
256
  */
257
257
  reduceAnimations: PropTypes.bool,
258
+ /**
259
+ * The date used to generate the new value when both `value` and `defaultValue` are empty.
260
+ * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
261
+ */
262
+ referenceDate: PropTypes.any,
258
263
  /**
259
264
  * The currently selected sections.
260
265
  * This prop accept four formats:
@@ -253,9 +253,14 @@ MobileDatePicker.propTypes = {
253
253
  readOnly: PropTypes.bool,
254
254
  /**
255
255
  * If `true`, disable heavy animations.
256
- * @default `@media(prefers-reduced-motion: reduce)` || typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
256
+ * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
257
257
  */
258
258
  reduceAnimations: PropTypes.bool,
259
+ /**
260
+ * The date used to generate the new value when both `value` and `defaultValue` are empty.
261
+ * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
262
+ */
263
+ referenceDate: PropTypes.any,
259
264
  /**
260
265
  * Component displaying when passed `loading` true.
261
266
  * @returns {React.ReactNode} The node to render when loading.
@@ -302,9 +302,14 @@ MobileDateTimePicker.propTypes = {
302
302
  readOnly: PropTypes.bool,
303
303
  /**
304
304
  * If `true`, disable heavy animations.
305
- * @default `@media(prefers-reduced-motion: reduce)` || typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
305
+ * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
306
306
  */
307
307
  reduceAnimations: PropTypes.bool,
308
+ /**
309
+ * The date used to generate the new value when both `value` and `defaultValue` are empty.
310
+ * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
311
+ */
312
+ referenceDate: PropTypes.any,
308
313
  /**
309
314
  * Component displaying when passed `loading` true.
310
315
  * @returns {React.ReactNode} The node to render when loading.
@@ -230,9 +230,14 @@ MobileTimePicker.propTypes = {
230
230
  readOnly: PropTypes.bool,
231
231
  /**
232
232
  * If `true`, disable heavy animations.
233
- * @default `@media(prefers-reduced-motion: reduce)` || typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
233
+ * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13
234
234
  */
235
235
  reduceAnimations: PropTypes.bool,
236
+ /**
237
+ * The date used to generate the new value when both `value` and `defaultValue` are empty.
238
+ * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`.
239
+ */
240
+ referenceDate: PropTypes.any,
236
241
  /**
237
242
  * The currently selected sections.
238
243
  * This prop accept four formats: