@mui/x-date-pickers 8.3.1 → 8.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/DateCalendar/DateCalendar.js +9 -6
  3. package/DateCalendar/DateCalendar.types.d.ts +1 -1
  4. package/DateCalendar/dateCalendarClasses.js +5 -3
  5. package/DateCalendar/dayCalendarClasses.js +5 -3
  6. package/DateCalendar/pickersFadeTransitionGroupClasses.js +5 -3
  7. package/DateCalendar/pickersSlideTransitionClasses.js +5 -3
  8. package/DateField/DateField.js +3 -2
  9. package/DatePicker/DatePicker.js +5 -4
  10. package/DatePicker/DatePickerToolbar.js +1 -0
  11. package/DatePicker/datePickerToolbarClasses.js +5 -3
  12. package/DateTimeField/DateTimeField.js +3 -2
  13. package/DateTimePicker/DateTimePicker.js +5 -4
  14. package/DateTimePicker/DateTimePickerTabs.js +1 -0
  15. package/DateTimePicker/DateTimePickerToolbar.js +1 -0
  16. package/DateTimePicker/dateTimePickerTabsClasses.js +5 -3
  17. package/DateTimePicker/dateTimePickerToolbarClasses.js +5 -3
  18. package/DayCalendarSkeleton/dayCalendarSkeletonClasses.js +5 -3
  19. package/DesktopDatePicker/DesktopDatePicker.js +3 -2
  20. package/DesktopDateTimePicker/DesktopDateTimePicker.js +4 -2
  21. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -0
  22. package/DesktopTimePicker/DesktopTimePicker.js +3 -2
  23. package/DigitalClock/DigitalClock.js +1 -0
  24. package/DigitalClock/DigitalClock.types.d.ts +1 -1
  25. package/LocalizationProvider/LocalizationProvider.js +2 -3
  26. package/MobileDatePicker/MobileDatePicker.js +3 -2
  27. package/MobileDateTimePicker/MobileDateTimePicker.js +5 -4
  28. package/MobileTimePicker/MobileTimePicker.js +3 -2
  29. package/MonthCalendar/MonthCalendar.js +12 -9
  30. package/MonthCalendar/MonthCalendarButton.js +2 -1
  31. package/MonthCalendar/monthCalendarClasses.js +5 -3
  32. package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +5 -4
  33. package/MultiSectionDigitalClock/MultiSectionDigitalClock.types.d.ts +1 -1
  34. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +2 -1
  35. package/PickersActionBar/PickersActionBar.js +2 -1
  36. package/PickersCalendarHeader/PickersCalendarHeader.js +1 -0
  37. package/PickersCalendarHeader/PickersCalendarHeader.types.d.ts +1 -1
  38. package/PickersCalendarHeader/pickersCalendarHeaderClasses.js +5 -3
  39. package/PickersDay/PickersDay.js +9 -5
  40. package/PickersDay/pickersDayClasses.js +5 -3
  41. package/PickersLayout/PickersLayout.js +1 -0
  42. package/PickersLayout/PickersLayout.types.d.ts +1 -1
  43. package/PickersSectionList/PickersSectionList.js +1 -0
  44. package/PickersSectionList/PickersSectionList.types.d.ts +1 -1
  45. package/PickersTextField/PickersFilledInput/PickersFilledInput.js +3 -2
  46. package/PickersTextField/PickersInput/PickersInput.js +3 -2
  47. package/PickersTextField/PickersInputBase/PickersInputBase.js +3 -2
  48. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +3 -2
  49. package/PickersTextField/PickersTextField.js +6 -3
  50. package/PickersTextField/usePickerTextFieldOwnerState.js +1 -0
  51. package/StaticDatePicker/StaticDatePicker.js +1 -0
  52. package/StaticDateTimePicker/StaticDateTimePicker.js +1 -0
  53. package/StaticTimePicker/StaticTimePicker.js +1 -0
  54. package/TimeClock/Clock.js +4 -3
  55. package/TimeClock/TimeClock.js +5 -3
  56. package/TimeClock/clockClasses.js +5 -3
  57. package/TimeClock/clockNumberClasses.js +5 -3
  58. package/TimeClock/clockPointerClasses.js +5 -3
  59. package/TimeClock/timeClockClasses.js +5 -3
  60. package/TimeField/TimeField.js +3 -2
  61. package/TimePicker/TimePicker.js +5 -4
  62. package/TimePicker/timePickerToolbarClasses.js +5 -3
  63. package/YearCalendar/YearCalendar.js +14 -10
  64. package/YearCalendar/YearCalendarButton.js +2 -1
  65. package/YearCalendar/yearCalendarClasses.js +5 -3
  66. package/dateViewRenderers/dateViewRenderers.js +2 -1
  67. package/esm/DateCalendar/DateCalendar.js +4 -1
  68. package/esm/DateCalendar/DateCalendar.types.d.ts +1 -1
  69. package/esm/DateCalendar/dateCalendarClasses.js +2 -1
  70. package/esm/DateCalendar/dayCalendarClasses.js +2 -1
  71. package/esm/DateCalendar/pickersFadeTransitionGroupClasses.js +2 -1
  72. package/esm/DateCalendar/pickersSlideTransitionClasses.js +2 -1
  73. package/esm/DateField/DateField.js +2 -1
  74. package/esm/DatePicker/DatePicker.js +2 -1
  75. package/esm/DatePicker/DatePickerToolbar.js +1 -0
  76. package/esm/DatePicker/datePickerToolbarClasses.js +2 -1
  77. package/esm/DateTimeField/DateTimeField.js +2 -1
  78. package/esm/DateTimePicker/DateTimePicker.js +2 -1
  79. package/esm/DateTimePicker/DateTimePickerTabs.js +1 -0
  80. package/esm/DateTimePicker/DateTimePickerToolbar.js +1 -0
  81. package/esm/DateTimePicker/dateTimePickerTabsClasses.js +2 -1
  82. package/esm/DateTimePicker/dateTimePickerToolbarClasses.js +2 -1
  83. package/esm/DayCalendarSkeleton/dayCalendarSkeletonClasses.js +2 -1
  84. package/esm/DesktopDatePicker/DesktopDatePicker.js +2 -1
  85. package/esm/DesktopDateTimePicker/DesktopDateTimePicker.js +3 -1
  86. package/esm/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -0
  87. package/esm/DesktopTimePicker/DesktopTimePicker.js +2 -1
  88. package/esm/DigitalClock/DigitalClock.js +1 -0
  89. package/esm/DigitalClock/DigitalClock.types.d.ts +1 -1
  90. package/esm/LocalizationProvider/LocalizationProvider.js +2 -3
  91. package/esm/MobileDatePicker/MobileDatePicker.js +2 -1
  92. package/esm/MobileDateTimePicker/MobileDateTimePicker.js +2 -1
  93. package/esm/MobileTimePicker/MobileTimePicker.js +2 -1
  94. package/esm/MonthCalendar/MonthCalendar.js +4 -1
  95. package/esm/MonthCalendar/MonthCalendarButton.js +2 -1
  96. package/esm/MonthCalendar/monthCalendarClasses.js +2 -1
  97. package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.js +1 -0
  98. package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.types.d.ts +1 -1
  99. package/esm/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +2 -1
  100. package/esm/PickersActionBar/PickersActionBar.js +1 -0
  101. package/esm/PickersCalendarHeader/PickersCalendarHeader.js +1 -0
  102. package/esm/PickersCalendarHeader/PickersCalendarHeader.types.d.ts +1 -1
  103. package/esm/PickersCalendarHeader/pickersCalendarHeaderClasses.js +2 -1
  104. package/esm/PickersDay/PickersDay.js +6 -2
  105. package/esm/PickersDay/pickersDayClasses.js +2 -1
  106. package/esm/PickersLayout/PickersLayout.js +1 -0
  107. package/esm/PickersLayout/PickersLayout.types.d.ts +1 -1
  108. package/esm/PickersSectionList/PickersSectionList.js +1 -0
  109. package/esm/PickersSectionList/PickersSectionList.types.d.ts +1 -1
  110. package/esm/PickersTextField/PickersFilledInput/PickersFilledInput.js +2 -1
  111. package/esm/PickersTextField/PickersInput/PickersInput.js +2 -1
  112. package/esm/PickersTextField/PickersInputBase/PickersInputBase.js +2 -1
  113. package/esm/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +2 -1
  114. package/esm/PickersTextField/PickersTextField.js +5 -2
  115. package/esm/PickersTextField/usePickerTextFieldOwnerState.js +1 -0
  116. package/esm/StaticDatePicker/StaticDatePicker.js +1 -0
  117. package/esm/StaticDateTimePicker/StaticDateTimePicker.js +1 -0
  118. package/esm/StaticTimePicker/StaticTimePicker.js +1 -0
  119. package/esm/TimeClock/Clock.js +2 -1
  120. package/esm/TimeClock/TimeClock.js +3 -1
  121. package/esm/TimeClock/clockClasses.js +2 -1
  122. package/esm/TimeClock/clockNumberClasses.js +2 -1
  123. package/esm/TimeClock/clockPointerClasses.js +2 -1
  124. package/esm/TimeClock/timeClockClasses.js +2 -1
  125. package/esm/TimeField/TimeField.js +2 -1
  126. package/esm/TimePicker/TimePicker.js +2 -1
  127. package/esm/TimePicker/timePickerToolbarClasses.js +2 -1
  128. package/esm/YearCalendar/YearCalendar.js +5 -1
  129. package/esm/YearCalendar/YearCalendarButton.js +2 -1
  130. package/esm/YearCalendar/yearCalendarClasses.js +2 -1
  131. package/esm/dateViewRenderers/dateViewRenderers.js +2 -1
  132. package/esm/hooks/useIsValidValue.js +1 -0
  133. package/esm/hooks/usePickerContext.js +1 -0
  134. package/esm/index.js +1 -1
  135. package/esm/internals/components/PickerFieldUI.js +1 -0
  136. package/esm/internals/components/PickerPopper/PickerPopper.js +5 -1
  137. package/esm/internals/components/PickerProvider.js +2 -0
  138. package/esm/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +2 -1
  139. package/esm/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.types.d.ts +1 -1
  140. package/esm/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.js +2 -1
  141. package/esm/internals/components/PickersToolbar.js +2 -1
  142. package/esm/internals/components/PickersToolbarButton.js +2 -1
  143. package/esm/internals/components/PickersToolbarText.js +2 -1
  144. package/esm/internals/components/pickersToolbarButtonClasses.js +2 -1
  145. package/esm/internals/components/pickersToolbarClasses.js +2 -1
  146. package/esm/internals/components/pickersToolbarTextClasses.js +2 -1
  147. package/esm/internals/hooks/useDesktopPicker/useDesktopPicker.js +1 -0
  148. package/esm/internals/hooks/useField/useFieldCharacterEditing.js +27 -11
  149. package/esm/internals/hooks/useField/useFieldSectionContainerProps.js +2 -3
  150. package/esm/internals/hooks/useField/useFieldSectionContentProps.js +2 -2
  151. package/esm/internals/hooks/useField/useFieldState.js +2 -2
  152. package/esm/internals/hooks/useMobilePicker/useMobilePicker.js +1 -0
  153. package/esm/internals/hooks/useNullableFieldPrivateContext.js +1 -0
  154. package/esm/internals/hooks/useStaticPicker/useStaticPicker.js +1 -0
  155. package/esm/timeViewRenderers/timeViewRenderers.js +4 -1
  156. package/hooks/useIsValidValue.js +1 -0
  157. package/hooks/usePickerContext.js +1 -0
  158. package/index.js +1 -1
  159. package/internals/components/PickerFieldUI.js +1 -0
  160. package/internals/components/PickerPopper/PickerPopper.js +17 -13
  161. package/internals/components/PickerProvider.js +2 -0
  162. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +2 -1
  163. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.types.d.ts +1 -1
  164. package/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.js +5 -3
  165. package/internals/components/PickersToolbar.js +2 -1
  166. package/internals/components/PickersToolbarButton.js +2 -1
  167. package/internals/components/PickersToolbarText.js +2 -1
  168. package/internals/components/pickersToolbarButtonClasses.js +5 -3
  169. package/internals/components/pickersToolbarClasses.js +5 -3
  170. package/internals/components/pickersToolbarTextClasses.js +5 -3
  171. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +1 -0
  172. package/internals/hooks/useField/useFieldCharacterEditing.js +27 -11
  173. package/internals/hooks/useField/useFieldSectionContainerProps.js +2 -4
  174. package/internals/hooks/useField/useFieldSectionContentProps.js +2 -2
  175. package/internals/hooks/useField/useFieldState.js +2 -2
  176. package/internals/hooks/useMobilePicker/useMobilePicker.js +1 -0
  177. package/internals/hooks/useNullableFieldPrivateContext.js +1 -0
  178. package/internals/hooks/useStaticPicker/useStaticPicker.js +1 -0
  179. package/package.json +2 -2
  180. package/timeViewRenderers/timeViewRenderers.js +4 -1
