@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
@@ -193,6 +193,9 @@ const TimeClock = exports.TimeClock = /*#__PURE__*/React.forwardRef(function Tim
193
193
  {
194
194
  const valueWithMeridiem = (0, _timeUtils.convertValueToMeridiem)(rawValue, meridiemMode, ampm);
195
195
  const dateWithNewHours = utils.setHours(valueOrReferenceDate, valueWithMeridiem);
196
+ if (utils.getHours(dateWithNewHours) !== valueWithMeridiem) {
197
+ return true;
198
+ }
196
199
  const start = utils.setSeconds(utils.setMinutes(dateWithNewHours, 0), 0);
197
200
  const end = utils.setSeconds(utils.setMinutes(dateWithNewHours, 59), 59);
198
201
  return !containsValidTime({
@@ -232,9 +235,20 @@ const TimeClock = exports.TimeClock = /*#__PURE__*/React.forwardRef(function Tim
232
235
  const valueWithMeridiem = (0, _timeUtils.convertValueToMeridiem)(hourValue, meridiemMode, ampm);
233
236
  setValueAndGoToNextView(utils.setHours(valueOrReferenceDate, valueWithMeridiem), isFinish, 'hours');
234
237
  };
238
+ const viewValue = utils.getHours(valueOrReferenceDate);
239
+ let viewRange;
240
+ if (ampm) {
241
+ if (viewValue > 12) {
242
+ viewRange = [12, 23];
243
+ } else {
244
+ viewRange = [0, 11];
245
+ }
246
+ } else {
247
+ viewRange = [0, 23];
248
+ }
235
249
  return {
236
250
  onChange: handleHoursChange,
237
- viewValue: utils.getHours(valueOrReferenceDate),
251
+ viewValue,
238
252
  children: (0, _ClockNumbers.getHourNumbers)({
239
253
  value,
240
254
  utils,
@@ -243,7 +257,8 @@ const TimeClock = exports.TimeClock = /*#__PURE__*/React.forwardRef(function Tim
243
257
  getClockNumberText: translations.hoursClockNumberText,
244
258
  isDisabled: hourValue => disabled || isTimeDisabled(hourValue, 'hours'),
245
259
  selectedId
246
- })
260
+ }),
261
+ viewRange
247
262
  };
248
263
  }
249
264
  case 'minutes':
@@ -262,7 +277,8 @@ const TimeClock = exports.TimeClock = /*#__PURE__*/React.forwardRef(function Tim
262
277
  getClockNumberText: translations.minutesClockNumberText,
263
278
  isDisabled: minuteValue => disabled || isTimeDisabled(minuteValue, 'minutes'),
264
279
  selectedId
265
- })
280
+ }),
281
+ viewRange: [0, 59]
266
282
  };
267
283
  }
268
284
  case 'seconds':
@@ -281,7 +297,8 @@ const TimeClock = exports.TimeClock = /*#__PURE__*/React.forwardRef(function Tim
281
297
  getClockNumberText: translations.secondsClockNumberText,
282
298
  isDisabled: secondValue => disabled || isTimeDisabled(secondValue, 'seconds'),
283
299
  selectedId
284
- })
300
+ }),
301
+ viewRange: [0, 59]
285
302
  };
286
303
  }
287
304
  default:
@@ -26,7 +26,7 @@ var _dateUtils = require("../internals/utils/date-utils");
26
26
  var _hooks = require("../hooks");
27
27
  var _useToolbarOwnerState = require("../internals/hooks/useToolbarOwnerState");
28
28
  var _jsxRuntime = require("react/jsx-runtime");
