@mui/x-date-pickers 5.0.2 → 6.0.0-alpha.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 (252) hide show
  1. package/CHANGELOG.md +212 -3
  2. package/CalendarPicker/CalendarPicker.d.ts +8 -2
  3. package/CalendarPicker/CalendarPicker.js +54 -71
  4. package/CalendarPicker/DayPicker.d.ts +2 -2
  5. package/CalendarPicker/DayPicker.js +6 -2
  6. package/CalendarPicker/PickersCalendarHeader.d.ts +3 -10
  7. package/CalendarPicker/PickersCalendarHeader.js +7 -20
  8. package/CalendarPicker/useCalendarState.d.ts +2 -2
  9. package/CalendarPicker/useCalendarState.js +7 -7
  10. package/ClockPicker/Clock.d.ts +9 -4
  11. package/ClockPicker/Clock.js +13 -13
  12. package/ClockPicker/ClockNumbers.d.ts +3 -3
  13. package/ClockPicker/ClockNumbers.js +2 -2
  14. package/ClockPicker/ClockPicker.d.ts +8 -58
  15. package/ClockPicker/ClockPicker.js +52 -128
  16. package/ClockPicker/ClockPointer.d.ts +1 -1
  17. package/ClockPicker/ClockPointer.js +4 -4
  18. package/DateField/useDateField.d.ts +1 -1
  19. package/DateField/useDateField.js +5 -1
  20. package/DatePicker/DatePicker.js +10 -20
  21. package/DateTimePicker/DateTimePicker.js +10 -39
  22. package/DesktopDatePicker/DesktopDatePicker.d.ts +1 -1
  23. package/DesktopDatePicker/DesktopDatePicker.js +14 -22
  24. package/DesktopDateTimePicker/DesktopDateTimePicker.d.ts +1 -1
  25. package/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -40
  26. package/DesktopTimePicker/DesktopTimePicker.d.ts +1 -1
  27. package/DesktopTimePicker/DesktopTimePicker.js +9 -21
  28. package/LocalizationProvider/LocalizationProvider.d.ts +10 -11
  29. package/LocalizationProvider/LocalizationProvider.js +31 -24
  30. package/MobileDatePicker/MobileDatePicker.d.ts +1 -1
  31. package/MobileDatePicker/MobileDatePicker.js +14 -22
  32. package/MobileDateTimePicker/MobileDateTimePicker.d.ts +1 -1
  33. package/MobileDateTimePicker/MobileDateTimePicker.js +13 -40
  34. package/MobileTimePicker/MobileTimePicker.d.ts +1 -1
  35. package/MobileTimePicker/MobileTimePicker.js +9 -21
  36. package/MonthPicker/MonthPicker.d.ts +12 -9
  37. package/MonthPicker/MonthPicker.js +60 -57
  38. package/MonthPicker/PickersMonth.d.ts +10 -7
  39. package/MonthPicker/PickersMonth.js +76 -44
  40. package/MonthPicker/pickersMonthClasses.d.ts +9 -1
  41. package/MonthPicker/pickersMonthClasses.js +1 -1
  42. package/PickersDay/PickersDay.d.ts +0 -6
  43. package/PickersDay/PickersDay.js +0 -5
  44. package/StaticDatePicker/StaticDatePicker.d.ts +1 -1
  45. package/StaticDatePicker/StaticDatePicker.js +17 -23
  46. package/StaticDateTimePicker/StaticDateTimePicker.d.ts +1 -1
  47. package/StaticDateTimePicker/StaticDateTimePicker.js +17 -42
  48. package/StaticTimePicker/StaticTimePicker.d.ts +1 -1
  49. package/StaticTimePicker/StaticTimePicker.js +17 -22
  50. package/TimePicker/TimePicker.js +5 -19
  51. package/YearPicker/PickersYear.d.ts +7 -6
  52. package/YearPicker/PickersYear.js +34 -23
  53. package/YearPicker/YearPicker.d.ts +21 -4
  54. package/YearPicker/YearPicker.js +109 -49
  55. package/YearPicker/pickersYearClasses.d.ts +1 -1
  56. package/index.js +1 -1
  57. package/internals/components/CalendarOrClockPicker/CalendarOrClockPicker.js +2 -2
  58. package/internals/components/PickerStaticWrapper/PickerStaticWrapper.d.ts +20 -6
  59. package/internals/components/PickerStaticWrapper/PickerStaticWrapper.js +38 -22
  60. package/internals/components/PickerStaticWrapper/index.d.ts +1 -1
  61. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.d.ts +3 -0
  62. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +166 -0
  63. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.types.d.ts +63 -0
  64. package/internals/{models/muiPickersAdapter.js → components/PickersArrowSwitcher/PickersArrowSwitcher.types.js} +0 -0
  65. package/internals/components/PickersArrowSwitcher/index.d.ts +2 -0
  66. package/internals/components/PickersArrowSwitcher/index.js +1 -0
  67. package/internals/components/{pickersArrowSwitcherClasses.d.ts → PickersArrowSwitcher/pickersArrowSwitcherClasses.d.ts} +0 -0
  68. package/internals/components/{pickersArrowSwitcherClasses.js → PickersArrowSwitcher/pickersArrowSwitcherClasses.js} +0 -0
  69. package/internals/components/PickersPopper.d.ts +2 -6
  70. package/internals/components/PickersPopper.js +5 -5
  71. package/internals/components/PickersToolbar.d.ts +1 -1
  72. package/internals/components/PickersToolbar.js +1 -2
  73. package/internals/components/PickersToolbarText.d.ts +1 -1
  74. package/internals/components/wrappers/DesktopTooltipWrapper.d.ts +1 -1
  75. package/internals/components/wrappers/DesktopTooltipWrapper.js +29 -24
  76. package/internals/components/wrappers/DesktopWrapper.d.ts +8 -3
  77. package/internals/components/wrappers/DesktopWrapper.js +26 -21
  78. package/internals/components/wrappers/MobileWrapper.d.ts +8 -3
  79. package/internals/components/wrappers/MobileWrapper.js +23 -18
  80. package/internals/hooks/useField/useField.interfaces.d.ts +0 -1
  81. package/internals/hooks/useField/useField.js +19 -23
  82. package/internals/hooks/useField/useField.utils.js +10 -2
  83. package/internals/hooks/useUtils.d.ts +5 -2
  84. package/internals/hooks/useUtils.js +11 -2
  85. package/internals/hooks/validation/useDateValidation.d.ts +4 -4
  86. package/internals/hooks/validation/useDateValidation.js +12 -2
  87. package/internals/index.d.ts +5 -5
  88. package/internals/index.js +3 -3
  89. package/internals/models/muiPickersAdapter.d.ts +12 -7
  90. package/internals/models/props/baseToolbarProps.d.ts +0 -8
  91. package/internals/models/props/staticPickerProps.d.ts +2 -8
  92. package/legacy/CalendarPicker/CalendarPicker.js +52 -69
  93. package/legacy/CalendarPicker/DayPicker.js +6 -2
  94. package/legacy/CalendarPicker/PickersCalendarHeader.js +7 -20
  95. package/legacy/CalendarPicker/useCalendarState.js +7 -7
  96. package/legacy/ClockPicker/Clock.js +13 -13
  97. package/legacy/ClockPicker/ClockNumbers.js +2 -2
  98. package/legacy/ClockPicker/ClockPicker.js +57 -133
  99. package/legacy/ClockPicker/ClockPointer.js +4 -4
  100. package/legacy/DateField/useDateField.js +5 -1
  101. package/legacy/DatePicker/DatePicker.js +10 -20
  102. package/legacy/DateTimePicker/DateTimePicker.js +10 -39
  103. package/legacy/DesktopDatePicker/DesktopDatePicker.js +13 -21
  104. package/legacy/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -40
  105. package/legacy/DesktopTimePicker/DesktopTimePicker.js +8 -20
  106. package/legacy/LocalizationProvider/LocalizationProvider.js +28 -23
  107. package/legacy/MobileDatePicker/MobileDatePicker.js +13 -21
  108. package/legacy/MobileDateTimePicker/MobileDateTimePicker.js +13 -40
  109. package/legacy/MobileTimePicker/MobileTimePicker.js +8 -20
  110. package/legacy/MonthPicker/MonthPicker.js +67 -62
  111. package/legacy/MonthPicker/PickersMonth.js +89 -57
  112. package/legacy/MonthPicker/pickersMonthClasses.js +1 -1
  113. package/legacy/PickersDay/PickersDay.js +0 -5
  114. package/legacy/StaticDatePicker/StaticDatePicker.js +17 -24
  115. package/legacy/StaticDateTimePicker/StaticDateTimePicker.js +17 -43
  116. package/legacy/StaticTimePicker/StaticTimePicker.js +17 -23
  117. package/legacy/TimePicker/TimePicker.js +5 -19
  118. package/legacy/YearPicker/PickersYear.js +35 -25
  119. package/legacy/YearPicker/YearPicker.js +111 -51
  120. package/legacy/index.js +1 -1
  121. package/legacy/internals/components/CalendarOrClockPicker/CalendarOrClockPicker.js +2 -2
  122. package/legacy/internals/components/PickerStaticWrapper/PickerStaticWrapper.js +41 -24
  123. package/legacy/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +180 -0
  124. package/legacy/internals/{models/muiPickersAdapter.js → components/PickersArrowSwitcher/PickersArrowSwitcher.types.js} +0 -0
  125. package/legacy/internals/components/PickersArrowSwitcher/index.js +1 -0
  126. package/legacy/internals/components/{pickersArrowSwitcherClasses.js → PickersArrowSwitcher/pickersArrowSwitcherClasses.js} +0 -0
  127. package/legacy/internals/components/PickersPopper.js +5 -5
  128. package/legacy/internals/components/PickersToolbar.js +1 -2
  129. package/legacy/internals/components/wrappers/DesktopTooltipWrapper.js +29 -24
  130. package/legacy/internals/components/wrappers/DesktopWrapper.js +26 -21
  131. package/legacy/internals/components/wrappers/MobileWrapper.js +22 -17
  132. package/legacy/internals/hooks/useField/useField.js +21 -23
  133. package/legacy/internals/hooks/useField/useField.utils.js +10 -2
  134. package/legacy/internals/hooks/useUtils.js +13 -2
  135. package/legacy/internals/hooks/validation/useDateValidation.js +12 -2
  136. package/legacy/internals/index.js +3 -3
  137. package/legacy/locales/faIR.js +52 -0
  138. package/legacy/locales/fiFI.js +61 -0
  139. package/legacy/locales/index.js +2 -0
  140. package/legacy/locales/isIS.js +0 -1
  141. package/locales/faIR.d.ts +35 -0
  142. package/locales/faIR.js +36 -0
  143. package/locales/fiFI.d.ts +35 -0
  144. package/locales/fiFI.js +45 -0
  145. package/locales/index.d.ts +2 -0
  146. package/locales/index.js +2 -0
  147. package/locales/isIS.js +0 -1
  148. package/locales/utils/pickersLocaleTextApi.d.ts +1 -0
  149. package/modern/CalendarPicker/CalendarPicker.js +54 -71
  150. package/modern/CalendarPicker/DayPicker.js +6 -2
  151. package/modern/CalendarPicker/PickersCalendarHeader.js +7 -20
  152. package/modern/CalendarPicker/useCalendarState.js +7 -7
  153. package/modern/ClockPicker/Clock.js +13 -13
  154. package/modern/ClockPicker/ClockNumbers.js +2 -2
  155. package/modern/ClockPicker/ClockPicker.js +52 -128
  156. package/modern/ClockPicker/ClockPointer.js +4 -4
  157. package/modern/DateField/useDateField.js +5 -1
  158. package/modern/DatePicker/DatePicker.js +10 -20
  159. package/modern/DateTimePicker/DateTimePicker.js +10 -39
  160. package/modern/DesktopDatePicker/DesktopDatePicker.js +14 -22
  161. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -40
  162. package/modern/DesktopTimePicker/DesktopTimePicker.js +9 -21
  163. package/modern/LocalizationProvider/LocalizationProvider.js +29 -24
  164. package/modern/MobileDatePicker/MobileDatePicker.js +14 -22
  165. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +13 -40
  166. package/modern/MobileTimePicker/MobileTimePicker.js +9 -21
  167. package/modern/MonthPicker/MonthPicker.js +60 -57
  168. package/modern/MonthPicker/PickersMonth.js +76 -44
  169. package/modern/MonthPicker/pickersMonthClasses.js +1 -1
  170. package/modern/PickersDay/PickersDay.js +0 -5
  171. package/modern/StaticDatePicker/StaticDatePicker.js +17 -23
  172. package/modern/StaticDateTimePicker/StaticDateTimePicker.js +17 -42
  173. package/modern/StaticTimePicker/StaticTimePicker.js +17 -22
  174. package/modern/TimePicker/TimePicker.js +5 -19
  175. package/modern/YearPicker/PickersYear.js +34 -23
  176. package/modern/YearPicker/YearPicker.js +109 -49
  177. package/modern/index.js +1 -1
  178. package/modern/internals/components/CalendarOrClockPicker/CalendarOrClockPicker.js +2 -2
  179. package/modern/internals/components/PickerStaticWrapper/PickerStaticWrapper.js +38 -22
  180. package/modern/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +164 -0
  181. package/modern/internals/{models/muiPickersAdapter.js → components/PickersArrowSwitcher/PickersArrowSwitcher.types.js} +0 -0
  182. package/modern/internals/components/PickersArrowSwitcher/index.js +1 -0
  183. package/modern/internals/components/{pickersArrowSwitcherClasses.js → PickersArrowSwitcher/pickersArrowSwitcherClasses.js} +0 -0
  184. package/modern/internals/components/PickersPopper.js +5 -5
  185. package/modern/internals/components/PickersToolbar.js +1 -2
  186. package/modern/internals/components/wrappers/DesktopTooltipWrapper.js +29 -24
  187. package/modern/internals/components/wrappers/DesktopWrapper.js +26 -21
  188. package/modern/internals/components/wrappers/MobileWrapper.js +23 -18
  189. package/modern/internals/hooks/useField/useField.js +19 -21
  190. package/modern/internals/hooks/useField/useField.utils.js +10 -2
  191. package/modern/internals/hooks/useUtils.js +11 -2
  192. package/modern/internals/hooks/validation/useDateValidation.js +12 -2
  193. package/modern/internals/index.js +3 -3
  194. package/modern/locales/faIR.js +36 -0
  195. package/modern/locales/fiFI.js +45 -0
  196. package/modern/locales/index.js +2 -0
  197. package/modern/locales/isIS.js +0 -1
  198. package/node/CalendarPicker/CalendarPicker.js +54 -71
  199. package/node/CalendarPicker/DayPicker.js +5 -1
  200. package/node/CalendarPicker/PickersCalendarHeader.js +7 -21
  201. package/node/CalendarPicker/useCalendarState.js +6 -6
  202. package/node/ClockPicker/Clock.js +12 -12
  203. package/node/ClockPicker/ClockNumbers.js +2 -2
  204. package/node/ClockPicker/ClockPicker.js +52 -129
  205. package/node/ClockPicker/ClockPointer.js +4 -4
  206. package/node/DateField/useDateField.js +5 -1
  207. package/node/DatePicker/DatePicker.js +10 -20
  208. package/node/DateTimePicker/DateTimePicker.js +10 -39
  209. package/node/DesktopDatePicker/DesktopDatePicker.js +14 -22
  210. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +13 -40
  211. package/node/DesktopTimePicker/DesktopTimePicker.js +9 -21
  212. package/node/LocalizationProvider/LocalizationProvider.js +31 -25
  213. package/node/MobileDatePicker/MobileDatePicker.js +14 -22
  214. package/node/MobileDateTimePicker/MobileDateTimePicker.js +13 -40
  215. package/node/MobileTimePicker/MobileTimePicker.js +9 -21
  216. package/node/MonthPicker/MonthPicker.js +61 -58
  217. package/node/MonthPicker/PickersMonth.js +71 -43
  218. package/node/MonthPicker/pickersMonthClasses.js +1 -1
  219. package/node/PickersDay/PickersDay.js +0 -5
  220. package/node/StaticDatePicker/StaticDatePicker.js +17 -23
  221. package/node/StaticDateTimePicker/StaticDateTimePicker.js +17 -42
  222. package/node/StaticTimePicker/StaticTimePicker.js +17 -22
  223. package/node/TimePicker/TimePicker.js +5 -19
  224. package/node/YearPicker/PickersYear.js +33 -22
  225. package/node/YearPicker/YearPicker.js +111 -49
  226. package/node/index.js +1 -1
  227. package/node/internals/components/CalendarOrClockPicker/CalendarOrClockPicker.js +2 -2
  228. package/node/internals/components/PickerStaticWrapper/PickerStaticWrapper.js +39 -22
  229. package/node/internals/components/{PickersArrowSwitcher.js → PickersArrowSwitcher/PickersArrowSwitcher.js} +102 -58
  230. package/node/internals/{models/muiPickersAdapter.js → components/PickersArrowSwitcher/PickersArrowSwitcher.types.js} +0 -0
  231. package/node/internals/components/PickersArrowSwitcher/index.js +13 -0
  232. package/node/internals/components/{pickersArrowSwitcherClasses.js → PickersArrowSwitcher/pickersArrowSwitcherClasses.js} +0 -0
  233. package/node/internals/components/PickersPopper.js +5 -5
  234. package/node/internals/components/PickersToolbar.js +1 -2
  235. package/node/internals/components/wrappers/DesktopTooltipWrapper.js +30 -24
  236. package/node/internals/components/wrappers/DesktopWrapper.js +27 -21
  237. package/node/internals/components/wrappers/MobileWrapper.js +24 -18
  238. package/node/internals/hooks/useField/useField.js +19 -23
  239. package/node/internals/hooks/useField/useField.utils.js +10 -2
  240. package/node/internals/hooks/useUtils.js +15 -2
  241. package/node/internals/hooks/validation/useDateValidation.js +14 -4
  242. package/node/internals/index.js +8 -2
  243. package/node/locales/faIR.js +45 -0
  244. package/node/locales/fiFI.js +54 -0
  245. package/node/locales/index.js +26 -0
  246. package/node/locales/isIS.js +0 -1
  247. package/package.json +4 -4
  248. package/themeAugmentation/props.d.ts +3 -3
  249. package/internals/components/PickersArrowSwitcher.d.ts +0 -62
  250. package/internals/components/PickersArrowSwitcher.js +0 -124
  251. package/legacy/internals/components/PickersArrowSwitcher.js +0 -128
  252. package/modern/internals/components/PickersArrowSwitcher.js +0 -124
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
2
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
- const _excluded = ["ToolbarComponent", "value", "onChange", "components", "componentsProps"];
3
+ const _excluded = ["ToolbarComponent", "value", "onChange", "components", "componentsProps", "localeText"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import { useTimePickerDefaultizedProps, timePickerValueManager } from '../TimePicker/shared';
@@ -35,7 +35,8 @@ export const MobileTimePicker = /*#__PURE__*/React.forwardRef(function MobileTim
35
35
  const {
36
36
  ToolbarComponent = TimePickerToolbar,
37
37
  components,
38
- componentsProps
38
+ componentsProps,
39
+ localeText
39
40
  } = props,
40
41
  other = _objectWithoutPropertiesLoose(props, _excluded);
41
42
 
@@ -51,6 +52,7 @@ export const MobileTimePicker = /*#__PURE__*/React.forwardRef(function MobileTim
51
52
  PureDateInputComponent: PureDateInput,
52
53
  components: components,
53
54
  componentsProps: componentsProps,
55
+ localeText: localeText,
54
56
  children: /*#__PURE__*/_jsx(CalendarOrClockPicker, _extends({}, pickerProps, {
55
57
  autoFocus: true,
56
58
  toolbarTitle: props.label || props.toolbarTitle,
@@ -138,25 +140,6 @@ process.env.NODE_ENV !== "production" ? MobileTimePicker.propTypes = {
138
140
  */
139
141
  disableOpenPicker: PropTypes.bool,
140
142
 
141
- /**
142
- * Accessible text that helps user to understand which time and view is selected.
143
- * @template TDate
144
- * @param {ClockPickerView} view The current view rendered.
145
- * @param {TDate | null} time The current time.
146
- * @param {MuiPickersAdapter<TDate>} adapter The current date adapter.
147
- * @returns {string} The clock label.
148
- * @deprecated Use the `localeText` prop of `LocalizationProvider` instead, see https://mui.com/x/react-date-pickers/localization
149
- * @default <TDate extends any>(
150
- * view: ClockView,
151
- * time: TDate | null,
152
- * adapter: MuiPickersAdapter<TDate>,
153
- * ) =>
154
- * `Select ${view}. ${
155
- * time === null ? 'No time selected' : `Selected time is ${adapter.format(time, 'fullTime')}`
156
- * }`
157
- */
158
- getClockLabelText: PropTypes.func,
159
-
160
143
  /**
161
144
  * Get aria-label text for control that opens picker dialog. Aria-label text must include selected date. @DateIOType
162
145
  * @template TInputDate, TDate
@@ -187,6 +170,11 @@ process.env.NODE_ENV !== "production" ? MobileTimePicker.propTypes = {
187
170
  })]),
188
171
  label: PropTypes.node,
189
172
 
173
+ /**
174
+ * Locale for components texts
175
+ */
176
+ localeText: PropTypes.object,
177
+
190
178
  /**
191
179
  * Custom mask. Can be used to override generate from format. (e.g. `__/__/____ __:__` or `__/__/____ __:__ _M`).
192
180
  */
@@ -1,11 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { SxProps } from '@mui/system';
3
3
  import { Theme } from '@mui/material/styles';
4
- import { NonNullablePickerChangeHandler } from '../internals/hooks/useViews';
5
4
  import { MonthPickerClasses } from './monthPickerClasses';
6
5
  import { BaseDateValidationProps, MonthValidationProps } from '../internals/hooks/validation/models';
7
6
  import { DefaultizedProps } from '../internals/models/helpers';
8
7
  export interface MonthPickerProps<TDate> extends MonthValidationProps<TDate>, BaseDateValidationProps<TDate> {
8
+ autoFocus?: boolean;
9
9
  /**
10
10
  * className applied to the root element.
11
11
  */
@@ -14,24 +14,27 @@ export interface MonthPickerProps<TDate> extends MonthValidationProps<TDate>, Ba
14
14
  * Override or extend the styles applied to the component.
15
15
  */
16
16
  classes?: Partial<MonthPickerClasses>;
17
+ /**
18
+ * The system prop that allows defining system overrides as well as additional CSS styles.
19
+ */
20
+ sx?: SxProps<Theme>;
17
21
  /** Date value for the MonthPicker */
18
- date: TDate | null;
22
+ value: TDate | null;
19
23
  /** If `true` picker is disabled */
20
24
  disabled?: boolean;
21
- /** Callback fired on date change. */
22
- onChange: NonNullablePickerChangeHandler<TDate>;
23
- /** If `true` picker is readonly */
24
- readOnly?: boolean;
25
25
  /**
26
- * The system prop that allows defining system overrides as well as additional CSS styles.
26
+ * Callback fired when the value (the selected month) changes.
27
+ * @template TValue
28
+ * @param {TValue} value The new parsed value.
27
29
  */
28
- sx?: SxProps<Theme>;
30
+ onChange: (value: TDate) => void;
31
+ /** If `true` picker is readonly */
32
+ readOnly?: boolean;
29
33
  /**
30
34
  * If `true`, today's date is rendering without highlighting with circle.
31
35
  * @default false
32
36
  */
33
37
  disableHighlightToday?: boolean;
34
- autoFocus?: boolean;
35
38
  onMonthFocus?: (month: number) => void;
36
39
  hasFocus?: boolean;
37
40
  onFocusedViewChange?: (newHasFocus: boolean) => void;
@@ -1,12 +1,12 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["className", "date", "disabled", "disableFuture", "disablePast", "maxDate", "minDate", "onChange", "shouldDisableMonth", "readOnly", "disableHighlightToday", "autoFocus", "onMonthFocus", "hasFocus", "onFocusedViewChange"];
3
+ const _excluded = ["className", "value", "disabled", "disableFuture", "disablePast", "maxDate", "minDate", "onChange", "shouldDisableMonth", "readOnly", "disableHighlightToday", "autoFocus", "onMonthFocus", "hasFocus", "onFocusedViewChange"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
7
7
  import { useTheme } from '@mui/system';
8
8
  import { styled, useThemeProps } from '@mui/material/styles';
9
- import { unstable_composeClasses as composeClasses, useControlled, useEventCallback } from '@mui/material';
9
+ import { unstable_useControlled as useControlled, unstable_composeClasses as composeClasses, unstable_useEventCallback as useEventCallback } from '@mui/utils';
10
10
  import { PickersMonth } from './PickersMonth';
11
11
  import { useUtils, useNow, useDefaultDates } from '../internals/hooks/useUtils';
12
12
  import { getMonthPickerUtilityClass } from './monthPickerClasses';
@@ -50,13 +50,14 @@ const MonthPickerRoot = styled('div', {
50
50
  margin: '0 4px'
51
51
  });
52
52
  export const MonthPicker = /*#__PURE__*/React.forwardRef(function MonthPicker(inProps, ref) {
53
- const utils = useUtils();
54
53
  const now = useNow();
54
+ const theme = useTheme();
55
+ const utils = useUtils();
55
56
  const props = useMonthPickerDefaultizedProps(inProps, 'MuiMonthPicker');
56
57
 
57
58
  const {
58
59
  className,
59
- date,
60
+ value,
60
61
  disabled,
61
62
  disableFuture,
62
63
  disablePast,
@@ -75,11 +76,11 @@ export const MonthPicker = /*#__PURE__*/React.forwardRef(function MonthPicker(in
75
76
 
76
77
  const ownerState = props;
77
78
  const classes = useUtilityClasses(ownerState);
78
- const theme = useTheme();
79
- const selectedDateOrToday = date != null ? date : now;
79
+ const todayMonth = React.useMemo(() => utils.getMonth(now), [utils, now]);
80
+ const selectedDateOrToday = value != null ? value : now;
80
81
  const selectedMonth = React.useMemo(() => {
81
- if (date != null) {
82
- return utils.getMonth(date);
82
+ if (value != null) {
83
+ return utils.getMonth(value);
83
84
  }
84
85
 
85
86
  if (disableHighlightToday) {
@@ -87,9 +88,22 @@ export const MonthPicker = /*#__PURE__*/React.forwardRef(function MonthPicker(in
87
88
  }
88
89
 
89
90
  return utils.getMonth(now);
90
- }, [now, date, utils, disableHighlightToday]);
91
- const [focusedMonth, setFocusedMonth] = React.useState(() => selectedMonth || utils.getMonth(now));
92
- const isMonthDisabled = React.useCallback(month => {
91
+ }, [now, value, utils, disableHighlightToday]);
92
+ const [focusedMonth, setFocusedMonth] = React.useState(() => selectedMonth || todayMonth);
93
+ const [internalHasFocus, setInternalHasFocus] = useControlled({
94
+ name: 'MonthPicker',
95
+ state: 'hasFocus',
96
+ controlled: hasFocus,
97
+ default: autoFocus
98
+ });
99
+ const changeHasFocus = useEventCallback(newHasFocus => {
100
+ setInternalHasFocus(newHasFocus);
101
+
102
+ if (onFocusedViewChange) {
103
+ onFocusedViewChange(newHasFocus);
104
+ }
105
+ });
106
+ const isMonthDisabled = useEventCallback(month => {
93
107
  const firstEnabledMonth = utils.startOfMonth(disablePast && utils.isAfter(now, minDate) ? now : minDate);
94
108
  const lastEnabledMonth = utils.startOfMonth(disableFuture && utils.isBefore(now, maxDate) ? now : maxDate);
95
109
 
@@ -106,31 +120,16 @@ export const MonthPicker = /*#__PURE__*/React.forwardRef(function MonthPicker(in
106
120
  }
107
121
 
108
122
  return shouldDisableMonth(month);
109
- }, [disableFuture, disablePast, maxDate, minDate, now, shouldDisableMonth, utils]);
110
-
111
- const onMonthSelect = month => {
123
+ });
124
+ const handleMonthSelection = useEventCallback((event, month) => {
112
125
  if (readOnly) {
113
126
  return;
114
127
  }
115
128
 
116
129
  const newDate = utils.setMonth(selectedDateOrToday, month);
117
- onChange(newDate, 'finish');
118
- };
119
-
120
- const [internalHasFocus, setInternalHasFocus] = useControlled({
121
- name: 'MonthPicker',
122
- state: 'hasFocus',
123
- controlled: hasFocus,
124
- default: autoFocus
130
+ onChange(newDate);
125
131
  });
126
- const changeHasFocus = React.useCallback(newHasFocus => {
127
- setInternalHasFocus(newHasFocus);
128
-
129
- if (onFocusedViewChange) {
130
- onFocusedViewChange(newHasFocus);
131
- }
132
- }, [setInternalHasFocus, onFocusedViewChange]);
133
- const focusMonth = React.useCallback(month => {
132
+ const focusMonth = useEventCallback(month => {
134
133
  if (!isMonthDisabled(utils.setMonth(selectedDateOrToday, month))) {
135
134
  setFocusedMonth(month);
136
135
  changeHasFocus(true);
@@ -139,32 +138,32 @@ export const MonthPicker = /*#__PURE__*/React.forwardRef(function MonthPicker(in
139
138
  onMonthFocus(month);
140
139
  }
141
140
  }
142
- }, [selectedDateOrToday, isMonthDisabled, utils, onMonthFocus, changeHasFocus]);
141
+ });
143
142
  React.useEffect(() => {
144
143
  setFocusedMonth(prevFocusedMonth => selectedMonth !== null && prevFocusedMonth !== selectedMonth ? selectedMonth : prevFocusedMonth);
145
144
  }, [selectedMonth]);
146
- const handleKeyDown = useEventCallback(event => {
145
+ const handleKeyDown = useEventCallback((event, month) => {
147
146
  const monthsInYear = 12;
148
147
  const monthsInRow = 3;
149
148
 
150
149
  switch (event.key) {
151
150
  case 'ArrowUp':
152
- focusMonth((monthsInYear + focusedMonth - monthsInRow) % monthsInYear);
151
+ focusMonth((monthsInYear + month - monthsInRow) % monthsInYear);
153
152
  event.preventDefault();
154
153
  break;
155
154
 
156
155
  case 'ArrowDown':
157
- focusMonth((monthsInYear + focusedMonth + monthsInRow) % monthsInYear);
156
+ focusMonth((monthsInYear + month + monthsInRow) % monthsInYear);
158
157
  event.preventDefault();
159
158
  break;
160
159
 
161
160
  case 'ArrowLeft':
162
- focusMonth((monthsInYear + focusedMonth + (theme.direction === 'ltr' ? -1 : 1)) % monthsInYear);
161
+ focusMonth((monthsInYear + month + (theme.direction === 'ltr' ? -1 : 1)) % monthsInYear);
163
162
  event.preventDefault();
164
163
  break;
165
164
 
166
165
  case 'ArrowRight':
167
- focusMonth((monthsInYear + focusedMonth + (theme.direction === 'ltr' ? 1 : -1)) % monthsInYear);
166
+ focusMonth((monthsInYear + month + (theme.direction === 'ltr' ? 1 : -1)) % monthsInYear);
168
167
  event.preventDefault();
169
168
  break;
170
169
 
@@ -172,33 +171,35 @@ export const MonthPicker = /*#__PURE__*/React.forwardRef(function MonthPicker(in
172
171
  break;
173
172
  }
174
173
  });
175
- const handleMonthFocus = React.useCallback((event, month) => {
174
+ const handleMonthFocus = useEventCallback((event, month) => {
176
175
  focusMonth(month);
177
- }, [focusMonth]);
178
- const handleMonthBlur = React.useCallback(() => {
179
- changeHasFocus(false);
180
- }, [changeHasFocus]);
181
- const currentMonthNumber = utils.getMonth(now);
176
+ });
177
+ const handleMonthBlur = useEventCallback((event, month) => {
178
+ if (focusedMonth === month) {
179
+ changeHasFocus(false);
180
+ }
181
+ });
182
182
  return /*#__PURE__*/_jsx(MonthPickerRoot, _extends({
183
183
  ref: ref,
184
184
  className: clsx(classes.root, className),
185
- ownerState: ownerState,
186
- onKeyDown: handleKeyDown
185
+ ownerState: ownerState
187
186
  }, other, {
188
187
  children: utils.getMonthArray(selectedDateOrToday).map(month => {
189
188
  const monthNumber = utils.getMonth(month);
190
189
  const monthText = utils.format(month, 'monthShort');
190
+ const isSelected = monthNumber === selectedMonth;
191
191
  const isDisabled = disabled || isMonthDisabled(month);
192
192
  return /*#__PURE__*/_jsx(PickersMonth, {
193
+ selected: isSelected,
193
194
  value: monthNumber,
194
- selected: monthNumber === selectedMonth,
195
- tabIndex: monthNumber === focusedMonth && !isDisabled ? 0 : -1,
196
- hasFocus: internalHasFocus && monthNumber === focusedMonth,
197
- onSelect: onMonthSelect,
195
+ onClick: handleMonthSelection,
196
+ onKeyDown: handleKeyDown,
197
+ autoFocus: internalHasFocus && monthNumber === focusedMonth,
198
+ disabled: isDisabled,
199
+ tabIndex: monthNumber === focusedMonth ? 0 : -1,
198
200
  onFocus: handleMonthFocus,
199
201
  onBlur: handleMonthBlur,
200
- disabled: isDisabled,
201
- "aria-current": currentMonthNumber === monthNumber ? 'date' : undefined,
202
+ "aria-current": todayMonth === monthNumber ? 'date' : undefined,
202
203
  children: monthText
203
204
  }, monthText);
204
205
  })
@@ -221,11 +222,6 @@ process.env.NODE_ENV !== "production" ? MonthPicker.propTypes = {
221
222
  */
222
223
  className: PropTypes.string,
223
224
 
224
- /**
225
- * Date value for the MonthPicker
226
- */
227
- date: PropTypes.any,
228
-
229
225
  /**
230
226
  * If `true` picker is disabled
231
227
  */
@@ -261,7 +257,9 @@ process.env.NODE_ENV !== "production" ? MonthPicker.propTypes = {
261
257
  minDate: PropTypes.any,
262
258
 
263
259
  /**
264
- * Callback fired on date change.
260
+ * Callback fired when the value (the selected month) changes.
261
+ * @template TValue
262
+ * @param {TValue} value The new parsed value.
265
263
  */
266
264
  onChange: PropTypes.func.isRequired,
267
265
  onFocusedViewChange: PropTypes.func,
@@ -284,5 +282,10 @@ process.env.NODE_ENV !== "production" ? MonthPicker.propTypes = {
284
282
  /**
285
283
  * The system prop that allows defining system overrides as well as additional CSS styles.
286
284
  */
287
- sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
285
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
286
+
287
+ /**
288
+ * Date value for the MonthPicker
289
+ */
290
+ value: PropTypes.any
288
291
  } : void 0;
@@ -1,18 +1,21 @@
1
1
  import * as React from 'react';
2
2
  import { PickersMonthClasses } from './pickersMonthClasses';
3
- export interface MonthProps {
3
+ interface PickersMonthProps {
4
+ 'aria-current'?: React.AriaAttributes['aria-current'];
5
+ autoFocus: boolean;
4
6
  children: React.ReactNode;
7
+ classes?: Partial<PickersMonthClasses>;
5
8
  disabled?: boolean;
6
- onSelect: (value: number) => void;
9
+ onClick: (event: React.MouseEvent, month: number) => void;
10
+ onKeyDown: (event: React.KeyboardEvent, month: number) => void;
11
+ onFocus: (event: React.FocusEvent, month: number) => void;
12
+ onBlur: (event: React.FocusEvent, month: number) => void;
7
13
  selected?: boolean;
8
14
  value: number;
9
- hasFocus: boolean;
10
- onBlur: (event: React.FocusEvent, month: number) => void;
11
- onFocus: (event: React.FocusEvent, month: number) => void;
12
15
  tabIndex: number;
13
- classes?: Partial<PickersMonthClasses>;
14
16
  }
15
17
  /**
16
18
  * @ignore - do not document.
17
19
  */
18
- export declare const PickersMonth: React.FC<MonthProps>;
20
+ export declare const PickersMonth: React.MemoExoticComponent<(props: PickersMonthProps) => JSX.Element>;
21
+ export {};
@@ -1,39 +1,53 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["disabled", "onSelect", "selected", "value", "tabIndex", "hasFocus", "onFocus", "onBlur"];
3
+ const _excluded = ["autoFocus", "children", "disabled", "selected", "value", "tabIndex", "onClick", "onKeyDown", "onFocus", "onBlur", "aria-current"];
4
4
  import * as React from 'react';
5
- import Typography from '@mui/material/Typography';
6
5
  import { styled, alpha } from '@mui/material/styles';
7
6
  import { unstable_composeClasses as composeClasses } from '@mui/material';
8
- import { unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/material/utils';
9
- import { onSpaceOrEnter } from '../internals/utils/utils';
7
+ import { capitalize, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/material/utils';
8
+ import { WrapperVariantContext } from '../internals/components/wrappers/WrapperVariantContext';
10
9
  import { getPickersMonthUtilityClass, pickersMonthClasses } from './pickersMonthClasses';
11
10
  import { jsx as _jsx } from "react/jsx-runtime";
12
11
 
13
12
  const useUtilityClasses = ownerState => {
14
13
  const {
15
- classes,
16
- selected
14
+ wrapperVariant,
15
+ disabled,
16
+ selected,
17
+ classes
17
18
  } = ownerState;
18
19
  const slots = {
19
- root: ['root', selected && 'selected']
20
+ root: ['root', wrapperVariant && `mode${capitalize(wrapperVariant)}`],
21
+ monthButton: ['monthButton', disabled && 'disabled', selected && 'selected']
20
22
  };
21
23
  return composeClasses(slots, getPickersMonthUtilityClass, classes);
22
24
  };
23
25
 
24
- const PickersMonthRoot = styled(Typography, {
26
+ const PickersMonthRoot = styled('div', {
25
27
  name: 'PrivatePickersMonth',
26
28
  slot: 'Root',
27
29
  overridesResolver: (_, styles) => [styles.root, {
30
+ [`&.${pickersMonthClasses.modeDesktop}`]: styles.modeDesktop
31
+ }, {
32
+ [`&.${pickersMonthClasses.modeMobile}`]: styles.modeMobile
33
+ }]
34
+ })({
35
+ flexBasis: '33.3%',
36
+ display: 'flex',
37
+ alignItems: 'center',
38
+ justifyContent: 'center'
39
+ });
40
+ const PickersMonthButton = styled('button', {
41
+ name: 'PrivatePickersMonth',
42
+ slot: 'MonthButton',
43
+ overridesResolver: (_, styles) => [styles.monthButton, {
44
+ [`&.${pickersMonthClasses.disabled}`]: styles.disabled
45
+ }, {
28
46
  [`&.${pickersMonthClasses.selected}`]: styles.selected
29
47
  }]
30
48
  })(({
31
49
  theme
32
50
  }) => _extends({
33
- flex: '1 0 33.33%',
34
- display: 'flex',
35
- alignItems: 'center',
36
- justifyContent: 'center',
37
51
  color: 'unset',
38
52
  backgroundColor: 'transparent',
39
53
  border: 0,
@@ -41,13 +55,20 @@ const PickersMonthRoot = styled(Typography, {
41
55
  }, theme.typography.subtitle1, {
42
56
  margin: '8px 0',
43
57
  height: 36,
58
+ width: 72,
44
59
  borderRadius: 18,
45
60
  cursor: 'pointer',
46
- '&:focus, &:hover': {
61
+ '&:focus': {
62
+ backgroundColor: alpha(theme.palette.action.active, theme.palette.action.focusOpacity)
63
+ },
64
+ '&:hover': {
47
65
  backgroundColor: alpha(theme.palette.action.active, theme.palette.action.hoverOpacity)
48
66
  },
49
67
  '&:disabled': {
50
- pointerEvents: 'none',
68
+ cursor: 'auto',
69
+ pointerEvents: 'none'
70
+ },
71
+ [`&.${pickersMonthClasses.disabled}`]: {
51
72
  color: theme.palette.text.secondary
52
73
  },
53
74
  [`&.${pickersMonthClasses.selected}`]: {
@@ -58,53 +79,64 @@ const PickersMonthRoot = styled(Typography, {
58
79
  }
59
80
  }
60
81
  }));
61
-
62
- const noop = () => {};
63
82
  /**
64
83
  * @ignore - do not document.
65
84
  */
66
85
 
67
-
68
- export const PickersMonth = props => {
86
+ const PickersMonthRaw = props => {
69
87
  // TODO v6 add 'useThemeProps' once the component class names are aligned
70
88
  const {
89
+ autoFocus,
90
+ children,
71
91
  disabled,
72
- onSelect,
73
- selected,
74
92
  value,
75
93
  tabIndex,
76
- hasFocus,
77
- onFocus = noop,
78
- onBlur = noop
94
+ onClick,
95
+ onKeyDown,
96
+ onFocus,
97
+ onBlur,
98
+ 'aria-current': ariaCurrent
79
99
  } = props,
80
100
  other = _objectWithoutPropertiesLoose(props, _excluded);
81
101
 
82
- const classes = useUtilityClasses(props);
83
-
84
- const handleSelection = () => {
85
- onSelect(value);
86
- };
87
-
102
+ const wrapperVariant = React.useContext(WrapperVariantContext);
88
103
  const ref = React.useRef(null);
89
104
  useEnhancedEffect(() => {
90
- if (hasFocus) {
105
+ if (autoFocus) {
91
106
  var _ref$current;
92
107
 
93
108
  (_ref$current = ref.current) == null ? void 0 : _ref$current.focus();
94
109
  }
95
- }, [hasFocus]);
110
+ }, [autoFocus]);
111
+
112
+ const ownerState = _extends({}, props, {
113
+ wrapperVariant
114
+ });
115
+
116
+ const classes = useUtilityClasses(ownerState);
96
117
  return /*#__PURE__*/_jsx(PickersMonthRoot, _extends({
97
- ref: ref,
98
- component: "button",
99
- type: "button",
100
118
  className: classes.root,
101
- tabIndex: tabIndex,
102
- onClick: handleSelection,
103
- onKeyDown: onSpaceOrEnter(handleSelection),
104
- color: selected ? 'primary' : undefined,
105
- variant: selected ? 'h5' : 'subtitle1',
106
- disabled: disabled,
107
- onFocus: event => onFocus(event, value),
108
- onBlur: event => onBlur(event, value)
109
- }, other));
110
- };
119
+ ownerState: ownerState
120
+ }, other, {
121
+ children: /*#__PURE__*/_jsx(PickersMonthButton, {
122
+ ref: ref,
123
+ disabled: disabled,
124
+ type: "button",
125
+ tabIndex: disabled ? -1 : tabIndex,
126
+ "aria-current": ariaCurrent,
127
+ onClick: event => onClick(event, value),
128
+ onKeyDown: event => onKeyDown(event, value),
129
+ onFocus: event => onFocus(event, value),
130
+ onBlur: event => onBlur(event, value),
131
+ className: classes.monthButton,
132
+ ownerState: ownerState,
133
+ children: children
134
+ })
135
+ }));
136
+ };
137
+ /**
138
+ * @ignore - do not document.
139
+ */
140
+
141
+
142
+ export const PickersMonth = /*#__PURE__*/React.memo(PickersMonthRaw);
@@ -1,7 +1,15 @@
1
1
  export interface PickersMonthClasses {
2
2
  /** Styles applied to the root element. */
3
3
  root: string;
4
- /** Styles applied to a selected root element. */
4
+ /** Styles applied to the root element in mobile mode. */
5
+ modeMobile: string;
6
+ /** Styles applied to the root element in desktop mode. */
7
+ modeDesktop: string;
8
+ /** Styles applied to the month button element. */
9
+ monthButton: string;
10
+ /** Styles applied to a disabled month button element. */
11
+ disabled: string;
12
+ /** Styles applied to a selected month button element. */
5
13
  selected: string;
6
14
  }
7
15
  export declare type PickersMonthClassKey = keyof PickersMonthClasses;
@@ -4,4 +4,4 @@ export function getPickersMonthUtilityClass(slot) {
4
4
  return generateUtilityClass('PrivatePickersMonth', slot);
5
5
  }
6
6
  export const pickersMonthClasses = generateUtilityClasses( // TODO v6 Rename 'PrivatePickersMonth' to 'MuiPickersMonth' to follow convention
7
- 'PrivatePickersMonth', ['root', 'selected']);
7
+ 'PrivatePickersMonth', ['root', 'modeMobile', 'modeDesktop', 'monthButton', 'disabled', 'selected']);
@@ -1,7 +1,5 @@
1
1
  import * as React from 'react';
2
- import { SxProps } from '@mui/system';
3
2
  import { ButtonBaseProps } from '@mui/material/ButtonBase';
4
- import { Theme } from '@mui/material/styles';
5
3
  import { ExtendMui } from '../internals/models/helpers';
6
4
  import { PickerSelectionState } from '../internals/hooks/usePickerState';
7
5
  import { PickersDayClasses } from './pickersDayClasses';
@@ -53,10 +51,6 @@ export interface PickersDayProps<TDate> extends Omit<ExtendMui<ButtonBaseProps>,
53
51
  * @default false
54
52
  */
55
53
  today?: boolean;
56
- /**
57
- * The system prop that allows defining system overrides as well as additional CSS styles.
58
- */
59
- sx?: SxProps<Theme>;
60
54
  }
61
55
  declare type PickersDayComponent = (<TDate>(props: PickersDayProps<TDate> & React.RefAttributes<HTMLButtonElement>) => JSX.Element) & {
62
56
  propTypes?: any;
@@ -266,11 +266,6 @@ process.env.NODE_ENV !== "production" ? PickersDayRaw.propTypes = {
266
266
  */
267
267
  showDaysOutsideCurrentMonth: PropTypes.bool,
268
268
 
269
- /**
270
- * The system prop that allows defining system overrides as well as additional CSS styles.
271
- */
272
- sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
273
-
274
269
  /**
275
270
  * If `true`, renders as today date.
276
271
  * @default false
@@ -8,7 +8,7 @@ export interface StaticDatePickerSlotsComponent extends PickersStaticWrapperSlot
8
8
  }
9
9
  export interface StaticDatePickerSlotsComponentsProps extends PickersStaticWrapperSlotsComponentsProps, CalendarPickerSlotsComponentsProps {
10
10
  }
11
- export interface StaticDatePickerProps<TInputDate, TDate> extends StaticPickerProps<BaseDatePickerProps<TInputDate, TDate>> {
11
+ export interface StaticDatePickerProps<TInputDate, TDate> extends StaticPickerProps<TDate, BaseDatePickerProps<TInputDate, TDate>> {
12
12
  /**
13
13
  * Overrideable components.
14
14
  * @default {}