@@ -133,7 +133,11 @@ const useFieldCharacterEditing = ({
133
133
  return applyQuery(params, getFirstSectionValueMatchingWithQuery);
134
134
  };
135
135
  const applyNumericEditing = params => {
136
- const getNewSectionValue = (queryValue, section) => {
136
+ const getNewSectionValue = ({
137
+ queryValue,
138
+ skipIfBelowMinimum,
139
+ section
140
+ }) => {
137
141
  const cleanQueryValue = (0, _useField.removeLocalizedDigits)(queryValue, localizedDigits);
138
142
  const queryValueNumber = Number(cleanQueryValue);
139
143
  const sectionBoundaries = sectionsValueBoundaries[section.type]({
@@ -150,7 +154,7 @@ const useFieldCharacterEditing = ({
150
154
  // If the user types `0` on a month section,
151
155
  // It is below the minimum, but we want to store the `0` in the query,
152
156
  // So that when he pressed `1`, it will store `01` and move to the next section.
153
- if (queryValueNumber < sectionBoundaries.minimum) {
157
+ if (skipIfBelowMinimum && queryValueNumber < sectionBoundaries.minimum) {
154
158
  return {
155
159
  saveQuery: true
156
160
  };
@@ -164,20 +168,28 @@ const useFieldCharacterEditing = ({
164
168
  };
165
169
  const getFirstSectionValueMatchingWithQuery = (queryValue, activeSection) => {
166
170
  if (activeSection.contentType === 'digit' || activeSection.contentType === 'digit-with-letter') {
167
- return getNewSectionValue(queryValue, activeSection);
171
+ return getNewSectionValue({
172
+ queryValue,
173
+ skipIfBelowMinimum: false,
174
+ section: activeSection
175
+ });
168
176
  }
169
177
 
170
178
  // When editing a letter-format month and the user presses a digit,
171
179
  // We can support the numeric editing by using the digit-format month and re-formatting the result.
172
180
  if (activeSection.type === 'month') {
173
181
  const hasLeadingZerosInFormat = (0, _useField.doesSectionFormatHaveLeadingZeros)(utils, 'digit', 'month', 'MM');
174
- const response = getNewSectionValue(queryValue, {
175
- type: activeSection.type,
176
- format: 'MM',
177
- hasLeadingZerosInFormat,
178
- hasLeadingZerosInInput: true,
179
- contentType: 'digit',
180
- maxLength: 2
182
+ const response = getNewSectionValue({
183
+ queryValue,
184
+ skipIfBelowMinimum: true,
185
+ section: {
186
+ type: activeSection.type,
187
+ format: 'MM',
188
+ hasLeadingZerosInFormat,
189
+ hasLeadingZerosInInput: true,
190
+ contentType: 'digit',
191
+ maxLength: 2
192
+ }
181
193
  });
182
194
  if (isQueryResponseWithoutValue(response)) {
183
195
  return response;
@@ -191,7 +203,11 @@ const useFieldCharacterEditing = ({
191
203
  // When editing a letter-format weekDay and the user presses a digit,
192
204
  // We can support the numeric editing by returning the nth day in the week day array.
193
205
  if (activeSection.type === 'weekDay') {
194
- const response = getNewSectionValue(queryValue, activeSection);
206
+ const response = getNewSectionValue({
207
+ queryValue,
208
+ skipIfBelowMinimum: true,
209
+ section: activeSection
210
+ });
195
211
  if (isQueryResponseWithoutValue(response)) {
196
212
  return response;
197
213
  }
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
3
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.useFieldSectionContainerProps = useFieldSectionContainerProps;
9
8
  var React = _interopRequireWildcard(require("react"));
10
- var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
11
9
  /**
12
10
  * Generate the props to pass to the container element of each section of the field.
13
11
  * It is not used by the non-accessible DOM structure (with an <input /> element for editing).
@@ -25,14 +23,14 @@ function useFieldSectionContainerProps(parameters) {
25
23
  disabled = false
26
24
  }
27
25
  } = parameters;
28
- const createHandleClick = (0, _useEventCallback.default)(sectionIndex => event => {
26
+ const createHandleClick = React.useCallback(sectionIndex => event => {
29
27
  // The click event on the clear button would propagate to the input, trigger this handler and result in a wrong section selection.
30
28
  // We avoid this by checking if the call to this function is actually intended, or a side effect.
31
29
  if (disabled || event.isDefaultPrevented()) {
32
30
  return;
33
31
  }
34
32
  setSelectedSections(sectionIndex);
35
- });
33
+ }, [disabled, setSelectedSections]);
36
34
  return React.useCallback(sectionIndex => ({
37
35
  'data-sectionindex': sectionIndex,
38
36
  onClick: createHandleClick(sectionIndex)
@@ -136,12 +136,12 @@ function useFieldSectionContentProps(parameters) {
136
136
  event.preventDefault();
137
137
  event.dataTransfer.dropEffect = 'none';
138
138
  });
139
- const createFocusHandler = (0, _useEventCallback.default)(sectionIndex => () => {
139
+ const createFocusHandler = React.useCallback(sectionIndex => () => {
140
140
  if (disabled) {
141
141
  return;
142
142
  }
143
143
  setSelectedSections(sectionIndex);
144
- });
144
+ }, [disabled, setSelectedSections]);
145
145
  return React.useCallback((section, sectionIndex) => {
146
146
  const sectionBoundaries = sectionsValueBoundaries[section.type]({
147
147
  currentDate: fieldValueManager.getDateFromSection(value, section),
@@ -276,10 +276,10 @@ const useFieldState = parameters => {
276
276
  }
277
277
 
278
278
  /**
279
- * If all the sections are filled but the date is invalid,
279
+ * If all the sections are filled but the date is invalid and the previous date is valid or null,
280
280
  * Then we publish an invalid date.
281
281
  */
282
- if (newActiveDateSections.every(sectionBis => sectionBis.value !== '')) {
282
+ if (newActiveDateSections.every(sectionBis => sectionBis.value !== '') && (activeDate == null || utils.isValid(activeDate))) {
283
283
  setSectionUpdateToApplyOnNextInvalidDate(newSectionValue);
284
284
  return publishValue(fieldValueManager.updateDateInValue(value, section, newActiveDate));
285
285
  }
@@ -98,6 +98,7 @@ const useMobilePicker = _ref => {
98
98
  })]
99
99
  })
100
100
  }));
101
+ if (process.env.NODE_ENV !== "production") renderPicker.displayName = "renderPicker";
101
102
  return {
102
103
  renderPicker
103
104
  };
@@ -8,6 +8,7 @@ exports.PickerFieldPrivateContext = void 0;
8
8
  exports.useNullableFieldPrivateContext = useNullableFieldPrivateContext;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  const PickerFieldPrivateContext = exports.PickerFieldPrivateContext = /*#__PURE__*/React.createContext(null);
11
+ if (process.env.NODE_ENV !== "production") PickerFieldPrivateContext.displayName = "PickerFieldPrivateContext";
11
12
  function useNullableFieldPrivateContext() {
12
13
  return React.useContext(PickerFieldPrivateContext);
13
14
  }
@@ -71,6 +71,7 @@ const useStaticPicker = _ref => {
71
71
  children: renderCurrentView()
72
72
  }))
73
73
  }));
74
+ if (process.env.NODE_ENV !== "production") renderPicker.displayName = "renderPicker";
74
75
  return {
75
76
  renderPicker
76
77
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-date-pickers",
3
- "version": "8.3.1",
3
+ "version": "8.5.0",
4
4
  "author": "MUI Team",
5
5
  "description": "The community edition of the MUI X Date and Time Picker components.",
6
6
  "main": "./index.js",
@@ -41,7 +41,7 @@
41
41
  "clsx": "^2.1.1",
42
42
  "prop-types": "^15.8.1",
43
43
  "react-transition-group": "^4.4.5",
44
- "@mui/x-internals": "8.3.1"
44
+ "@mui/x-internals": "8.5.0"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "@emotion/react": "^11.9.0",
@@ -71,6 +71,7 @@ const renderTimeViewClock = ({
71
71
  timezone: timezone
72
72
  });
73
73
  exports.renderTimeViewClock = renderTimeViewClock;
74
+ if (process.env.NODE_ENV !== "production") renderTimeViewClock.displayName = "renderTimeViewClock";
74
75
  const renderDigitalClockTimeView = ({
75
76
  view,
76
77
  onViewChange,
@@ -131,6 +132,7 @@ const renderDigitalClockTimeView = ({
131
132
  timezone: timezone
132
133
  });
133
134
  exports.renderDigitalClockTimeView = renderDigitalClockTimeView;
135
+ if (process.env.NODE_ENV !== "production") renderDigitalClockTimeView.displayName = "renderDigitalClockTimeView";
134
136
  const renderMultiSectionDigitalClockTimeView = ({
135
137
  view,
136
138
  onViewChange,
@@ -190,4 +192,5 @@ const renderMultiSectionDigitalClockTimeView = ({
190
192
  skipDisabled: skipDisabled,
191
193
  timezone: timezone
192
194
  });
193
- exports.renderMultiSectionDigitalClockTimeView = renderMultiSectionDigitalClockTimeView;
195
+ exports.renderMultiSectionDigitalClockTimeView = renderMultiSectionDigitalClockTimeView;
196
+ if (process.env.NODE_ENV !== "production") renderMultiSectionDigitalClockTimeView.displayName = "renderMultiSectionDigitalClockTimeView";