@mui/x-date-pickers 7.0.0-beta.7 → 7.1.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 (209) hide show
  1. package/AdapterDateFns/AdapterDateFns.js +1 -1
  2. package/AdapterDateFnsBase/AdapterDateFnsBase.js +1 -2
  3. package/AdapterDateFnsJalali/AdapterDateFnsJalali.js +2 -4
  4. package/AdapterDateFnsV3/AdapterDateFnsV3.js +1 -1
  5. package/AdapterDayjs/AdapterDayjs.js +2 -4
  6. package/AdapterLuxon/AdapterLuxon.js +12 -9
  7. package/AdapterMoment/AdapterMoment.js +5 -6
  8. package/CHANGELOG.md +266 -12
  9. package/DateCalendar/DateCalendar.js +14 -16
  10. package/DateCalendar/DayCalendar.js +5 -6
  11. package/DateField/DateField.js +3 -4
  12. package/DatePicker/DatePicker.js +1 -1
  13. package/DatePicker/DatePickerToolbar.js +11 -6
  14. package/DatePicker/shared.d.ts +2 -1
  15. package/DatePicker/shared.js +3 -5
  16. package/DateTimeField/DateTimeField.js +3 -4
  17. package/DateTimePicker/DateTimePicker.js +1 -1
  18. package/DateTimePicker/DateTimePickerToolbar.js +98 -46
  19. package/DateTimePicker/shared.d.ts +2 -1
  20. package/DateTimePicker/shared.js +11 -13
  21. package/DayCalendarSkeleton/DayCalendarSkeleton.js +12 -8
  22. package/DesktopDatePicker/DesktopDatePicker.js +7 -11
  23. package/DesktopDateTimePicker/DesktopDateTimePicker.js +72 -37
  24. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +12 -0
  25. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +101 -0
  26. package/DesktopDateTimePicker/index.d.ts +1 -0
  27. package/DesktopDateTimePicker/index.js +2 -1
  28. package/DesktopTimePicker/DesktopTimePicker.js +8 -12
  29. package/DigitalClock/DigitalClock.js +16 -9
  30. package/LocalizationProvider/LocalizationProvider.js +1 -2
  31. package/MobileDatePicker/MobileDatePicker.js +6 -10
  32. package/MobileDateTimePicker/MobileDateTimePicker.js +8 -12
  33. package/MobileTimePicker/MobileTimePicker.js +6 -10
  34. package/MonthCalendar/MonthCalendar.js +4 -4
  35. package/MonthCalendar/PickersMonth.js +13 -8
  36. package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +1 -1
  37. package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +1 -1
  38. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +16 -9
  39. package/PickersActionBar/PickersActionBar.js +1 -1
  40. package/PickersCalendarHeader/PickersCalendarHeader.js +17 -14
  41. package/PickersDay/PickersDay.js +30 -15
  42. package/PickersLayout/PickersLayout.js +31 -17
  43. package/PickersLayout/usePickerLayout.js +8 -9
  44. package/PickersSectionList/PickersSectionList.js +9 -11
  45. package/PickersTextField/PickersFilledInput/PickersFilledInput.js +138 -74
  46. package/PickersTextField/PickersInput/PickersInput.js +77 -55
  47. package/PickersTextField/PickersInputBase/PickersInputBase.js +67 -28
  48. package/PickersTextField/PickersInputBase/PickersInputBase.types.d.ts +7 -0
  49. package/PickersTextField/PickersOutlinedInput/Outline.js +58 -41
  50. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +33 -14
  51. package/README.md +1 -1
  52. package/StaticDatePicker/StaticDatePicker.js +4 -5
  53. package/StaticDateTimePicker/StaticDateTimePicker.js +6 -7
  54. package/StaticTimePicker/StaticTimePicker.js +3 -4
  55. package/TimeClock/Clock.js +48 -35
  56. package/TimeClock/ClockNumber.js +12 -7
  57. package/TimeClock/ClockPointer.js +23 -13
  58. package/TimeClock/TimeClock.js +1 -1
  59. package/TimeField/TimeField.js +2 -3
  60. package/TimePicker/TimePickerToolbar.js +25 -16
  61. package/TimePicker/shared.d.ts +2 -1
  62. package/TimePicker/shared.js +5 -7
  63. package/YearCalendar/PickersYear.js +12 -6
  64. package/YearCalendar/YearCalendar.js +5 -6
  65. package/hooks/useClearableField.js +6 -7
  66. package/index.js +1 -1
  67. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +19 -15
  68. package/internals/components/PickersModalDialog.js +6 -7
  69. package/internals/components/PickersPopper.js +25 -24
  70. package/internals/components/PickersToolbar.js +42 -24
  71. package/internals/hooks/date-helpers-hooks.js +1 -1
  72. package/internals/hooks/defaultizedFieldProps.js +15 -18
  73. package/internals/hooks/useClockReferenceDate.js +1 -1
  74. package/internals/hooks/useDesktopPicker/index.d.ts +1 -1
  75. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +11 -12
  76. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +2 -2
  77. package/internals/hooks/useField/buildSectionsFromFormat.js +35 -31
  78. package/internals/hooks/useField/useField.js +6 -4
  79. package/internals/hooks/useField/useField.types.d.ts +1 -0
  80. package/internals/hooks/useField/useField.utils.js +4 -7
  81. package/internals/hooks/useField/useFieldCharacterEditing.js +1 -2
  82. package/internals/hooks/useField/useFieldState.js +1 -1
  83. package/internals/hooks/useField/useFieldV6TextField.js +17 -18
  84. package/internals/hooks/useField/useFieldV7TextField.js +9 -11
  85. package/internals/hooks/useMobilePicker/useMobilePicker.js +7 -8
  86. package/internals/hooks/useOpenState.js +1 -1
  87. package/internals/hooks/usePicker/index.d.ts +1 -0
  88. package/internals/hooks/usePicker/usePickerViews.d.ts +4 -2
  89. package/internals/hooks/usePicker/usePickerViews.js +1 -2
  90. package/internals/hooks/useStaticPicker/useStaticPicker.js +13 -17
  91. package/internals/hooks/useValueWithTimezone.js +5 -6
  92. package/internals/hooks/useViews.js +3 -4
  93. package/internals/index.d.ts +1 -1
  94. package/internals/models/validation.d.ts +1 -1
  95. package/internals/utils/convertFieldResponseIntoMuiTextFieldProps.js +3 -3
  96. package/internals/utils/date-time-utils.js +2 -5
  97. package/internals/utils/fields.js +1 -1
  98. package/internals/utils/getDefaultReferenceDate.js +2 -6
  99. package/internals/utils/views.js +1 -1
  100. package/locales/csCZ.js +1 -4
  101. package/locales/daDK.js +1 -4
  102. package/locales/deDE.js +1 -4
  103. package/locales/huHU.js +1 -4
  104. package/locales/itIT.js +16 -20
  105. package/locales/jaJP.js +1 -4
  106. package/locales/roRO.js +1 -4
  107. package/locales/skSK.js +1 -4
  108. package/locales/zhHK.js +14 -17
  109. package/modern/AdapterLuxon/AdapterLuxon.js +9 -4
  110. package/modern/DateCalendar/DateCalendar.js +1 -1
  111. package/modern/DateField/DateField.js +1 -1
  112. package/modern/DatePicker/DatePicker.js +1 -1
  113. package/modern/DatePicker/DatePickerToolbar.js +11 -6
  114. package/modern/DateTimeField/DateTimeField.js +1 -1
  115. package/modern/DateTimePicker/DateTimePicker.js +1 -1
  116. package/modern/DateTimePicker/DateTimePickerToolbar.js +97 -45
  117. package/modern/DayCalendarSkeleton/DayCalendarSkeleton.js +12 -8
  118. package/modern/DesktopDatePicker/DesktopDatePicker.js +1 -1
  119. package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +64 -25
  120. package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +101 -0
  121. package/modern/DesktopDateTimePicker/index.js +2 -1
  122. package/modern/DigitalClock/DigitalClock.js +14 -6
  123. package/modern/MobileDatePicker/MobileDatePicker.js +1 -1
  124. package/modern/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
  125. package/modern/MonthCalendar/PickersMonth.js +12 -6
  126. package/modern/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +13 -4
  127. package/modern/PickersCalendarHeader/PickersCalendarHeader.js +13 -9
  128. package/modern/PickersDay/PickersDay.js +30 -15
  129. package/modern/PickersLayout/PickersLayout.js +31 -17
  130. package/modern/PickersTextField/PickersFilledInput/PickersFilledInput.js +137 -72
  131. package/modern/PickersTextField/PickersInput/PickersInput.js +76 -54
  132. package/modern/PickersTextField/PickersInputBase/PickersInputBase.js +64 -24
  133. package/modern/PickersTextField/PickersOutlinedInput/Outline.js +58 -41
  134. package/modern/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +31 -12
  135. package/modern/StaticDatePicker/StaticDatePicker.js +1 -1
  136. package/modern/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
  137. package/modern/TimeClock/Clock.js +48 -35
  138. package/modern/TimeClock/ClockNumber.js +12 -7
  139. package/modern/TimeClock/ClockPointer.js +23 -13
  140. package/modern/TimePicker/TimePickerToolbar.js +25 -16
  141. package/modern/YearCalendar/PickersYear.js +12 -6
  142. package/modern/index.js +1 -1
  143. package/modern/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -6
  144. package/modern/internals/components/PickersPopper.js +13 -9
  145. package/modern/internals/components/PickersToolbar.js +39 -18
  146. package/modern/internals/hooks/useField/buildSectionsFromFormat.js +34 -30
  147. package/modern/internals/hooks/useField/useField.js +4 -2
  148. package/modern/internals/hooks/useField/useFieldV6TextField.js +8 -3
  149. package/modern/internals/hooks/useField/useFieldV7TextField.js +1 -1
  150. package/modern/internals/hooks/useOpenState.js +1 -1
  151. package/modern/internals/utils/fields.js +1 -1
  152. package/modern/locales/itIT.js +16 -20
  153. package/modern/locales/zhHK.js +14 -17
  154. package/node/AdapterLuxon/AdapterLuxon.js +9 -4
  155. package/node/DateCalendar/DateCalendar.js +1 -1
  156. package/node/DateField/DateField.js +1 -1
  157. package/node/DatePicker/DatePicker.js +1 -1
  158. package/node/DatePicker/DatePickerToolbar.js +11 -6
  159. package/node/DateTimeField/DateTimeField.js +1 -1
  160. package/node/DateTimePicker/DateTimePicker.js +1 -1
  161. package/node/DateTimePicker/DateTimePickerToolbar.js +97 -45
  162. package/node/DayCalendarSkeleton/DayCalendarSkeleton.js +12 -8
  163. package/node/DesktopDatePicker/DesktopDatePicker.js +1 -1
  164. package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +63 -25
  165. package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +108 -0
  166. package/node/DesktopDateTimePicker/index.js +8 -1
  167. package/node/DigitalClock/DigitalClock.js +14 -6
  168. package/node/MobileDatePicker/MobileDatePicker.js +1 -1
  169. package/node/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
  170. package/node/MonthCalendar/PickersMonth.js +12 -6
  171. package/node/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +13 -4
  172. package/node/PickersCalendarHeader/PickersCalendarHeader.js +13 -9
  173. package/node/PickersDay/PickersDay.js +30 -15
  174. package/node/PickersLayout/PickersLayout.js +31 -17
  175. package/node/PickersTextField/PickersFilledInput/PickersFilledInput.js +137 -72
  176. package/node/PickersTextField/PickersInput/PickersInput.js +76 -54
  177. package/node/PickersTextField/PickersInputBase/PickersInputBase.js +64 -24
  178. package/node/PickersTextField/PickersOutlinedInput/Outline.js +58 -41
  179. package/node/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +31 -12
  180. package/node/StaticDatePicker/StaticDatePicker.js +1 -1
  181. package/node/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
  182. package/node/TimeClock/Clock.js +48 -35
  183. package/node/TimeClock/ClockNumber.js +12 -7
  184. package/node/TimeClock/ClockPointer.js +23 -13
  185. package/node/TimePicker/TimePickerToolbar.js +25 -16
  186. package/node/YearCalendar/PickersYear.js +12 -6
  187. package/node/index.js +1 -1
  188. package/node/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -6
  189. package/node/internals/components/PickersPopper.js +13 -9
  190. package/node/internals/components/PickersToolbar.js +39 -18
  191. package/node/internals/hooks/useField/buildSectionsFromFormat.js +34 -30
  192. package/node/internals/hooks/useField/useField.js +4 -2
  193. package/node/internals/hooks/useField/useFieldV6TextField.js +8 -3
  194. package/node/internals/hooks/useField/useFieldV7TextField.js +1 -1
  195. package/node/internals/hooks/useOpenState.js +1 -1
  196. package/node/internals/utils/fields.js +1 -1
  197. package/node/locales/itIT.js +16 -20
  198. package/node/locales/zhHK.js +14 -17
  199. package/package.json +5 -5
  200. package/timeViewRenderers/timeViewRenderers.js +1 -1
  201. package/dateTimeViewRenderers/dateTimeViewRenderers.d.ts +0 -15
  202. package/dateTimeViewRenderers/dateTimeViewRenderers.js +0 -163
  203. package/dateTimeViewRenderers/index.d.ts +0 -2
  204. package/dateTimeViewRenderers/index.js +0 -1
  205. package/dateTimeViewRenderers/package.json +0 -6
  206. package/modern/dateTimeViewRenderers/dateTimeViewRenderers.js +0 -162
  207. package/modern/dateTimeViewRenderers/index.js +0 -1
  208. package/node/dateTimeViewRenderers/dateTimeViewRenderers.js +0 -171
  209. package/node/dateTimeViewRenderers/index.js +0 -12