29
- const _excluded = ["ampm", "ampmInClock", "value", "isLandscape", "onChange", "view", "onViewChange", "views", "className", "classes"];
29
+ const _excluded = ["ampm", "ampmInClock", "value", "isLandscape", "onChange", "className", "classes"];
30
30
  const useUtilityClasses = (classes, ownerState) => {
31
31
  const {
32
32
  pickerOrientation,
@@ -132,9 +132,6 @@ function TimePickerToolbar(inProps) {
132
132
  value,
133
133
  isLandscape,
134
134
  onChange,
135
- view,
136
- onViewChange,
137
- views,
138
135
  className,
139
136
  classes: classesProp
140
137
  } = props,
@@ -145,7 +142,10 @@ function TimePickerToolbar(inProps) {
145
142
  const classes = useUtilityClasses(classesProp, ownerState);
146
143
  const {
147
144
  disabled,
148
- readOnly
145
+ readOnly,
146
+ view,
147
+ onViewChange,
148
+ views
149
149
  } = (0, _hooks.usePickerContext)();
150
150
  const showAmPmControl = Boolean(ampm && !ampmInClock && views.includes('hours'));
151
151
  const {
@@ -230,12 +230,6 @@ process.env.NODE_ENV !== "production" ? TimePickerToolbar.propTypes = {
230
230
  hidden: _propTypes.default.bool,
231
231
  isLandscape: _propTypes.default.bool.isRequired,
232
232
  onChange: _propTypes.default.func.isRequired,
233
- /**
234
- * Callback called when a toolbar is clicked
235
- * @template TView
236
- * @param {TView} view The view to open
237
- */
238
- onViewChange: _propTypes.default.func.isRequired,
239
233
  /**
240
234
  * The system prop that allows defining system overrides as well as additional CSS styles.
241
235
  */
@@ -250,13 +244,5 @@ process.env.NODE_ENV !== "production" ? TimePickerToolbar.propTypes = {
250
244
  * @default "––"
251
245
  */
252
246
  toolbarPlaceholder: _propTypes.default.node,
253
- value: _propTypes.default.object,
254
- /**
255
- * Currently visible picker view.
256
- */
257
- view: _propTypes.default.oneOf(['hours', 'meridiem', 'minutes', 'seconds']).isRequired,
258
- /**
259
- * Available views.
260
- */
261
- views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['hours', 'meridiem', 'minutes', 'seconds']).isRequired).isRequired
247
+ value: _propTypes.default.object
262
248
  } : void 0;
@@ -13,9 +13,10 @@ var React = _interopRequireWildcard(require("react"));
13
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
14
14
  var _clsx = _interopRequireDefault(require("clsx"));
15
15
  var _RtlProvider = require("@mui/system/RtlProvider");
16
+ var _createStyled = require("@mui/system/createStyled");
16
17
  var _styles = require("@mui/material/styles");
17
18
  var _utils = require("@mui/utils");
18
- var _PickersYear = require("./PickersYear");
19
+ var _YearCalendarButton = require("./YearCalendarButton");
19
20
  var _useUtils = require("../internals/hooks/useUtils");
20
21
  var _yearCalendarClasses = require("./yearCalendarClasses");
21
22
  var _dateUtils = require("../internals/utils/date-utils");
@@ -44,6 +45,7 @@ function useYearCalendarDefaultizedProps(props, name) {
44
45
  disableFuture: false
45
46
  }, themeProps, {
46
47
  yearsPerRow: themeProps.yearsPerRow ?? 3,
48
+ yearsOrder: themeProps.yearsOrder ?? 'asc',
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,19 +53,43 @@ function useYearCalendarDefaultizedProps(props, name) {
51
53
  const YearCalendarRoot = (0, _styles.styled)('div', {
52
54
  name: 'MuiYearCalendar',
53
55
  slot: 'Root',
54
- overridesResolver: (props, styles) => styles.root
56
+ shouldForwardProp: prop => (0, _createStyled.shouldForwardProp)(prop) && prop !== 'yearsPerRow'
55
57
  })({
56
58
  display: 'flex',
57
- flexDirection: 'row',
58
59
  flexWrap: 'wrap',
60
+ justifyContent: 'space-evenly',
61
+ rowGap: 12,
62
+ padding: '6px 0',
59
63
  overflowY: 'auto',
60
64
  height: '100%',
61
- padding: '0 4px',
62
65
  width: _dimensions.DIALOG_WIDTH,
63
66
  maxHeight: _dimensions.MAX_CALENDAR_HEIGHT,
64
67
  // avoid padding increasing width over defined
65
68
  boxSizing: 'border-box',
66
- position: 'relative'
69
+ position: 'relative',
70
+ variants: [{
71
+ props: {
72
+ yearsPerRow: 3
73
+ },
74
+ style: {
75
+ columnGap: 24
76
+ }
77
+ }, {
78
+ props: {
79
+ yearsPerRow: 4
80
+ },
81
+ style: {
82
+ columnGap: 0,
83
+ padding: '0 2px'
84
+ }
85
+ }]
86
+ });
87
+ const YearCalendarButtonFiller = (0, _styles.styled)('div', {
88
+ name: 'MuiYearCalendar',
89
+ slot: 'ButtonFiller'
90
+ })({
91
+ height: 36,
92
+ width: 72
67
93
  });
68
94
  /**
69
95
  * Demos:
@@ -94,7 +120,7 @@ const YearCalendar = exports.YearCalendar = /*#__PURE__*/React.forwardRef(functi
94
120
  onYearFocus,
95
121
  hasFocus,
96
122
  onFocusedViewChange,
97
- yearsOrder = 'asc',
123
+ yearsOrder,
98
124
  yearsPerRow,
99
125
  timezone: timezoneProp,
100
126
  gridLabelId,
@@ -246,18 +272,23 @@ const YearCalendar = exports.YearCalendar = /*#__PURE__*/React.forwardRef(functi
246
272
  if (yearsOrder === 'desc') {
247
273
  yearRange.reverse();
248
274
  }
249
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(YearCalendarRoot, (0, _extends2.default)({
275
+ let fillerAmount = yearsPerRow - yearRange.length % yearsPerRow;
276
+ if (fillerAmount === yearsPerRow) {
277
+ fillerAmount = 0;
278
+ }
279
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(YearCalendarRoot, (0, _extends2.default)({
250
280
  ref: handleRef,
251
281
  className: (0, _clsx.default)(classes.root, className),
252
282
  ownerState: ownerState,
253
283
  role: "radiogroup",
254
- "aria-labelledby": gridLabelId
284
+ "aria-labelledby": gridLabelId,
285
+ yearsPerRow: yearsPerRow
255
286
  }, other, {
256
- children: yearRange.map(year => {
287
+ children: [yearRange.map(year => {
257
288
  const yearNumber = utils.getYear(year);
258
289
  const isSelected = yearNumber === selectedYear;
259
290
  const isDisabled = disabled || isYearDisabled(year);
260
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_PickersYear.PickersYear, {
291
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_YearCalendarButton.YearCalendarButton, {
261
292
  selected: isSelected,
262
293
  value: yearNumber,
263
294
  onClick: handleYearSelection,
@@ -268,12 +299,14 @@ const YearCalendar = exports.YearCalendar = /*#__PURE__*/React.forwardRef(functi
268
299
  onFocus: handleYearFocus,
269
300
  onBlur: handleYearBlur,
270
301
  "aria-current": todayYear === yearNumber ? 'date' : undefined,
271
- yearsPerRow: yearsPerRow,
272
302
  slots: slots,
273
303
  slotProps: slotProps,
304
+ classes: classesProp,
274
305
  children: utils.format(year, 'year')
275
306
  }, utils.format(year, 'year'));
276
- })
307
+ }), Array.from({
308
+ length: fillerAmount
309
+ }, (_, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(YearCalendarButtonFiller, {}, index))]
277
310
  }));
278
311
  });
279
312
  process.env.NODE_ENV !== "production" ? YearCalendar.propTypes = {
@@ -5,51 +5,31 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.PickersYear = void 0;
8
+ exports.YearCalendarButton = void 0;
9
9
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
  var React = _interopRequireWildcard(require("react"));
12
- var _clsx = _interopRequireDefault(require("clsx"));
13
12
  var _styles = require("@mui/material/styles");
14
13
  var _useSlotProps = _interopRequireDefault(require("@mui/utils/useSlotProps"));
15
14
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
16
15
  var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
17
- var _pickersYearClasses = require("./pickersYearClasses");
18
16
  var _usePickerPrivateContext = require("../internals/hooks/usePickerPrivateContext");
17
+ var _yearCalendarClasses = require("./yearCalendarClasses");
19
18
  var _jsxRuntime = require("react/jsx-runtime");
20
- const _excluded = ["autoFocus", "className", "classes", "children", "disabled", "selected", "value", "tabIndex", "onClick", "onKeyDown", "onFocus", "onBlur", "aria-current", "yearsPerRow", "slots", "slotProps"];
19
+ const _excluded = ["autoFocus", "classes", "disabled", "selected", "value", "onClick", "onKeyDown", "onFocus", "onBlur", "slots", "slotProps"];
21
20
  const useUtilityClasses = (classes, ownerState) => {
22
21
  const slots = {
23
- root: ['root'],
24
- yearButton: ['yearButton', ownerState.isYearDisabled && 'disabled', ownerState.isYearSelected && 'selected']
22
+ button: ['button', ownerState.isYearDisabled && 'disabled', ownerState.isYearSelected && 'selected']
25
23
  };
26
- return (0, _composeClasses.default)(slots, _pickersYearClasses.getPickersYearUtilityClass, classes);
24
+ return (0, _composeClasses.default)(slots, _yearCalendarClasses.getYearCalendarUtilityClass, classes);
27
25
  };
28
- const PickersYearRoot = (0, _styles.styled)('div', {
29
- name: 'MuiPickersYear',
30
- slot: 'Root',
31
- overridesResolver: (_, styles) => [styles.root]
32
- })({
33
- display: 'flex',
34
- alignItems: 'center',
35
- justifyContent: 'center',
36
- flexBasis: '33.3%',
37
- variants: [{
38
- props: {
39
- yearsPerRow: 4
40
- },
41
- style: {
42
- flexBasis: '25%'
43
- }
44
- }]
45
- });
46
- const YearCalendarButton = (0, _styles.styled)('button', {
47
- name: 'MuiPickersYear',
48
- slot: 'YearButton',
49
- overridesResolver: (_, styles) => [styles.yearButton, {
50
- [`&.${_pickersYearClasses.pickersYearClasses.disabled}`]: styles.disabled
26
+ const DefaultYearButton = (0, _styles.styled)('button', {
27
+ name: 'MuiYearCalendar',
28
+ slot: 'Button',
29
+ overridesResolver: (_, styles) => [styles.button, {
30
+ [`&.${_yearCalendarClasses.yearCalendarClasses.disabled}`]: styles.disabled
51
31
  }, {
52
- [`&.${_pickersYearClasses.pickersYearClasses.selected}`]: styles.selected
32
+ [`&.${_yearCalendarClasses.yearCalendarClasses.selected}`]: styles.selected
53
33
  }]
54
34
  })(({
55
35
  theme
@@ -59,7 +39,6 @@ const YearCalendarButton = (0, _styles.styled)('button', {
59
39
  border: 0,
60
40
  outline: 0
61
41
  }, theme.typography.subtitle1, {
62
- margin: '6px 0',
63
42
  height: 36,
64
43
  width: 72,
65
44
  borderRadius: 18,
@@ -74,10 +53,10 @@ const YearCalendarButton = (0, _styles.styled)('button', {
74
53
  cursor: 'auto',
75
54
  pointerEvents: 'none'
76
55
  },
77
- [`&.${_pickersYearClasses.pickersYearClasses.disabled}`]: {
56
+ [`&.${_yearCalendarClasses.yearCalendarClasses.disabled}`]: {
78
57
  color: (theme.vars || theme).palette.text.secondary
79
58
  },
80
- [`&.${_pickersYearClasses.pickersYearClasses.selected}`]: {
59
+ [`&.${_yearCalendarClasses.yearCalendarClasses.selected}`]: {
81
60
  color: (theme.vars || theme).palette.primary.contrastText,
82
61
  backgroundColor: (theme.vars || theme).palette.primary.main,
83
62
  '&:focus, &:hover': {
@@ -89,28 +68,17 @@ const YearCalendarButton = (0, _styles.styled)('button', {
89
68
  /**
90
69
  * @ignore - internal component.
91
70
  */
92
- const PickersYear = exports.PickersYear = /*#__PURE__*/React.memo(function PickersYear(inProps) {
93
- const props = (0, _styles.useThemeProps)({
94
- props: inProps,
95
- name: 'MuiPickersYear'
96
- });
71
+ const YearCalendarButton = exports.YearCalendarButton = /*#__PURE__*/React.memo(function YearCalendarButton(props) {
97
72
  const {
98
73
  autoFocus,
99
- className,
100
74
  classes: classesProp,
101
- children,
102
- disabled = false,
103
- selected = false,
75
+ disabled,
76
+ selected,
104
77
  value,
105
- tabIndex,
106
78
  onClick,
107
79
  onKeyDown,
108
80
  onFocus,
109
81
  onBlur,
110
- 'aria-current': ariaCurrent
111
- // We don't want to forward this prop to the root element
112
- ,
113
-
114
82
  slots,
115
83
  slotProps
116
84
  } = props,
@@ -132,18 +100,16 @@ const PickersYear = exports.PickersYear = /*#__PURE__*/React.memo(function Picke
132
100
  ref.current?.focus();
133
101
  }
134
102
  }, [autoFocus]);
135
- const YearButton = slots?.yearButton ?? YearCalendarButton;
103
+ const YearButton = slots?.yearButton ?? DefaultYearButton;
136
104
  const yearButtonProps = (0, _useSlotProps.default)({
137
105
  elementType: YearButton,
138
106
  externalSlotProps: slotProps?.yearButton,
107
+ externalForwardedProps: other,
139
108
  additionalProps: {
140
- children,
141
109
  disabled,
142
- tabIndex,
143
110
  ref,
144
111
  type: 'button',
145
112
  role: 'radio',
146
- 'aria-current': ariaCurrent,
147
113
  'aria-checked': selected,
148
114
  onClick: event => onClick(event, value),
149
115
  onKeyDown: event => onKeyDown(event, value),
@@ -151,12 +117,7 @@ const PickersYear = exports.PickersYear = /*#__PURE__*/React.memo(function Picke
151
117
  onBlur: event => onBlur(event, value)
152
118
  },
153
119
  ownerState,
154
- className: classes.yearButton
120
+ className: classes.button
155
121
  });
156
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(PickersYearRoot, (0, _extends2.default)({
157
- className: (0, _clsx.default)(classes.root, className),
158
- ownerState: ownerState
159
- }, other, {
160
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(YearButton, (0, _extends2.default)({}, yearButtonProps))
161
- }));
122
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(YearButton, (0, _extends2.default)({}, yearButtonProps));
162
123
  });
@@ -15,12 +15,6 @@ Object.defineProperty(exports, "getYearCalendarUtilityClass", {
15
15
  return _yearCalendarClasses.getYearCalendarUtilityClass;
16
16
  }
17
17
  });
18
- Object.defineProperty(exports, "pickersYearClasses", {
19
- enumerable: true,
20
- get: function () {
21
- return _pickersYearClasses.pickersYearClasses;
22
- }
23
- });
24
18
  Object.defineProperty(exports, "yearCalendarClasses", {
25
19
  enumerable: true,
26
20
  get: function () {
@@ -28,5 +22,4 @@ Object.defineProperty(exports, "yearCalendarClasses", {
28
22
  }
29
23
  });
30
24
  var _YearCalendar = require("./YearCalendar");
31
- var _yearCalendarClasses = require("./yearCalendarClasses");
32
- var _pickersYearClasses = require("./pickersYearClasses");
25
+ var _yearCalendarClasses = require("./yearCalendarClasses");
@@ -9,4 +9,4 @@ var _utils = require("@mui/utils");
9
9
  function getYearCalendarUtilityClass(slot) {
10
10
  return (0, _utils.unstable_generateUtilityClass)('MuiYearCalendar', slot);
11
11
  }
12
- const yearCalendarClasses = exports.yearCalendarClasses = (0, _utils.unstable_generateUtilityClasses)('MuiYearCalendar', ['root']);
12
+ const yearCalendarClasses = exports.yearCalendarClasses = (0, _utils.unstable_generateUtilityClasses)('MuiYearCalendar', ['root', 'button', 'disabled', 'selected']);
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "useParsedFormat", {
15
15
  return _useParsedFormat.useParsedFormat;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "usePickerActionsContext", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _usePickerActionsContext.usePickerActionsContext;
22
+ }
23
+ });
18
24
  Object.defineProperty(exports, "usePickerContext", {
19
25
  enumerable: true,
20
26
  get: function () {
@@ -37,4 +43,5 @@ var _useClearableField = require("./useClearableField");
37
43
  var _usePickerTranslations = require("./usePickerTranslations");
38
44
  var _useSplitFieldProps = require("./useSplitFieldProps");
39
45
  var _useParsedFormat = require("./useParsedFormat");
40
- var _usePickerContext = require("./usePickerContext");
46
+ var _usePickerContext = require("./usePickerContext");
47
+ var _usePickerActionsContext = require("./usePickerActionsContext");
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ 'use client';
3
+
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.usePickerActionsContext = void 0;
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var _PickerProvider = require("../internals/components/PickerProvider");
11
+ /**
12
+ * Returns a subset of the context passed by the picker wrapping the current component.
13
+ * It only contains the actions and never causes a re-render of the component using it.
14
+ */
15
+ const usePickerActionsContext = () => {
16
+ const value = React.useContext(_PickerProvider.PickerActionsContext);
17
+ if (value == null) {
18
+ throw new Error(['MUI X: The `usePickerActionsContext` can only be called in fields that are used as a slot of a picker component'].join('\n'));
19
+ }
20
+ return value;
21
+ };
22
+ exports.usePickerActionsContext = usePickerActionsContext;
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v8.0.0-alpha.4
2
+ * @mui/x-date-pickers v8.0.0-alpha.6
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -4,12 +4,13 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.PickerPrivateContext = exports.PickerContext = void 0;
7
+ exports.PickerPrivateContext = exports.PickerContext = exports.PickerActionsContext = void 0;
8
8
  exports.PickerProvider = PickerProvider;
9
9
  var React = _interopRequireWildcard(require("react"));
10
10
  var _LocalizationProvider = require("../../LocalizationProvider");
11
11
  var _jsxRuntime = require("react/jsx-runtime");
12
12
  const PickerContext = exports.PickerContext = /*#__PURE__*/React.createContext(null);
13
+ const PickerActionsContext = exports.PickerActionsContext = /*#__PURE__*/React.createContext(null);
13
14
  const PickerPrivateContext = exports.PickerPrivateContext = /*#__PURE__*/React.createContext({
14
15
  ownerState: {
15
16
  isPickerDisabled: false,
@@ -18,7 +19,8 @@ const PickerPrivateContext = exports.PickerPrivateContext = /*#__PURE__*/React.c
18
19
  isPickerOpen: false,
19
20
  pickerVariant: 'desktop',
20
21
  pickerOrientation: 'portrait'
21
- }
22
+ },
23
+ dismissViews: () => {}
22
24
  });
23
25
 
24
26
  /**
@@ -31,17 +33,21 @@ const PickerPrivateContext = exports.PickerPrivateContext = /*#__PURE__*/React.c
31
33
  function PickerProvider(props) {
32
34
  const {
33
35
  contextValue,
36
+ actionsContextValue,
34
37
  privateContextValue,
35
38
  localeText,
36
39
  children
37
40
  } = props;
38
41
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerContext.Provider, {
39
42
  value: contextValue,
40
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerPrivateContext.Provider, {
41
- value: privateContextValue,
42
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_LocalizationProvider.LocalizationProvider, {
43
- localeText: localeText,
44
- children: children
43
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerActionsContext.Provider, {
44
+ value: actionsContextValue,
45
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerPrivateContext.Provider, {
46
+ value: privateContextValue,
47
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_LocalizationProvider.LocalizationProvider, {
48
+ localeText: localeText,
49
+ children: children
50
+ })
45
51
  })
46
52
  })
47
53
  });
@@ -46,7 +46,7 @@ const PickersArrowSwitcherButton = (0, _styles.styled)(_IconButton.default, {
46
46
  })({
47
47
  variants: [{
48
48
  props: {
49
- hidden: true
49
+ isButtonHidden: true
50
50
  },
51
51
  style: {
52
52
  visibility: 'hidden'
@@ -117,7 +117,7 @@ const PickersArrowSwitcher = exports.PickersArrowSwitcher = /*#__PURE__*/React.f
117
117
  onClick: previousProps.goTo
118
118
  },
119
119
  ownerState: (0, _extends2.default)({}, ownerState, {
120
- hidden: previousProps.isHidden ?? false
120
+ isButtonHidden: previousProps.isHidden ?? false
121
121
  }),
122
122
  className: (0, _clsx.default)(classes.button, classes.previousIconButton)
123
123
  });
@@ -134,7 +134,7 @@ const PickersArrowSwitcher = exports.PickersArrowSwitcher = /*#__PURE__*/React.f
134
134
  onClick: nextProps.goTo
135
135
  },
136
136
  ownerState: (0, _extends2.default)({}, ownerState, {
137
- hidden: nextProps.isHidden ?? false
137
+ isButtonHidden: nextProps.isHidden ?? false
138
138
  }),
139
139
  className: (0, _clsx.default)(classes.button, classes.nextIconButton)
140
140
  });
@@ -13,6 +13,8 @@ var _Fade = _interopRequireDefault(require("@mui/material/Fade"));
13
13
  var _Dialog = _interopRequireWildcard(require("@mui/material/Dialog"));
14
14
  var _styles = require("@mui/material/styles");
15
15
  var _dimensions = require("../constants/dimensions");
16
+ var _hooks = require("../../hooks");
17
+ var _usePickerPrivateContext = require("../hooks/usePickerPrivateContext");
16
18
  var _jsxRuntime = require("react/jsx-runtime");
17
19
  const PickersModalDialogRoot = (0, _styles.styled)(_Dialog.default)({
18
20
  [`& .${_Dialog.dialogClasses.container}`]: {
@@ -31,16 +33,20 @@ const PickersModalDialogContent = (0, _styles.styled)(_DialogContent.default)({
31
33
  function PickersModalDialog(props) {
32
34
  const {
33
35
  children,
34
- onDismiss,
35
- open,
36
36
  slots,
37
37
  slotProps
38
38
  } = props;
39
+ const {
40
+ open
41
+ } = (0, _hooks.usePickerContext)();
42
+ const {
43
+ dismissViews
44
+ } = (0, _usePickerPrivateContext.usePickerPrivateContext)();
39
45
  const Dialog = slots?.dialog ?? PickersModalDialogRoot;
40
46
  const Transition = slots?.mobileTransition ?? _Fade.default;
41
47
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Dialog, (0, _extends2.default)({
42
48
  open: open,
43
- onClose: onDismiss
49
+ onClose: dismissViews
44
50
  }, slotProps?.dialog, {
45
51
  TransitionComponent: Transition,
46
52
  TransitionProps: slotProps?.mobileTransition,
@@ -21,6 +21,7 @@ var _pickersPopperClasses = require("./pickersPopperClasses");
21
21
  var _utils2 = require("../utils/utils");
22
22
  var _useDefaultReduceAnimations = require("../hooks/useDefaultReduceAnimations");
23
23
  var _usePickerPrivateContext = require("../hooks/usePickerPrivateContext");
24
+ var _hooks = require("../../hooks");
24
25
  var _jsxRuntime = require("react/jsx-runtime");
25
26
  const _excluded = ["PaperComponent", "ownerState", "children", "paperSlotProps", "paperClasses", "onPaperClick", "onPaperTouchStart"];
26
27
  const useUtilityClasses = classes => {
@@ -218,8 +219,6 @@ function PickersPopper(inProps) {
218
219
  containerRef = null,
219
220
  shouldRestoreFocus,
220
221
  onBlur,
221
- onDismiss,
222
- open,
223
222
  role,
224
223
  placement = 'bottom',
225
224
  slots,
@@ -227,17 +226,23 @@ function PickersPopper(inProps) {
227
226
  reduceAnimations: inReduceAnimations,
228
227
  classes: classesProp
229
228
  } = props;
229
+ const {
230
+ open
231
+ } = (0, _hooks.usePickerContext)();
232
+ const {
233
+ dismissViews
234
+ } = (0, _usePickerPrivateContext.usePickerPrivateContext)();
230
235
  React.useEffect(() => {
231
236
  function handleKeyDown(nativeEvent) {
232
237
  if (open && nativeEvent.key === 'Escape') {
233
- onDismiss();
238
+ dismissViews();
234
239
  }
235
240
  }
236
241
  document.addEventListener('keydown', handleKeyDown);
237
242
  return () => {
238
243
  document.removeEventListener('keydown', handleKeyDown);
239
244
  };
240
- }, [onDismiss, open]);
245
+ }, [dismissViews, open]);
241
246
  const lastFocusedElementRef = React.useRef(null);
242
247
  React.useEffect(() => {
243
248
  if (role === 'tooltip' || shouldRestoreFocus && !shouldRestoreFocus()) {
@@ -255,7 +260,7 @@ function PickersPopper(inProps) {
255
260
  });
256
261
  }
257
262
  }, [open, role, shouldRestoreFocus]);
258
- const [clickAwayRef, onPaperClick, onPaperTouchStart] = useClickAwayListener(open, onBlur ?? onDismiss);
263
+ const [clickAwayRef, onPaperClick, onPaperTouchStart] = useClickAwayListener(open, onBlur ?? dismissViews);
259
264
  const paperRef = React.useRef(null);
260
265
  const handleRef = (0, _utils.unstable_useForkRef)(paperRef, containerRef);
261
266
  const handlePaperRef = (0, _utils.unstable_useForkRef)(handleRef, clickAwayRef);
@@ -272,7 +277,7 @@ function PickersPopper(inProps) {
272
277
  if (event.key === 'Escape') {
273
278
  // stop the propagation to avoid closing parent modal
274
279
  event.stopPropagation();
275
- onDismiss();
280
+ dismissViews();
276
281
  }
277
282
  };
278
283
  const Transition = slots?.desktopTransition ?? reduceAnimations ? _Fade.default : _Grow.default;