@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
@@ -2,7 +2,7 @@
2
2
 
3
3
  import _extends from "@babel/runtime/helpers/esm/extends";
4
4
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
- const _excluded = ["ampm", "ampmInClock", "value", "isLandscape", "onChange", "view", "onViewChange", "views", "className", "classes"];
5
+ const _excluded = ["ampm", "ampmInClock", "value", "isLandscape", "onChange", "className", "classes"];
6
6
  import * as React from 'react';
7
7
  import clsx from 'clsx';
8
8
  import PropTypes from 'prop-types';
@@ -125,9 +125,6 @@ function TimePickerToolbar(inProps) {
125
125
  value,
126
126
  isLandscape,
127
127
  onChange,
128
- view,
129
- onViewChange,
130
- views,
131
128
  className,
132
129
  classes: classesProp
133
130
  } = props,
@@ -138,7 +135,10 @@ function TimePickerToolbar(inProps) {
138
135
  const classes = useUtilityClasses(classesProp, ownerState);
139
136
  const {
140
137
  disabled,
141
- readOnly
138
+ readOnly,
139
+ view,
140
+ onViewChange,
141
+ views
142
142
  } = usePickerContext();
143
143
  const showAmPmControl = Boolean(ampm && !ampmInClock && views.includes('hours'));
144
144
  const {
@@ -223,12 +223,6 @@ process.env.NODE_ENV !== "production" ? TimePickerToolbar.propTypes = {
223
223
  hidden: PropTypes.bool,
224
224
  isLandscape: PropTypes.bool.isRequired,
225
225
  onChange: PropTypes.func.isRequired,
226
- /**
227
- * Callback called when a toolbar is clicked
228
- * @template TView
229
- * @param {TView} view The view to open
230
- */
231
- onViewChange: PropTypes.func.isRequired,
232
226
  /**
233
227
  * The system prop that allows defining system overrides as well as additional CSS styles.
234
228
  */
@@ -243,14 +237,6 @@ process.env.NODE_ENV !== "production" ? TimePickerToolbar.propTypes = {
243
237
  * @default "––"
244
238
  */
245
239
  toolbarPlaceholder: PropTypes.node,
246
- value: PropTypes.object,
247
- /**
248
- * Currently visible picker view.
249
- */
250
- view: PropTypes.oneOf(['hours', 'meridiem', 'minutes', 'seconds']).isRequired,
251
- /**
252
- * Available views.
253
- */
254
- views: PropTypes.arrayOf(PropTypes.oneOf(['hours', 'meridiem', 'minutes', 'seconds']).isRequired).isRequired
240
+ value: PropTypes.object
255
241
  } : void 0;
256
242
  export { TimePickerToolbar };
@@ -7,9 +7,10 @@ import * as React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import clsx from 'clsx';
9
9
  import { useRtl } from '@mui/system/RtlProvider';
10
+ import { shouldForwardProp } from '@mui/system/createStyled';
10
11
  import { styled, useThemeProps } from '@mui/material/styles';
11
12
  import { unstable_useForkRef as useForkRef, unstable_composeClasses as composeClasses, unstable_useControlled as useControlled, unstable_useEventCallback as useEventCallback } from '@mui/utils';
12
- import { PickersYear } from "./PickersYear.js";
13
+ import { YearCalendarButton } from "./YearCalendarButton.js";
13
14
  import { useUtils, useNow, useDefaultDates } from "../internals/hooks/useUtils.js";
14
15
  import { getYearCalendarUtilityClass } from "./yearCalendarClasses.js";
15
16
  import { applyDefaultDate } from "../internals/utils/date-utils.js";
@@ -18,7 +19,7 @@ import { SECTION_TYPE_GRANULARITY } from "../internals/utils/getDefaultReference
18
19
  import { useControlledValueWithTimezone } from "../internals/hooks/useValueWithTimezone.js";
19
20
  import { DIALOG_WIDTH, MAX_CALENDAR_HEIGHT } from "../internals/constants/dimensions.js";
20
21
  import { usePickerPrivateContext } from "../internals/hooks/usePickerPrivateContext.js";
21
- import { jsx as _jsx } from "react/jsx-runtime";
22
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
23
  const useUtilityClasses = classes => {
23
24
  const slots = {
24
25
  root: ['root']
@@ -37,6 +38,7 @@ function useYearCalendarDefaultizedProps(props, name) {
37
38
  disableFuture: false
38
39
  }, themeProps, {
39
40
  yearsPerRow: themeProps.yearsPerRow ?? 3,
41
+ yearsOrder: themeProps.yearsOrder ?? 'asc',
40
42
  minDate: applyDefaultDate(utils, themeProps.minDate, defaultDates.minDate),
41
43
  maxDate: applyDefaultDate(utils, themeProps.maxDate, defaultDates.maxDate)
42
44
  });
@@ -44,19 +46,43 @@ function useYearCalendarDefaultizedProps(props, name) {
44
46
  const YearCalendarRoot = styled('div', {
45
47
  name: 'MuiYearCalendar',
46
48
  slot: 'Root',
47
- overridesResolver: (props, styles) => styles.root
49
+ shouldForwardProp: prop => shouldForwardProp(prop) && prop !== 'yearsPerRow'
48
50
  })({
49
51
  display: 'flex',
50
- flexDirection: 'row',
51
52
  flexWrap: 'wrap',
53
+ justifyContent: 'space-evenly',
54
+ rowGap: 12,
55
+ padding: '6px 0',
52
56
  overflowY: 'auto',
53
57
  height: '100%',
54
- padding: '0 4px',
55
58
  width: DIALOG_WIDTH,
56
59
  maxHeight: MAX_CALENDAR_HEIGHT,
57
60
  // avoid padding increasing width over defined
58
61
  boxSizing: 'border-box',
59
- position: 'relative'
62
+ position: 'relative',
63
+ variants: [{
64
+ props: {
65
+ yearsPerRow: 3
66
+ },
67
+ style: {
68
+ columnGap: 24
69
+ }
70
+ }, {
71
+ props: {
72
+ yearsPerRow: 4
73
+ },
74
+ style: {
75
+ columnGap: 0,
76
+ padding: '0 2px'
77
+ }
78
+ }]
79
+ });
80
+ const YearCalendarButtonFiller = styled('div', {
81
+ name: 'MuiYearCalendar',
82
+ slot: 'ButtonFiller'
83
+ })({
84
+ height: 36,
85
+ width: 72
60
86
  });
61
87
  /**
62
88
  * Demos:
@@ -87,7 +113,7 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
87
113
  onYearFocus,
88
114
  hasFocus,
89
115
  onFocusedViewChange,
90
- yearsOrder = 'asc',
116
+ yearsOrder,
91
117
  yearsPerRow,
92
118
  timezone: timezoneProp,
93
119
  gridLabelId,
@@ -239,18 +265,23 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
239
265
  if (yearsOrder === 'desc') {
240
266
  yearRange.reverse();
241
267
  }
242
- return /*#__PURE__*/_jsx(YearCalendarRoot, _extends({
268
+ let fillerAmount = yearsPerRow - yearRange.length % yearsPerRow;
269
+ if (fillerAmount === yearsPerRow) {
270
+ fillerAmount = 0;
271
+ }
272
+ return /*#__PURE__*/_jsxs(YearCalendarRoot, _extends({
243
273
  ref: handleRef,
244
274
  className: clsx(classes.root, className),
245
275
  ownerState: ownerState,
246
276
  role: "radiogroup",
247
- "aria-labelledby": gridLabelId
277
+ "aria-labelledby": gridLabelId,
278
+ yearsPerRow: yearsPerRow
248
279
  }, other, {
249
- children: yearRange.map(year => {
280
+ children: [yearRange.map(year => {
250
281
  const yearNumber = utils.getYear(year);
251
282
  const isSelected = yearNumber === selectedYear;
252
283
  const isDisabled = disabled || isYearDisabled(year);
253
- return /*#__PURE__*/_jsx(PickersYear, {
284
+ return /*#__PURE__*/_jsx(YearCalendarButton, {
254
285
  selected: isSelected,
255
286
  value: yearNumber,
256
287
  onClick: handleYearSelection,
@@ -261,12 +292,14 @@ export const YearCalendar = /*#__PURE__*/React.forwardRef(function YearCalendar(
261
292
  onFocus: handleYearFocus,
262
293
  onBlur: handleYearBlur,
263
294
  "aria-current": todayYear === yearNumber ? 'date' : undefined,
264
- yearsPerRow: yearsPerRow,
265
295
  slots: slots,
266
296
  slotProps: slotProps,
297
+ classes: classesProp,
267
298
  children: utils.format(year, 'year')
268
299
  }, utils.format(year, 'year'));
269
- })
300
+ }), Array.from({
301
+ length: fillerAmount
302
+ }, (_, index) => /*#__PURE__*/_jsx(YearCalendarButtonFiller, {}, index))]
270
303
  }));
271
304
  });
272
305
  process.env.NODE_ENV !== "production" ? YearCalendar.propTypes = {
@@ -1,47 +1,27 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["autoFocus", "className", "classes", "children", "disabled", "selected", "value", "tabIndex", "onClick", "onKeyDown", "onFocus", "onBlur", "aria-current", "yearsPerRow", "slots", "slotProps"];
3
+ const _excluded = ["autoFocus", "classes", "disabled", "selected", "value", "onClick", "onKeyDown", "onFocus", "onBlur", "slots", "slotProps"];
4
4
  import * as React from 'react';
5
- import clsx from 'clsx';
6
- import { styled, alpha, useThemeProps } from '@mui/material/styles';
5
+ import { styled, alpha } from '@mui/material/styles';
7
6
  import useSlotProps from '@mui/utils/useSlotProps';
8
7
  import composeClasses from '@mui/utils/composeClasses';
9
8
  import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
10
- import { getPickersYearUtilityClass, pickersYearClasses } from "./pickersYearClasses.js";
11
9
  import { usePickerPrivateContext } from "../internals/hooks/usePickerPrivateContext.js";
10
+ import { getYearCalendarUtilityClass, yearCalendarClasses } from "./yearCalendarClasses.js";
12
11
  import { jsx as _jsx } from "react/jsx-runtime";
13
12
  const useUtilityClasses = (classes, ownerState) => {
14
13
  const slots = {
15
- root: ['root'],
16
- yearButton: ['yearButton', ownerState.isYearDisabled && 'disabled', ownerState.isYearSelected && 'selected']
14
+ button: ['button', ownerState.isYearDisabled && 'disabled', ownerState.isYearSelected && 'selected']
17
15
  };
18
- return composeClasses(slots, getPickersYearUtilityClass, classes);
16
+ return composeClasses(slots, getYearCalendarUtilityClass, classes);
19
17
  };
20
- const PickersYearRoot = styled('div', {
21
- name: 'MuiPickersYear',
22
- slot: 'Root',
23
- overridesResolver: (_, styles) => [styles.root]
24
- })({
25
- display: 'flex',
26
- alignItems: 'center',
27
- justifyContent: 'center',
28
- flexBasis: '33.3%',
29
- variants: [{
30
- props: {
31
- yearsPerRow: 4
32
- },
33
- style: {
34
- flexBasis: '25%'
35
- }
36
- }]
37
- });
38
- const YearCalendarButton = styled('button', {
39
- name: 'MuiPickersYear',
40
- slot: 'YearButton',
41
- overridesResolver: (_, styles) => [styles.yearButton, {
42
- [`&.${pickersYearClasses.disabled}`]: styles.disabled
18
+ const DefaultYearButton = styled('button', {
19
+ name: 'MuiYearCalendar',
20
+ slot: 'Button',
21
+ overridesResolver: (_, styles) => [styles.button, {
22
+ [`&.${yearCalendarClasses.disabled}`]: styles.disabled
43
23
  }, {
44
- [`&.${pickersYearClasses.selected}`]: styles.selected
24
+ [`&.${yearCalendarClasses.selected}`]: styles.selected
45
25
  }]
46
26
  })(({
47
27
  theme
@@ -51,7 +31,6 @@ const YearCalendarButton = styled('button', {
51
31
  border: 0,
52
32
  outline: 0
53
33
  }, theme.typography.subtitle1, {
54
- margin: '6px 0',
55
34
  height: 36,
56
35
  width: 72,
57
36
  borderRadius: 18,
@@ -66,10 +45,10 @@ const YearCalendarButton = styled('button', {
66
45
  cursor: 'auto',
67
46
  pointerEvents: 'none'
68
47
  },
69
- [`&.${pickersYearClasses.disabled}`]: {
48
+ [`&.${yearCalendarClasses.disabled}`]: {
70
49
  color: (theme.vars || theme).palette.text.secondary
71
50
  },
72
- [`&.${pickersYearClasses.selected}`]: {
51
+ [`&.${yearCalendarClasses.selected}`]: {
73
52
  color: (theme.vars || theme).palette.primary.contrastText,
74
53
  backgroundColor: (theme.vars || theme).palette.primary.main,
75
54
  '&:focus, &:hover': {
@@ -81,28 +60,17 @@ const YearCalendarButton = styled('button', {
81
60
  /**
82
61
  * @ignore - internal component.
83
62
  */
84
- export const PickersYear = /*#__PURE__*/React.memo(function PickersYear(inProps) {
85
- const props = useThemeProps({
86
- props: inProps,
87
- name: 'MuiPickersYear'
88
- });
63
+ export const YearCalendarButton = /*#__PURE__*/React.memo(function YearCalendarButton(props) {
89
64
  const {
90
65
  autoFocus,
91
- className,
92
66
  classes: classesProp,
93
- children,
94
- disabled = false,
95
- selected = false,
67
+ disabled,
68
+ selected,
96
69
  value,
97
- tabIndex,
98
70
  onClick,
99
71
  onKeyDown,
100
72
  onFocus,
101
73
  onBlur,
102
- 'aria-current': ariaCurrent
103
- // We don't want to forward this prop to the root element
104
- ,
105
-
106
74
  slots,
107
75
  slotProps
108
76
  } = props,
@@ -124,18 +92,16 @@ export const PickersYear = /*#__PURE__*/React.memo(function PickersYear(inProps)
124
92
  ref.current?.focus();
125
93
  }
126
94
  }, [autoFocus]);
127
- const YearButton = slots?.yearButton ?? YearCalendarButton;
95
+ const YearButton = slots?.yearButton ?? DefaultYearButton;
128
96
  const yearButtonProps = useSlotProps({
129
97
  elementType: YearButton,
130
98
  externalSlotProps: slotProps?.yearButton,
99
+ externalForwardedProps: other,
131
100
  additionalProps: {
132
- children,
133
101
  disabled,
134
- tabIndex,
135
102
  ref,
136
103
  type: 'button',
137
104
  role: 'radio',
138
- 'aria-current': ariaCurrent,
139
105
  'aria-checked': selected,
140
106
  onClick: event => onClick(event, value),
141
107
  onKeyDown: event => onKeyDown(event, value),
@@ -143,12 +109,7 @@ export const PickersYear = /*#__PURE__*/React.memo(function PickersYear(inProps)
143
109
  onBlur: event => onBlur(event, value)
144
110
  },
145
111
  ownerState,
146
- className: classes.yearButton
112
+ className: classes.button
147
113
  });
148
- return /*#__PURE__*/_jsx(PickersYearRoot, _extends({
149
- className: clsx(classes.root, className),
150
- ownerState: ownerState
151
- }, other, {
152
- children: /*#__PURE__*/_jsx(YearButton, _extends({}, yearButtonProps))
153
- }));
114
+ return /*#__PURE__*/_jsx(YearButton, _extends({}, yearButtonProps));
154
115
  });
@@ -1,3 +1,2 @@
1
1
  export { YearCalendar } from "./YearCalendar.js";
2
- export { yearCalendarClasses, getYearCalendarUtilityClass } from "./yearCalendarClasses.js";
3
- export { pickersYearClasses } from "./pickersYearClasses.js";
2
+ export { yearCalendarClasses, getYearCalendarUtilityClass } from "./yearCalendarClasses.js";
@@ -2,4 +2,4 @@ import { unstable_generateUtilityClass as generateUtilityClass, unstable_generat
2
2
  export function getYearCalendarUtilityClass(slot) {
3
3
  return generateUtilityClass('MuiYearCalendar', slot);
4
4
  }
5
- export const yearCalendarClasses = generateUtilityClasses('MuiYearCalendar', ['root']);
5
+ export const yearCalendarClasses = generateUtilityClasses('MuiYearCalendar', ['root', 'button', 'disabled', 'selected']);
@@ -2,4 +2,5 @@ export { useClearableField } from "./useClearableField.js";
2
2
  export { usePickerTranslations } from "./usePickerTranslations.js";
3
3
  export { useSplitFieldProps } from "./useSplitFieldProps.js";
4
4
  export { useParsedFormat } from "./useParsedFormat.js";
5
- export { usePickerContext } from "./usePickerContext.js";
5
+ export { usePickerContext } from "./usePickerContext.js";
6
+ export { usePickerActionsContext } from "./usePickerActionsContext.js";
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { PickerActionsContext } from "../internals/components/PickerProvider.js";
5
+
6
+ /**
7
+ * Returns a subset of the context passed by the picker wrapping the current component.
8
+ * It only contains the actions and never causes a re-render of the component using it.
9
+ */
10
+ export const usePickerActionsContext = () => {
11
+ const value = React.useContext(PickerActionsContext);
12
+ if (value == null) {
13
+ 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'));
14
+ }
15
+ return value;
16
+ };
@@ -2,7 +2,6 @@
2
2
 
3
3
  import * as React from 'react';
4
4
  import { PickerContext } from "../internals/components/PickerProvider.js";
5
-
6
5
  /**
7
6
  * Returns the context passed by the picker that wraps the current component.
8
7
  */
package/modern/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
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import { LocalizationProvider } from "../../LocalizationProvider/index.js";
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
4
  export const PickerContext = /*#__PURE__*/React.createContext(null);
5
+ export const PickerActionsContext = /*#__PURE__*/React.createContext(null);
5
6
  export const PickerPrivateContext = /*#__PURE__*/React.createContext({
6
7
  ownerState: {
7
8
  isPickerDisabled: false,
@@ -10,7 +11,8 @@ export const PickerPrivateContext = /*#__PURE__*/React.createContext({
10
11
  isPickerOpen: false,
11
12
  pickerVariant: 'desktop',
12
13
  pickerOrientation: 'portrait'
13
- }
14
+ },
15
+ dismissViews: () => {}
14
16
  });
15
17
 
16
18
  /**
@@ -23,17 +25,21 @@ export const PickerPrivateContext = /*#__PURE__*/React.createContext({
23
25
  export function PickerProvider(props) {
24
26
  const {
25
27
  contextValue,
28
+ actionsContextValue,
26
29
  privateContextValue,
27
30
  localeText,
28
31
  children
29
32
  } = props;
30
33
  return /*#__PURE__*/_jsx(PickerContext.Provider, {
31
34
  value: contextValue,
32
- children: /*#__PURE__*/_jsx(PickerPrivateContext.Provider, {
33
- value: privateContextValue,
34
- children: /*#__PURE__*/_jsx(LocalizationProvider, {
35
- localeText: localeText,
36
- children: children
35
+ children: /*#__PURE__*/_jsx(PickerActionsContext.Provider, {
36
+ value: actionsContextValue,
37
+ children: /*#__PURE__*/_jsx(PickerPrivateContext.Provider, {
38
+ value: privateContextValue,
39
+ children: /*#__PURE__*/_jsx(LocalizationProvider, {
40
+ localeText: localeText,
41
+ children: children
42
+ })
37
43
  })
38
44
  })
39
45
  });
@@ -38,7 +38,7 @@ const PickersArrowSwitcherButton = styled(IconButton, {
38
38
  })({
39
39
  variants: [{
40
40
  props: {
41
- hidden: true
41
+ isButtonHidden: true
42
42
  },
43
43
  style: {
44
44
  visibility: 'hidden'
@@ -109,7 +109,7 @@ export const PickersArrowSwitcher = /*#__PURE__*/React.forwardRef(function Picke
109
109
  onClick: previousProps.goTo
110
110
  },
111
111
  ownerState: _extends({}, ownerState, {
112
- hidden: previousProps.isHidden ?? false
112
+ isButtonHidden: previousProps.isHidden ?? false
113
113
  }),
114
114
  className: clsx(classes.button, classes.previousIconButton)
115
115
  });
@@ -126,7 +126,7 @@ export const PickersArrowSwitcher = /*#__PURE__*/React.forwardRef(function Picke
126
126
  onClick: nextProps.goTo
127
127
  },
128
128
  ownerState: _extends({}, ownerState, {
129
- hidden: nextProps.isHidden ?? false
129
+ isButtonHidden: nextProps.isHidden ?? false
130
130
  }),
131
131
  className: clsx(classes.button, classes.nextIconButton)
132
132
  });
@@ -5,6 +5,8 @@ import Fade from '@mui/material/Fade';
5
5
  import MuiDialog, { dialogClasses } from '@mui/material/Dialog';
6
6
  import { styled } from '@mui/material/styles';
7
7
  import { DIALOG_WIDTH } from "../constants/dimensions.js";
8
+ import { usePickerContext } from "../../hooks/index.js";
9
+ import { usePickerPrivateContext } from "../hooks/usePickerPrivateContext.js";
8
10
  import { jsx as _jsx } from "react/jsx-runtime";
9
11
  const PickersModalDialogRoot = styled(MuiDialog)({
10
12
  [`& .${dialogClasses.container}`]: {
@@ -23,16 +25,20 @@ const PickersModalDialogContent = styled(DialogContent)({
23
25
  export function PickersModalDialog(props) {
24
26
  const {
25
27
  children,
26
- onDismiss,
27
- open,
28
28
  slots,
29
29
  slotProps
30
30
  } = props;
31
+ const {
32
+ open
33
+ } = usePickerContext();
34
+ const {
35
+ dismissViews
36
+ } = usePickerPrivateContext();
31
37
  const Dialog = slots?.dialog ?? PickersModalDialogRoot;
32
38
  const Transition = slots?.mobileTransition ?? Fade;
33
39
  return /*#__PURE__*/_jsx(Dialog, _extends({
34
40
  open: open,
35
- onClose: onDismiss
41
+ onClose: dismissViews
36
42
  }, slotProps?.dialog, {
37
43
  TransitionComponent: Transition,
38
44
  TransitionProps: slotProps?.mobileTransition,
@@ -14,6 +14,7 @@ import { getPickersPopperUtilityClass } from "./pickersPopperClasses.js";
14
14
  import { getActiveElement } from "../utils/utils.js";
15
15
  import { useDefaultReduceAnimations } from "../hooks/useDefaultReduceAnimations.js";
16
16
  import { usePickerPrivateContext } from "../hooks/usePickerPrivateContext.js";
17
+ import { usePickerContext } from "../../hooks/index.js";
17
18
  import { jsx as _jsx } from "react/jsx-runtime";
18
19
  const useUtilityClasses = classes => {
19
20
  const slots = {
@@ -210,8 +211,6 @@ export function PickersPopper(inProps) {
210
211
  containerRef = null,
211
212
  shouldRestoreFocus,
212
213
  onBlur,
213
- onDismiss,
214
- open,
215
214
  role,
216
215
  placement = 'bottom',
217
216
  slots,
@@ -219,17 +218,23 @@ export function PickersPopper(inProps) {
219
218
  reduceAnimations: inReduceAnimations,
220
219
  classes: classesProp
221
220
  } = props;
221
+ const {
222
+ open
223
+ } = usePickerContext();
224
+ const {
225
+ dismissViews
226
+ } = usePickerPrivateContext();
222
227
  React.useEffect(() => {
223
228
  function handleKeyDown(nativeEvent) {
224
229
  if (open && nativeEvent.key === 'Escape') {
225
- onDismiss();
230
+ dismissViews();
226
231
  }
227
232
  }
228
233
  document.addEventListener('keydown', handleKeyDown);
229
234
  return () => {
230
235
  document.removeEventListener('keydown', handleKeyDown);
231
236
  };
232
- }, [onDismiss, open]);
237
+ }, [dismissViews, open]);
233
238
  const lastFocusedElementRef = React.useRef(null);
234
239
  React.useEffect(() => {
235
240
  if (role === 'tooltip' || shouldRestoreFocus && !shouldRestoreFocus()) {
@@ -247,7 +252,7 @@ export function PickersPopper(inProps) {
247
252
  });
248
253
  }
249
254
  }, [open, role, shouldRestoreFocus]);
250
- const [clickAwayRef, onPaperClick, onPaperTouchStart] = useClickAwayListener(open, onBlur ?? onDismiss);
255
+ const [clickAwayRef, onPaperClick, onPaperTouchStart] = useClickAwayListener(open, onBlur ?? dismissViews);
251
256
  const paperRef = React.useRef(null);
252
257
  const handleRef = useForkRef(paperRef, containerRef);
253
258
  const handlePaperRef = useForkRef(handleRef, clickAwayRef);
@@ -264,7 +269,7 @@ export function PickersPopper(inProps) {
264
269
  if (event.key === 'Escape') {
265
270
  // stop the propagation to avoid closing parent modal
266
271
  event.stopPropagation();
267
- onDismiss();
272
+ dismissViews();
268
273
  }
269
274
  };
270
275
  const Transition = slots?.desktopTransition ?? reduceAnimations ? Fade : Grow;
@@ -52,8 +52,6 @@ export const useDesktopPicker = _ref => {
52
52
  const labelId = useId();
53
53
  const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
54
54
  const {
55
- open,
56
- actions,
57
55
  hasUIView,
58
56
  layoutProps,
59
57
  providerProps,
@@ -85,7 +83,11 @@ export const useDesktopPicker = _ref => {
85
83
  externalSlotProps: innerSlotProps?.openPickerButton,
86
84
  additionalProps: {
87
85
  disabled: disabled || readOnly,
88
- onClick: open ? actions.onClose : actions.onOpen,
86
+ // This direct access to `providerProps` will go away in https://github.com/mui/mui-x/pull/15671
87
+ onClick: event => {
88
+ event.preventDefault();
89
+ providerProps.contextValue.setOpen(prevOpen => !prevOpen);
90
+ },
89
91
  'aria-label': getOpenDialogAriaText(pickerFieldProps.value),
90
92
  edge: inputAdornmentProps.position
91
93
  },
@@ -121,7 +123,7 @@ export const useDesktopPicker = _ref => {
121
123
  sx,
122
124
  label,
123
125
  name,
124
- focused: open ? true : undefined
126
+ focused: providerProps.contextValue.open ? true : undefined
125
127
  }, isToolbarHidden && {
126
128
  id: labelId
127
129
  }, !!inputRef && {
@@ -170,12 +172,10 @@ export const useDesktopPicker = _ref => {
170
172
  slots: slotsForField,
171
173
  slotProps: slotProps,
172
174
  unstableFieldRef: handleFieldRef
173
- })), /*#__PURE__*/_jsx(PickersPopper, _extends({
175
+ })), /*#__PURE__*/_jsx(PickersPopper, {
174
176
  role: "dialog",
175
177
  placement: "bottom-start",
176
- anchorEl: containerRef.current
177
- }, actions, {
178
- open: open,
178
+ anchorEl: containerRef.current,
179
179
  slots: slots,
180
180
  slotProps: slotProps,
181
181
  shouldRestoreFocus: shouldRestoreFocus,
@@ -185,7 +185,7 @@ export const useDesktopPicker = _ref => {
185
185
  slotProps: slotProps,
186
186
  children: renderCurrentView()
187
187
  }))
188
- }))]
188
+ })]
189
189
  }));
190
190
  return {
191
191
  renderPicker
@@ -1,12 +1,16 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import * as React from 'react';
3
+ import { useRtl } from '@mui/system/RtlProvider';
3
4
  import { usePickerPrivateContext } from "./usePickerPrivateContext.js";
4
5
  export function useFieldOwnerState(parameters) {
5
6
  const {
6
7
  ownerState: pickerOwnerState
7
8
  } = usePickerPrivateContext();
9
+ const isRtl = useRtl();
8
10
  return React.useMemo(() => _extends({}, pickerOwnerState, {
9
11
  isFieldDisabled: parameters.disabled ?? false,
10
- isFieldReadOnly: parameters.readOnly ?? false
11
- }), [pickerOwnerState, parameters.disabled, parameters.readOnly]);
12
+ isFieldReadOnly: parameters.readOnly ?? false,
13
+ isFieldRequired: parameters.required ?? false,
14
+ fieldDirection: isRtl ? 'rtl' : 'ltr'
15
+ }), [pickerOwnerState, parameters.disabled, parameters.readOnly, parameters.required, isRtl]);
12
16
  }
@@ -46,8 +46,6 @@ export const useMobilePicker = _ref => {
46
46
  const labelId = useId();
47
47
  const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
48
48
  const {
49
- open,
50
- actions,
51
49
  layoutProps,
52
50
  providerProps,
53
51
  renderCurrentView,
@@ -86,8 +84,12 @@ export const useMobilePicker = _ref => {
86
84
  }, isToolbarHidden && {
87
85
  id: labelId
88
86
  }, !(disabled || readOnly) && {
89
- onClick: actions.onOpen,
90
- onKeyDown: onSpaceOrEnter(actions.onOpen)
87
+ // These direct access to `providerProps` will go away in https://github.com/mui/mui-x/pull/15671
88
+ onClick: event => {
89
+ event.preventDefault();
90
+ providerProps.contextValue.setOpen(true);
91
+ },
92
+ onKeyDown: onSpaceOrEnter(() => providerProps.contextValue.setOpen(true))
91
93
  }, !!inputRef && {
92
94
  inputRef
93
95
  }),
@@ -124,8 +126,7 @@ export const useMobilePicker = _ref => {
124
126
  slots: slotsForField,
125
127
  slotProps: slotProps,
126
128
  unstableFieldRef: handleFieldRef
127
- })), /*#__PURE__*/_jsx(PickersModalDialog, _extends({}, actions, {
128
- open: open,
129
+ })), /*#__PURE__*/_jsx(PickersModalDialog, {
129
130
  slots: slots,
130
131
  slotProps: slotProps,
131
132
  children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps?.layout, {
@@ -133,7 +134,7 @@ export const useMobilePicker = _ref => {
133
134
  slotProps: slotProps,
134
135
  children: renderCurrentView()
135
136
  }))
136
- }))]
137
+ })]
137
138
  }));
138
139
  return {
139
140
  renderPicker