@@ -40,20 +40,41 @@ const DateTimePickerToolbarRoot = styled(PickersToolbar, {
40
40
  slot: 'Root',
41
41
  overridesResolver: (props, styles) => styles.root
42
42
  })(({
43
- theme,
44
- ownerState
45
- }) => _extends({
46
- paddingLeft: ownerState.toolbarVariant === 'desktop' && !ownerState.isLandscape ? 24 : 16,
47
- paddingRight: ownerState.toolbarVariant === 'desktop' && !ownerState.isLandscape ? 0 : 16,
48
- borderBottom: ownerState.toolbarVariant === 'desktop' ? `1px solid ${(theme.vars || theme).palette.divider}` : undefined,
49
- borderRight: ownerState.toolbarVariant === 'desktop' && ownerState.isLandscape ? `1px solid ${(theme.vars || theme).palette.divider}` : undefined,
43
+ theme
44
+ }) => ({
45
+ paddingLeft: 16,
46
+ paddingRight: 16,
50
47
  justifyContent: 'space-around',
51
- position: 'relative'
52
- }, ownerState.toolbarVariant === 'desktop' && {
53
- [`& .${pickersToolbarClasses.content} .${pickersToolbarTextClasses.selected}`]: {
54
- color: (theme.vars || theme).palette.primary.main,
55
- fontWeight: theme.typography.fontWeightBold
56
- }
48
+ position: 'relative',
49
+ variants: [{
50
+ props: {
51
+ toolbarVariant: 'desktop'
52
+ },
53
+ style: {
54
+ borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`,
55
+ [`& .${pickersToolbarClasses.content} .${pickersToolbarTextClasses.selected}`]: {
56
+ color: (theme.vars || theme).palette.primary.main,
57
+ fontWeight: theme.typography.fontWeightBold
58
+ }
59
+ }
60
+ }, {
61
+ props: {
62
+ toolbarVariant: 'desktop',
63
+ isLandscape: true
64
+ },
65
+ style: {
66
+ borderRight: `1px solid ${(theme.vars || theme).palette.divider}`
67
+ }
68
+ }, {
69
+ props: {
70
+ toolbarVariant: 'desktop',
71
+ isLandscape: false
72
+ },
73
+ style: {
74
+ paddingLeft: 24,
75
+ paddingRight: 0
76
+ }
77
+ }]
57
78
  }));
58
79
  DateTimePickerToolbarRoot.propTypes = {
59
80
  // ----------------------------- Warning --------------------------------
@@ -86,19 +107,35 @@ const DateTimePickerToolbarTimeContainer = styled('div', {
86
107
  slot: 'TimeContainer',
87
108
  overridesResolver: (props, styles) => styles.timeContainer
88
109
  })(({
89
- theme,
90
- ownerState
110
+ theme
91
111
  }) => {
92
- const direction = ownerState.isLandscape && ownerState.toolbarVariant !== 'desktop' ? 'column' : 'row';
93
112
  return _extends({
94
113
  display: 'flex',
95
- flexDirection: direction
96
- }, ownerState.toolbarVariant === 'desktop' && _extends({}, !ownerState.isLandscape && {
97
- gap: 9,
98
- marginRight: 4,
99
- alignSelf: 'flex-end'
100
- }), theme.direction === 'rtl' && {
101
- flexDirection: `${direction}-reverse`
114
+ flexDirection: 'row'
115
+ }, theme.direction === 'rtl' && {
116
+ flexDirection: 'row-reverse'
117
+ }, {
118
+ variants: [{
119
+ props: ({
120
+ isLandscape,
121
+ toolbarVariant
122
+ }) => isLandscape && toolbarVariant !== 'desktop',
123
+ style: _extends({
124
+ flexDirection: 'column'
125
+ }, theme.direction === 'rtl' && {
126
+ flexDirection: 'column-reverse'
127
+ })
128
+ }, {
129
+ props: {
130
+ toolbarVariant: 'desktop',
131
+ isLandscape: false
132
+ },
133
+ style: {
134
+ gap: 9,
135
+ marginRight: 4,
136
+ alignSelf: 'flex-end'
137
+ }
138
+ }]
102
139
  });
103
140
  });
104
141
  const DateTimePickerToolbarTimeDigitsContainer = styled('div', {
@@ -106,14 +143,20 @@ const DateTimePickerToolbarTimeDigitsContainer = styled('div', {
106
143
  slot: 'TimeDigitsContainer',
107
144
  overridesResolver: (props, styles) => styles.timeDigitsContainer
108
145
  })(({
109
- theme,
110
- ownerState
146
+ theme
111
147
  }) => _extends({
112
148
  display: 'flex'
113
- }, ownerState.toolbarVariant === 'desktop' && {
114
- gap: 1.5
115
149
  }, theme.direction === 'rtl' && {
116
150
  flexDirection: 'row-reverse'
151
+ }, {
152
+ variants: [{
153
+ props: {
154
+ toolbarVariant: 'desktop'
155
+ },
156
+ style: {
157
+ gap: 1.5
158
+ }
159
+ }]
117
160
  }));
118
161
  DateTimePickerToolbarTimeContainer.propTypes = {
119
162
  // ----------------------------- Warning --------------------------------
@@ -128,12 +171,18 @@ const DateTimePickerToolbarSeparator = styled(PickersToolbarText, {
128
171
  name: 'MuiDateTimePickerToolbar',
129
172
  slot: 'Separator',
130
173
  overridesResolver: (props, styles) => styles.separator
131
- })(({
132
- ownerState
133
- }) => ({
134
- margin: ownerState.toolbarVariant === 'desktop' ? 0 : '0 4px 0 2px',
135
- cursor: 'default'
136
- }));
174
+ })({
175
+ margin: '0 4px 0 2px',
176
+ cursor: 'default',
177
+ variants: [{
178
+ props: {
179
+ toolbarVariant: 'desktop'
180
+ },
181
+ style: {
182
+ margin: 0
183
+ }
184
+ }]
185
+ });
137
186
 
138
187
  // Taken from TimePickerToolbar
139
188
  const DateTimePickerToolbarAmPmSelection = styled('div', {
@@ -144,23 +193,26 @@ const DateTimePickerToolbarAmPmSelection = styled('div', {
144
193
  }, {
145
194
  [`&.${dateTimePickerToolbarClasses.ampmLandscape}`]: styles.ampmLandscape
146
195
  }, styles.ampmSelection]
147
- })(({
148
- ownerState
149
- }) => _extends({
196
+ })({
150
197
  display: 'flex',
151
198
  flexDirection: 'column',
152
199
  marginRight: 'auto',
153
- marginLeft: 12
154
- }, ownerState.isLandscape && {
155
- margin: '4px 0 auto',
156
- flexDirection: 'row',
157
- justifyContent: 'space-around',
158
- width: '100%'
159
- }, {
200
+ marginLeft: 12,
160
201
  [`& .${dateTimePickerToolbarClasses.ampmLabel}`]: {
161
202
  fontSize: 17
162
- }
163
- }));
203
+ },
204
+ variants: [{
205
+ props: {
206
+ isLandscape: true
207
+ },
208
+ style: {
209
+ margin: '4px 0 auto',
210
+ flexDirection: 'row',
211
+ justifyContent: 'space-around',
212
+ width: '100%'
213
+ }
214
+ }]
215
+ });
164
216
 
165
217
  /**
166
218
  * Demos:
@@ -1,5 +1,5 @@
1
- import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
3
  const _excluded = ["className"];
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
@@ -41,13 +41,17 @@ const DayCalendarSkeletonDay = styled(Skeleton, {
41
41
  name: 'MuiDayCalendarSkeleton',
42
42
  slot: 'DaySkeleton',
43
43
  overridesResolver: (props, styles) => styles.daySkeleton
44
- })(({
45
- ownerState
46
- }) => _extends({
47
- margin: `0 ${DAY_MARGIN}px`
48
- }, ownerState.day === 0 && {
49
- visibility: 'hidden'
50
- }));
44
+ })({
45
+ margin: `0 ${DAY_MARGIN}px`,
46
+ variants: [{
47
+ props: {
48
+ day: 0
49
+ },
50
+ style: {
51
+ visibility: 'hidden'
52
+ }
53
+ }]
54
+ });
51
55
  DayCalendarSkeletonDay.propTypes = {
52
56
  // ----------------------------- Warning --------------------------------
53
57
  // | These PropTypes are generated from the TypeScript type definitions |
@@ -281,7 +281,7 @@ DesktopDatePicker.propTypes = {
281
281
  /**
282
282
  * Disable specific date.
283
283
  *
284
- * Warning: This function can be called multiple times (e.g. when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
284
+ * Warning: This function can be called multiple times (for example when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
285
285
  *
286
286
  * @template TDate
287
287
  * @param {TDate} day The date to test.
@@ -1,19 +1,64 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
3
+ const _excluded = ["openTo", "focusedView", "timeViewsCount"];
2
4
  import * as React from 'react';
3
5
  import PropTypes from 'prop-types';
4
6
  import { resolveComponentProps } from '@mui/base/utils';
5
7
  import { refType } from '@mui/utils';
8
+ import Divider from '@mui/material/Divider';
6
9
  import { singleItemValueManager } from '../internals/utils/valueManagers';
7
10
  import { DateTimeField } from '../DateTimeField';
8
11
  import { useDateTimePickerDefaultizedProps } from '../DateTimePicker/shared';
9
12
  import { renderDateViewCalendar } from '../dateViewRenderers/dateViewRenderers';
10
- import { renderDesktopDateTimeView } from '../dateTimeViewRenderers';
11
13
  import { useLocaleText, useUtils } from '../internals/hooks/useUtils';
12
14
  import { validateDateTime } from '../internals/utils/validation/validateDateTime';
13
15
  import { CalendarIcon } from '../icons';
14
16
  import { useDesktopPicker } from '../internals/hooks/useDesktopPicker';
15
17
  import { extractValidationProps } from '../internals/utils/validation/extractValidationProps';
16
18
  import { resolveDateTimeFormat, resolveTimeViewsResponse } from '../internals/utils/date-time-utils';
19
+ import { renderDigitalClockTimeView, renderMultiSectionDigitalClockTimeView } from '../timeViewRenderers';
20
+ import { VIEW_HEIGHT, isDatePickerView, isInternalTimeView } from '../internals';
21
+ import { multiSectionDigitalClockClasses, multiSectionDigitalClockSectionClasses } from '../MultiSectionDigitalClock';
22
+ import { digitalClockClasses } from '../DigitalClock';
23
+ import { DesktopDateTimePickerLayout } from './DesktopDateTimePickerLayout';
24
+ import { jsx as _jsx } from "react/jsx-runtime";
25
+ import { jsxs as _jsxs } from "react/jsx-runtime";
26
+ const rendererInterceptor = function rendererInterceptor(inViewRenderers, popperView, rendererProps) {
27
+ const {
28
+ openTo,
29
+ focusedView,
30
+ timeViewsCount
31
+ } = rendererProps,
32
+ otherProps = _objectWithoutPropertiesLoose(rendererProps, _excluded);
33
+ const finalProps = _extends({}, otherProps, {
34
+ focusedView: null,
35
+ sx: [{
36
+ [`&.${multiSectionDigitalClockClasses.root}`]: {
37
+ borderBottom: 0
38
+ },
39
+ [`&.${multiSectionDigitalClockClasses.root}, .${multiSectionDigitalClockSectionClasses.root}, &.${digitalClockClasses.root}`]: {
40
+ maxHeight: VIEW_HEIGHT
41
+ }
42
+ }]
43
+ });
44
+ const isTimeViewActive = isInternalTimeView(popperView);
45
+ return /*#__PURE__*/_jsxs(React.Fragment, {
46
+ children: [inViewRenderers[!isTimeViewActive ? popperView : 'day']?.(_extends({}, rendererProps, {
47
+ view: !isTimeViewActive ? popperView : 'day',
48
+ focusedView: focusedView && isDatePickerView(focusedView) ? focusedView : null,
49
+ views: rendererProps.views.filter(isDatePickerView)
50
+ })), timeViewsCount > 0 && /*#__PURE__*/_jsxs(React.Fragment, {
51
+ children: [/*#__PURE__*/_jsx(Divider, {
52
+ orientation: "vertical"
53
+ }), inViewRenderers[isTimeViewActive ? popperView : 'hours']?.(_extends({}, finalProps, {
54
+ view: isTimeViewActive ? popperView : 'hours',
55
+ focusedView: focusedView && isInternalTimeView(focusedView) ? focusedView : null,
56
+ openTo: isInternalTimeView(openTo) ? openTo : 'hours',
57
+ views: rendererProps.views.filter(isInternalTimeView)
58
+ }))]
59
+ })]
60
+ });
61
+ };
17
62
  /**
18
63
  * Demos:
19
64
  *
@@ -33,32 +78,24 @@ const DesktopDateTimePicker = /*#__PURE__*/React.forwardRef(function DesktopDate
33
78
  const {
34
79
  shouldRenderTimeInASingleColumn,
35
80
  thresholdToRenderTimeInASingleColumn,
36
- views,
81
+ views: resolvedViews,
37
82
  timeSteps
38
83
  } = resolveTimeViewsResponse(defaultizedProps);
39
- const shouldUseNewRenderer = !defaultizedProps.viewRenderers || Object.keys(defaultizedProps.viewRenderers).length === 0;
40
- const viewRenderers =
41
- // we can only ensure the expected two-column layout if none of the renderers are overridden
42
- shouldUseNewRenderer ? {
43
- day: renderDesktopDateTimeView,
44
- month: renderDesktopDateTimeView,
45
- year: renderDesktopDateTimeView,
46
- hours: renderDesktopDateTimeView,
47
- minutes: renderDesktopDateTimeView,
48
- seconds: renderDesktopDateTimeView,
49
- meridiem: renderDesktopDateTimeView
50
- } : _extends({
84
+ const renderTimeView = shouldRenderTimeInASingleColumn ? renderDigitalClockTimeView : renderMultiSectionDigitalClockTimeView;
85
+ const viewRenderers = _extends({
51
86
  day: renderDateViewCalendar,
52
87
  month: renderDateViewCalendar,
53
88
  year: renderDateViewCalendar,
54
- hours: null,
55
- minutes: null,
56
- seconds: null,
57
- meridiem: null
89
+ hours: renderTimeView,
90
+ minutes: renderTimeView,
91
+ seconds: renderTimeView,
92
+ meridiem: renderTimeView
58
93
  }, defaultizedProps.viewRenderers);
59
94
  const ampmInClock = defaultizedProps.ampmInClock ?? true;
60
- // add "accept" action only when the new date time view renderers are used
61
- const actionBarActions = shouldUseNewRenderer ? ['accept'] : [];
95
+ // Need to avoid adding the `meridiem` view when unexpected renderer is specified
96
+ const shouldHoursRendererContainMeridiemView = viewRenderers.hours?.name === renderMultiSectionDigitalClockTimeView.name;
97
+ const views = !shouldHoursRendererContainMeridiemView ? resolvedViews.filter(view => view !== 'meridiem') : resolvedViews;
98
+ const actionBarActions = shouldRenderTimeInASingleColumn ? [] : ['accept'];
62
99
 
63
100
  // Props with the default values specific to the desktop variant
64
101
  const props = _extends({}, defaultizedProps, {
@@ -72,6 +109,7 @@ const DesktopDateTimePicker = /*#__PURE__*/React.forwardRef(function DesktopDate
72
109
  shouldRenderTimeInASingleColumn,
73
110
  slots: _extends({
74
111
  field: DateTimeField,
112
+ layout: DesktopDateTimePickerLayout,
75
113
  openPickerIcon: CalendarIcon
76
114
  }, defaultizedProps.slots),
77
115
  slotProps: _extends({}, defaultizedProps.slotProps, {
@@ -81,14 +119,14 @@ const DesktopDateTimePicker = /*#__PURE__*/React.forwardRef(function DesktopDate
81
119
  toolbar: _extends({
82
120
  hidden: true,
83
121
  ampmInClock,
84
- toolbarVariant: shouldUseNewRenderer ? 'desktop' : 'mobile'
122
+ toolbarVariant: 'desktop'
85
123
  }, defaultizedProps.slotProps?.toolbar),
86
124
  tabs: _extends({
87
125
  hidden: true
88
126
  }, defaultizedProps.slotProps?.tabs),
89
- actionBar: _extends({
127
+ actionBar: ownerState => _extends({
90
128
  actions: actionBarActions
91
- }, defaultizedProps.slotProps?.actionBar)
129
+ }, resolveComponentProps(defaultizedProps.slotProps?.actionBar, ownerState))
92
130
  })
93
131
  });
94
132
  const {
@@ -98,7 +136,8 @@ const DesktopDateTimePicker = /*#__PURE__*/React.forwardRef(function DesktopDate
98
136
  valueManager: singleItemValueManager,
99
137
  valueType: 'date-time',
100
138
  getOpenDialogAriaText: props.localeText?.openDatePickerDialogue ?? localeText.openDatePickerDialogue,
101
- validator: validateDateTime
139
+ validator: validateDateTime,
140
+ rendererInterceptor
102
141
  });
103
142
  return renderPicker();
104
143
  });
@@ -357,7 +396,7 @@ DesktopDateTimePicker.propTypes = {
357
396
  /**
358
397
  * Disable specific date.
359
398
  *
360
- * Warning: This function can be called multiple times (e.g. when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
399
+ * Warning: This function can be called multiple times (for example when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
361
400
  *
362
401
  * @template TDate
363
402
  * @param {TDate} day The date to test.
@@ -0,0 +1,101 @@
1
+ import * as React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import clsx from 'clsx';
4
+ import Divider from '@mui/material/Divider';
5
+ import { PickersLayoutContentWrapper, PickersLayoutRoot, pickersLayoutClasses, usePickerLayout } from '../PickersLayout';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ import { jsxs as _jsxs } from "react/jsx-runtime";
8
+ /**
9
+ * @ignore - internal component.
10
+ */
11
+ function DesktopDateTimePickerLayout(props) {
12
+ const {
13
+ toolbar,
14
+ tabs,
15
+ content,
16
+ actionBar,
17
+ shortcuts
18
+ } = usePickerLayout(props);
19
+ const {
20
+ sx,
21
+ className,
22
+ isLandscape,
23
+ ref
24
+ } = props;
25
+ const isActionBarVisible = actionBar && (actionBar.props.actions?.length ?? 0) > 0;
26
+ return /*#__PURE__*/_jsxs(PickersLayoutRoot, {
27
+ ref: ref,
28
+ className: clsx(className, pickersLayoutClasses.root),
29
+ sx: [{
30
+ [`& .${pickersLayoutClasses.tabs}`]: {
31
+ gridRow: 4,
32
+ gridColumn: '1 / 4'
33
+ },
34
+ [`& .${pickersLayoutClasses.actionBar}`]: {
35
+ gridRow: 5
36
+ }
37
+ }, ...(Array.isArray(sx) ? sx : [sx])],
38
+ ownerState: props,
39
+ children: [isLandscape ? shortcuts : toolbar, isLandscape ? toolbar : shortcuts, /*#__PURE__*/_jsxs(PickersLayoutContentWrapper, {
40
+ className: pickersLayoutClasses.contentWrapper,
41
+ sx: {
42
+ display: 'grid'
43
+ },
44
+ children: [content, tabs, isActionBarVisible && /*#__PURE__*/_jsx(Divider, {
45
+ sx: {
46
+ gridRow: 3,
47
+ gridColumn: '1 / 4'
48
+ }
49
+ })]
50
+ }), actionBar]
51
+ });
52
+ }
53
+ process.env.NODE_ENV !== "production" ? DesktopDateTimePickerLayout.propTypes = {
54
+ // ----------------------------- Warning --------------------------------
55
+ // | These PropTypes are generated from the TypeScript type definitions |
56
+ // | To update them edit the TypeScript types and run "yarn proptypes" |
57
+ // ----------------------------------------------------------------------
58
+ children: PropTypes.node,
59
+ /**
60
+ * Override or extend the styles applied to the component.
61
+ */
62
+ classes: PropTypes.object,
63
+ className: PropTypes.string,
64
+ disabled: PropTypes.bool,
65
+ isLandscape: PropTypes.bool.isRequired,
66
+ isValid: PropTypes.func.isRequired,
67
+ onAccept: PropTypes.func.isRequired,
68
+ onCancel: PropTypes.func.isRequired,
69
+ onChange: PropTypes.func.isRequired,
70
+ onClear: PropTypes.func.isRequired,
71
+ onClose: PropTypes.func.isRequired,
72
+ onDismiss: PropTypes.func.isRequired,
73
+ onOpen: PropTypes.func.isRequired,
74
+ onSelectShortcut: PropTypes.func.isRequired,
75
+ onSetToday: PropTypes.func.isRequired,
76
+ onViewChange: PropTypes.func.isRequired,
77
+ /**
78
+ * Force rendering in particular orientation.
79
+ */
80
+ orientation: PropTypes.oneOf(['landscape', 'portrait']),
81
+ readOnly: PropTypes.bool,
82
+ /**
83
+ * The props used for each component slot.
84
+ * @default {}
85
+ */
86
+ slotProps: PropTypes.object,
87
+ /**
88
+ * Overridable component slots.
89
+ * @default {}
90
+ */
91
+ slots: PropTypes.object,
92
+ /**
93
+ * The system prop that allows defining system overrides as well as additional CSS styles.
94
+ */
95
+ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
96
+ value: PropTypes.any,
97
+ view: PropTypes.oneOf(['day', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'year']),
98
+ views: PropTypes.arrayOf(PropTypes.oneOf(['day', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'year']).isRequired).isRequired,
99
+ wrapperVariant: PropTypes.oneOf(['desktop', 'mobile'])
100
+ } : void 0;
101
+ export { DesktopDateTimePickerLayout };
@@ -1 +1,2 @@
1
- export { DesktopDateTimePicker } from './DesktopDateTimePicker';
1
+ export { DesktopDateTimePicker } from './DesktopDateTimePicker';
2
+ export { DesktopDateTimePickerLayout } from './DesktopDateTimePickerLayout';
@@ -36,16 +36,24 @@ const DigitalClockRoot = styled(PickerViewRoot, {
36
36
  name: 'MuiDigitalClock',
37
37
  slot: 'Root',
38
38
  overridesResolver: (props, styles) => styles.root
39
- })(({
40
- ownerState
41
- }) => ({
39
+ })({
42
40
  overflowY: 'auto',
43
41
  width: '100%',
44
42
  '@media (prefers-reduced-motion: no-preference)': {
45
- scrollBehavior: ownerState.alreadyRendered ? 'smooth' : 'auto'
43
+ scrollBehavior: 'auto'
46
44
  },
47
- maxHeight: DIGITAL_CLOCK_VIEW_HEIGHT
48
- }));
45
+ maxHeight: DIGITAL_CLOCK_VIEW_HEIGHT,
46
+ variants: [{
47
+ props: {
48
+ alreadyRendered: true
49
+ },
50
+ style: {
51
+ '@media (prefers-reduced-motion: no-preference)': {
52
+ scrollBehavior: 'smooth'
53
+ }
54
+ }
55
+ }]
56
+ });
49
57
  const DigitalClockList = styled(MenuList, {
50
58
  name: 'MuiDigitalClock',
51
59
  slot: 'List',
@@ -278,7 +278,7 @@ MobileDatePicker.propTypes = {
278
278
  /**
279
279
  * Disable specific date.
280
280
  *
281
- * Warning: This function can be called multiple times (e.g. when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
281
+ * Warning: This function can be called multiple times (for example when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
282
282
  *
283
283
  * @template TDate
284
284
  * @param {TDate} day The date to test.
@@ -326,7 +326,7 @@ MobileDateTimePicker.propTypes = {
326
326
  /**
327
327
  * Disable specific date.
328
328
  *
329
- * Warning: This function can be called multiple times (e.g. when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
329
+ * Warning: This function can be called multiple times (for example when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance.
330
330
  *
331
331
  * @template TDate
332
332
  * @param {TDate} day The date to test.
@@ -22,14 +22,20 @@ const PickersMonthRoot = styled('div', {
22
22
  name: 'MuiPickersMonth',
23
23
  slot: 'Root',
24
24
  overridesResolver: (_, styles) => [styles.root]
25
- })(({
26
- ownerState
27
- }) => ({
28
- flexBasis: ownerState.monthsPerRow === 3 ? '33.3%' : '25%',
25
+ })({
29
26
  display: 'flex',
30
27
  alignItems: 'center',
31
- justifyContent: 'center'
32
- }));
28
+ justifyContent: 'center',
29
+ flexBasis: '33.3%',
30
+ variants: [{
31
+ props: {
32
+ monthsPerRow: 4
33
+ },
34
+ style: {
35
+ flexBasis: '25%'
36
+ }
37
+ }]
38
+ });
33
39
  const PickersMonthButton = styled('button', {
34
40
  name: 'MuiPickersMonth',
35
41
  slot: 'MonthButton',
@@ -26,15 +26,14 @@ const MultiSectionDigitalClockSectionRoot = styled(MenuList, {
26
26
  slot: 'Root',
27
27
  overridesResolver: (_, styles) => styles.root
28
28
  })(({
29
- theme,
30
- ownerState
29
+ theme
31
30
  }) => ({
32
31
  maxHeight: DIGITAL_CLOCK_VIEW_HEIGHT,
33
32
  width: 56,
34
33
  padding: 0,
35
34
  overflow: 'hidden',
36
35
  '@media (prefers-reduced-motion: no-preference)': {
37
- scrollBehavior: ownerState.alreadyRendered ? 'smooth' : 'auto'
36
+ scrollBehavior: 'auto'
38
37
  },
39
38
  '@media (pointer: fine)': {
40
39
  '&:hover': {
@@ -52,7 +51,17 @@ const MultiSectionDigitalClockSectionRoot = styled(MenuList, {
52
51
  content: '""',
53
52
  // subtracting the height of one item, extra margin and borders to make sure the max height is correct
54
53
  height: 'calc(100% - 40px - 6px)'
55
- }
54
+ },
55
+ variants: [{
56
+ props: {
57
+ alreadyRendered: true
58
+ },
59
+ style: {
60
+ '@media (prefers-reduced-motion: no-preference)': {
61
+ scrollBehavior: 'smooth'
62
+ }
63
+ }
64
+ }]
56
65
  }));
57
66
  const MultiSectionDigitalClockSectionItem = styled(MenuItem, {
58
67
  name: 'MuiMultiSectionDigitalClockSection',
@@ -72,15 +72,19 @@ const PickersCalendarHeaderSwitchViewButton = styled(IconButton, {
72
72
  name: 'MuiPickersCalendarHeader',
73
73
  slot: 'SwitchViewButton',
74
74
  overridesResolver: (_, styles) => styles.switchViewButton
75
- })(({
76
- ownerState
77
- }) => _extends({
78
- marginRight: 'auto'
79
- }, ownerState.view === 'year' && {
80
- [`.${pickersCalendarHeaderClasses.switchViewIcon}`]: {
81
- transform: 'rotate(180deg)'
82
- }
83
- }));
75
+ })({
76
+ marginRight: 'auto',
77
+ variants: [{
78
+ props: {
79
+ view: 'year'
80
+ },
81
+ style: {
82
+ [`.${pickersCalendarHeaderClasses.switchViewIcon}`]: {
83
+ transform: 'rotate(180deg)'
84
+ }
85
+ }
86
+ }]
87
+ });
84
88
  const PickersCalendarHeaderSwitchViewIcon = styled(ArrowDropDownIcon, {
85
89
  name: 'MuiPickersCalendarHeader',
86
90
  slot: 'SwitchViewIcon',