@mui/x-date-pickers 9.2.0 → 9.4.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 (40) hide show
  1. package/CHANGELOG.md +314 -0
  2. package/DateCalendar/DateCalendar.js +2 -2
  3. package/DateCalendar/DateCalendar.mjs +2 -2
  4. package/DateCalendar/DateCalendar.types.d.mts +1 -1
  5. package/DateCalendar/DateCalendar.types.d.ts +1 -1
  6. package/DateCalendar/DayCalendar.d.mts +1 -1
  7. package/DateCalendar/DayCalendar.d.ts +1 -1
  8. package/DateCalendar/DayCalendar.js +1 -1
  9. package/DateCalendar/DayCalendar.mjs +1 -1
  10. package/DateCalendar/PickersSlideTransition.js +1 -1
  11. package/DateCalendar/PickersSlideTransition.mjs +1 -1
  12. package/DatePicker/DatePicker.js +1 -1
  13. package/DatePicker/DatePicker.mjs +1 -1
  14. package/DateTimePicker/DateTimePicker.js +1 -1
  15. package/DateTimePicker/DateTimePicker.mjs +1 -1
  16. package/DesktopDatePicker/DesktopDatePicker.js +1 -1
  17. package/DesktopDatePicker/DesktopDatePicker.mjs +1 -1
  18. package/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -1
  19. package/DesktopDateTimePicker/DesktopDateTimePicker.mjs +1 -1
  20. package/MobileDatePicker/MobileDatePicker.js +1 -1
  21. package/MobileDatePicker/MobileDatePicker.mjs +1 -1
  22. package/MobileDateTimePicker/MobileDateTimePicker.js +1 -1
  23. package/MobileDateTimePicker/MobileDateTimePicker.mjs +1 -1
  24. package/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  25. package/PickersCalendarHeader/PickersCalendarHeader.mjs +1 -1
  26. package/PickersTextField/PickersInputBase/PickersInputBase.js +15 -3
  27. package/PickersTextField/PickersInputBase/PickersInputBase.mjs +15 -3
  28. package/PickersTextField/PickersInputBase/PickersInputBase.types.d.mts +6 -1
  29. package/PickersTextField/PickersInputBase/PickersInputBase.types.d.ts +6 -1
  30. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +0 -3
  31. package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.mjs +0 -3
  32. package/StaticDatePicker/StaticDatePicker.js +1 -1
  33. package/StaticDatePicker/StaticDatePicker.mjs +1 -1
  34. package/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
  35. package/StaticDateTimePicker/StaticDateTimePicker.mjs +1 -1
  36. package/index.js +1 -1
  37. package/index.mjs +1 -1
  38. package/internals/hooks/date-helpers-hooks.js +1 -1
  39. package/internals/hooks/date-helpers-hooks.mjs +1 -1
  40. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,319 @@
1
1
  # Changelog
2
2
 
3
+ ## 9.4.0
4
+
5
+ <!-- generated comparing v9.3.0..master -->
6
+
7
+ _Jun 4, 2026_
8
+
9
+ We'd like to extend a big thank you to the 21 contributors who made this release possible. Here are some highlights ✨:
10
+
11
+ - 🎉 Scheduler is now in Beta shipping with Timeline vitualization and lazy loading
12
+ - 📆 Implement Event Timeline virtualization (#22339)
13
+ - 🫧 Introduce bubble charts (#22537)
14
+ - 🐞 Bugfixes
15
+ - 📚 Documentation improvements
16
+
17
+ Special thanks go out to these community members for their valuable contributions:
18
+ @imxv, @mixelburg, @mustafajw07
19
+
20
+ The following team members contributed to this release:
21
+ @aemartos, @alexfauquette, @arminmeh, @bernardobelchior, @cherniavskii, @flaviendelangle, @hasdfa, @Janpot, @JCQuintas, @joserodolfofreitas, @LukasTy, @MBilalShafi, @michelengelen, @mj12albert, @noraleonte, @oliviertassinari, @rita-codes, @romgrk, @sai6855
22
+
23
+ ### Data Grid
24
+
25
+ #### `@mui/x-data-grid@9.4.0`
26
+
27
+ - [DataGrid] Fix `avg` aggregation when the average is zero (#22652) @mj12albert
28
+ - [DataGrid] Inherit icon `fontSize` from `baseIconButton` size (#22187) @imxv
29
+ - [DataGrid] Fix `noRowsOverlay` flicker between `dataSource` re-fetches (#22465) @LukasTy
30
+
31
+ #### `@mui/x-data-grid-pro@9.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
32
+
33
+ Same changes as in `@mui/x-data-grid@9.4.0`.
34
+
35
+ #### `@mui/x-data-grid-premium@9.4.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
36
+
37
+ > This release includes a version bump of the `@mui/x-internal-exceljs-fork` package to address the vulnerable dependencies.
38
+ > The following CVEs are fixed:
39
+ >
40
+ > - <https://github.com/advisories/GHSA-ph9p-34f9-6g65>
41
+ > - <https://github.com/isaacs/minimatch/security/advisories/GHSA-23c5-xmqv-rm74>
42
+ > - <https://github.com/advisories/GHSA-w5hq-g745-h8pq>
43
+ >
44
+ > To make this security update possible, we bumped the `node` version requirement from `>=14.0.0` to `>=14.17.0`.
45
+ > [Node.js 14.17.0](https://nodejs.org/en/blog/release/v14.17.0) was released in May 2021, so we consider it safe to bump the requirement without causing issues for our users.
46
+
47
+ Same changes as in `@mui/x-data-grid-pro@9.4.0`, plus:
48
+
49
+ - [DataGridPremium] Nested Lazy Loading (#21043) @MBilalShafi
50
+ - [DataGridPremium] Update exceljs fork (#22658) @cherniavskii
51
+
52
+ ### Date and Time Pickers
53
+
54
+ #### `@mui/x-date-pickers@9.4.0`
55
+
56
+ Internal changes.
57
+
58
+ #### `@mui/x-date-pickers-pro@9.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
59
+
60
+ Same changes as in `@mui/x-date-pickers@9.4.0`.
61
+
62
+ ### Charts
63
+
64
+ #### `@mui/x-charts@9.4.0`
65
+
66
+ - [charts] Add functionality to hide elements during chart export (#22525) @sai6855
67
+ - [charts] Add option to show marks only on the first/last values (#22645) @alexfauquette
68
+ - [charts] Add text customization section and demo for axis labels (#22597) @sai6855
69
+ - [charts] Allow axes to scale according to the visible series only (#22566) @alexfauquette
70
+ - [charts] Correctly handle different identifiers for each series (#22556) @sai6855
71
+ - [charts] Fix inverted Y axis zoom/pan on ordinal scales (#22654) @JCQuintas
72
+ - [charts] Introduce bubble charts (#22537) @alexfauquette
73
+ - [charts] Let scatter chart tooltip ignore hidden series (#22614) @alexfauquette
74
+ - [charts] Make `'sqrt'` size mapping the default (#22683) @alexfauquette
75
+ - [charts] Remove unused proptypes (#22618) @alexfauquette
76
+ - [charts] Support module augmentation for slots (#22519) @sai6855
77
+ - [charts] Support multiple marker size in `findClosestPoint` (#22622) @alexfauquette
78
+ - [charts] Upgrade bezier-easing to v3 and use it for line chart hit-detection (#22608) @sai6855
79
+ - [charts] Use `useLayoutEffect` with `ResizeObserver` (#22646) @JCQuintas
80
+
81
+ #### `@mui/x-charts-pro@9.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
82
+
83
+ Same changes as in `@mui/x-charts@9.4.0`, plus:
84
+
85
+ - [charts-pro] Auto-select range button matching current zoom (#22137) @JCQuintas
86
+ - [charts-pro] Support range values in `initialZoom` (#22563) @JCQuintas
87
+
88
+ #### `@mui/x-charts-premium@9.4.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
89
+
90
+ Same changes as in `@mui/x-charts-pro@9.4.0`, plus:
91
+
92
+ - [charts-premium] Support range-bar series in WebGL bar renderer (#22607) @JCQuintas
93
+ - [charts-premium] Fix `onAxisClick` for radial bar and lines (#22522) @alexfauquette
94
+
95
+ ### Tree View
96
+
97
+ #### `@mui/x-tree-view@9.4.0`
98
+
99
+ Internal changes.
100
+
101
+ #### `@mui/x-tree-view-pro@9.4.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
102
+
103
+ Same changes as in `@mui/x-tree-view@9.4.0`.
104
+
105
+ ### Scheduler
106
+
107
+ #### Breaking changes
108
+
109
+ The theme `styleOverrides` slots for the skeleton and the error container were
110
+ renamed and unified. The CSS utility class names (for example
111
+ `.MuiEventCalendar-eventSkeleton`) are **not** affected — only
112
+ `theme.components.*` overrides need updating.
113
+
114
+ **Event skeleton**
115
+
116
+ | Before | After |
117
+ | --------------------------------------- | ------------------------------ |
118
+ | `MuiEventCalendar` slot `EventSkeleton` | `MuiEventSkeleton` slot `Root` |
119
+ | `MuiEventTimeline` slot `EventSkeleton` | `MuiEventSkeleton` slot `Root` |
120
+
121
+ **Error container**
122
+
123
+ | Before | After |
124
+ | ------------------------------------------------------------- | --------------------------------------- |
125
+ | `MuiEventCalendar` / `MuiEventTimeline` slot `ErrorContainer` | `MuiEventErrorContainer` slot `Root` |
126
+ | `MuiEventCalendar` / `MuiEventTimeline` slot `ErrorAlert` | `MuiEventErrorContainer` slot `Alert` |
127
+ | `MuiEventCalendar` / `MuiEventTimeline` slot `ErrorMessage` | `MuiEventErrorContainer` slot `Message` |
128
+
129
+ If you customized these through the theme, update the component name and slot
130
+ names accordingly:
131
+
132
+ ```diff
133
+ components: {
134
+ - MuiEventCalendar: {
135
+ + MuiEventSkeleton: {
136
+ styleOverrides: {
137
+ - EventSkeleton: { /* ... */ },
138
+ + Root: { /* ... */ },
139
+ },
140
+ },
141
+ },
142
+ }
143
+ ```
144
+
145
+ #### `@mui/x-scheduler@9.0.0-beta.0`
146
+
147
+ - [scheduler] Add a prop to control whether the resource of an event can be cleared (#22464) @rita-codes
148
+ - [scheduler] Add week number labels to agenda, day and week views (#22594) @mustafajw07
149
+ - [scheduler] Add `weekStartsOn` preference and update date functions to support custom week start (#22426) @mustafajw07
150
+ - [scheduler] Export premium version of the standalone views (#22621) @flaviendelangle
151
+ - [scheduler] Implement timeline virtualization (#22339) @romgrk
152
+ - [scheduler] Split scheduler overview (#22453) @joserodolfofreitas
153
+ - [scheduler] Unify `EventSkeleton` and `ErrorContainer` between `EventCalendar` and `EventTimeline` (#22676) @noraleonte
154
+
155
+ #### `@mui/x-scheduler-premium@9.0.0-beta.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
156
+
157
+ Same changes as in `@mui/x-scheduler@9.0.0-beta.0`.
158
+
159
+ ### Docs
160
+
161
+ - [docs] Add a performance docs page for charts (#22656) @alexfauquette
162
+ - [docs] Add real dataset for maps documentation (#22599) @alexfauquette
163
+ - [docs] Add spacing between selects on charts overview demo (#22589) @bernardobelchior
164
+ - [docs] Reorganize existing chat docs navigation (#22478) @hasdfa
165
+ - [docs] Switch to visionscarto's world atlas dataset (#22669) @cherniavskii
166
+ - [docs] Update TreeView `domstructure` docs and add demo (#22420) @mj12albert
167
+ - [docs] Fix indexation of Scheduler (#22567) @oliviertassinari
168
+ - [docs] Fix wide layout on event timeline lazy loading and Import title (#22604) @rita-codes
169
+ - [docs] Derive class name owners for shared charts classes (#22674) @JCQuintas
170
+
171
+ ### Core
172
+
173
+ - [code-infra] Drop unused and now-transitive deps from docs/package.json (#22549) @LukasTy
174
+ - [code-infra] Refresh CI Node pins to 22.22.3 (#22598) @LukasTy
175
+ - [code-infra] Skip empty product sections in changelog (#22541) @rita-codes
176
+ - [code-infra] Stabilize DataGridScrollRestoration visual regression test (#22553) @Janpot
177
+ - [internal] Add license to the `x-data-grid-generator` (#22240) @arminmeh
178
+ - [internal] Express default value for resource_class (#22569) @oliviertassinari
179
+ - [internal] Fix use of ellipsis (#21852) @oliviertassinari
180
+ - [internal] `useLayoutEffect` with `ResizeObserver` (#22428) @romgrk
181
+
182
+ ### Miscellaneous
183
+
184
+ - [chat-headless] Add built-in chat adapters (#22479) @hasdfa
185
+ - [chat-headless] Harden runtime model and message errors (#22480) @hasdfa
186
+ - [core] Prepare for TypeScript 6 bump (#22551) @LukasTy
187
+ - [core] Use CircleCI Gen2 resource classes (#22610) @LukasTy
188
+ - [infra] Fix broken tag retrieval on `master` during release (#22174) @michelengelen
189
+ - [infra] Group Base UI renovate updates (#22590) @LukasTy
190
+ - [pnpm] Add security settings to pnpm-workspace.yaml (#22611) @Janpot
191
+ - [release] Fix release PR scripts (#22680) @JCQuintas
192
+ - [test] Add a Tree View regression test for lazy loading with getChildrenCount returning -1 (#22605) @mixelburg
193
+ - [test] Disable LCD subpixel antialiasing in regression screenshots (#22602) @Janpot
194
+ - [test] Fix flaky Data Grid Pro data source tree data tests (#22659) @LukasTy
195
+ - [test] Remove stale form-submit TODO from e2e suite (#22564) @LukasTy
196
+ - [x-license] Exclude test keys from the published npm package (#22647) @aemartos
197
+ - [test] Fix flaky WebGL benchmark by polling for canvas content (#22535) @JCQuintas
198
+
199
+ ## 9.3.0
200
+
201
+ _May 21, 2026_
202
+
203
+ We'd like to extend a big thank you to the 16 contributors who made this release possible. Here are some highlights ✨:
204
+
205
+ - 📆 Refactor Calendar Range drag editing to use Pointer Events instead of drag and touch events combination (#22279)
206
+ - ✨ Apply lazy loading to `EventTimelinePremium` (#22308)
207
+ - 🐞 Bugfixes
208
+ - 📚 Documentation improvements
209
+ - 🌎 Added Norwegian bokmål (nb-NO) locale to the Scheduler
210
+ - 🌎 Improved Swedish (sv-SE) locale on the Data Grid
211
+
212
+ Special thanks go out to these community members for their valuable contributions:
213
+ @Anexus5919, @jvskriubakken, @oscar-b, @rin, @viktormelin
214
+
215
+ The following team members contributed to this release:
216
+ @aemartos, @alexfauquette, @arminmeh, @Janpot, @JCQuintas, @LukasTy, @mj12albert, @oliviertassinari, @rita-codes, @romgrk, @sai6855
217
+
218
+ ### Data Grid
219
+
220
+ #### `@mui/x-data-grid@9.3.0`
221
+
222
+ - [DataGrid] Fix scrollbar disappearing after multiple resizes (#22512) @LukasTy
223
+ - [DataGrid] Revert "Add support for pinned columns in `GridVirtualScroller`" (#22467) @oliviertassinari
224
+ - [l10n] Improve Swedish (svSE) locale (#21851) @viktormelin
225
+
226
+ #### `@mui/x-data-grid-pro@9.3.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
227
+
228
+ Same changes as in `@mui/x-data-grid@9.3.0`.
229
+
230
+ #### `@mui/x-data-grid-premium@9.3.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
231
+
232
+ Same changes as in `@mui/x-data-grid-pro@9.3.0`.
233
+
234
+ ### Date and Time Pickers
235
+
236
+ #### `@mui/x-date-pickers@9.3.0`
237
+
238
+ - [pickers] Fix disabled state styling for `PickersTextField` standard and filled variants (#22189) @LukasTy
239
+ - [pickers] Fix previous month disabled state calculation (#22524) @mj12albert
240
+ - [pickers] Merge `slotProps.sectionContent` in `PickersInputBase` (#22324) @rin
241
+
242
+ #### `@mui/x-date-pickers-pro@9.3.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
243
+
244
+ Same changes as in `@mui/x-date-pickers@9.3.0`, plus:
245
+
246
+ - [DateRangeCalendar] Use Pointer Events for drag editing (#22279) @LukasTy
247
+
248
+ ### Charts
249
+
250
+ #### `@mui/x-charts@9.3.0`
251
+
252
+ - [charts] Add `data-series` to elements of radar chart (#22523) @alexfauquette
253
+ - [charts] Add environment check for warning messages in axis and radar hooks (#22506) @sai6855
254
+ - [charts] Chart `seriesConfig` deduplication for lines and bars (#22257) @sai6855
255
+ - [charts] Fix highlighted item crash (#22539) @oscar-b
256
+ - [charts] Fix the line and mark class (#22526) @alexfauquette
257
+ - [charts] Fix use of deprecated API in docs (#22469) @oliviertassinari
258
+ - [charts] Improve performance of `evaluateCurveY` function (#22407) @sai6855
259
+
260
+ #### `@mui/x-charts-pro@9.3.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
261
+
262
+ Same changes as in `@mui/x-charts@9.3.0`.
263
+
264
+ #### `@mui/x-charts-premium@9.3.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
265
+
266
+ Same changes as in `@mui/x-charts-pro@9.3.0`, plus:
267
+
268
+ - [charts-premium] Add `closePath` option to the radial line series (#22517) @alexfauquette
269
+
270
+ ### Tree View
271
+
272
+ #### `@mui/x-tree-view-pro@9.3.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
273
+
274
+ Internal changes.
275
+
276
+ ### Scheduler
277
+
278
+ #### `@mui/x-scheduler@9.0.0-alpha.7`
279
+
280
+ - [I10n] Add Norwegian bokmål (nb-NO) locale (#22415) @jvskriubakken
281
+
282
+ #### `@mui/x-scheduler-premium@9.0.0-alpha.7` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
283
+
284
+ Same changes as in `@mui/x-scheduler@9.0.0-alpha.7`, plus:
285
+
286
+ - [scheduler] Apply lazy loading to `EventTimelinePremium` (#22308) @rita-codes
287
+ - [scheduler] Deduplicate staged ranges within the debounce window (#22476) @Anexus5919
288
+ - [scheduler] Pass full event objects to `dataSource.updateEvents` (#22462) @rita-codes
289
+
290
+ ### Docs
291
+
292
+ - [docs] Automatically update supported versions (#21850) @arminmeh
293
+ - [docs] Fix `New` label on bar charts docs (#22473) @oliviertassinari
294
+ - [docs] Improve premium page header for charts (#22474) @oliviertassinari
295
+ - [docs] Sync `README` with licensing/licensing.md in scheduler (#22468) @oliviertassinari
296
+
297
+ ### Core
298
+
299
+ - [code-infra] Cover docs overview composites with Argos (#22283) @LukasTy
300
+ - [code-infra] Enable `mui/no-presentation-role` lint rule (#22360) @Janpot
301
+ - [code-infra] Make generated `propTypes` union order deterministic (#22521) @JCQuintas
302
+ - [code-infra] Make screenshots stable across different ordering of the tests (#22449) @Janpot
303
+ - [code-infra] Optimize visual regression testing (#22447) @Janpot
304
+ - [code-infra] Replace markdownlint with remark from code-infra (#22255) @Janpot
305
+
306
+ ### Miscellaneous
307
+
308
+ - [virtualizer] Improve `controlled` mode performance (#22123) @romgrk
309
+ - [data-grid-generator] Include `tree-data` params in `useDemoData` cache key (#22456) @Janpot
310
+ - [test] Fix flaky browser tests and optimize (#22431) @Janpot
311
+ - [test] Speed up `test_types` job (#22442) @Janpot
312
+ - [test] Trim ffmpeg install in `test_regressions` (#22459) @Janpot
313
+ - [test] Add WebGL performance benchmarks for charts (#22471) @JCQuintas
314
+ - [test] Expand chart performance benchmarks for charts (#22472) @JCQuintas
315
+ - [x-license] use workspace dep for v9 in cross-major compat tests (#22504) @aemartos
316
+
3
317
  ## 9.2.0
4
318
 
5
319
  _May 13, 2026_
@@ -56,7 +56,7 @@ function useDateCalendarDefaultizedProps(props, name) {
56
56
  views: themeProps.views ?? ['year', 'day'],
57
57
  reduceAnimations,
58
58
  renderLoading: themeProps.renderLoading ?? (() => /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
59
- children: "..."
59
+ children: "\u2026"
60
60
  }))
61
61
  });
62
62
  }
@@ -513,7 +513,7 @@ process.env.NODE_ENV !== "production" ? DateCalendar.propTypes = {
513
513
  /**
514
514
  * Component displaying when passed `loading` true.
515
515
  * @returns {React.ReactNode} The node to render when loading.
516
- * @default () => <span>...</span>
516
+ * @default () => <span>…</span>
517
517
  */
518
518
  renderLoading: _propTypes.default.func,
519
519
  /**
@@ -49,7 +49,7 @@ function useDateCalendarDefaultizedProps(props, name) {
49
49
  views: themeProps.views ?? ['year', 'day'],
50
50
  reduceAnimations,
51
51
  renderLoading: themeProps.renderLoading ?? (() => /*#__PURE__*/_jsx("span", {
52
- children: "..."
52
+ children: "\u2026"
53
53
  }))
54
54
  });
55
55
  }
@@ -506,7 +506,7 @@ process.env.NODE_ENV !== "production" ? DateCalendar.propTypes = {
506
506
  /**
507
507
  * Component displaying when passed `loading` true.
508
508
  * @returns {React.ReactNode} The node to render when loading.
509
- * @default () => <span>...</span>
509
+ * @default () => <span>…</span>
510
510
  */
511
511
  renderLoading: PropTypes.func,
512
512
  /**
@@ -34,7 +34,7 @@ export interface ExportedDateCalendarProps extends ExportedDayCalendarProps, Exp
34
34
  /**
35
35
  * Component displaying when passed `loading` true.
36
36
  * @returns {React.ReactNode} The node to render when loading.
37
- * @default () => <span>...</span>
37
+ * @default () => <span>…</span>
38
38
  */
39
39
  renderLoading?: () => React.ReactNode;
40
40
  /**
@@ -34,7 +34,7 @@ export interface ExportedDateCalendarProps extends ExportedDayCalendarProps, Exp
34
34
  /**
35
35
  * Component displaying when passed `loading` true.
36
36
  * @returns {React.ReactNode} The node to render when loading.
37
- * @default () => <span>...</span>
37
+ * @default () => <span>…</span>
38
38
  */
39
39
  renderLoading?: () => React.ReactNode;
40
40
  /**
@@ -29,7 +29,7 @@ export interface ExportedDayCalendarProps extends ExportedPickerDayProps {
29
29
  /**
30
30
  * Component rendered on the "day" view when `props.loading` is true.
31
31
  * @returns {React.ReactNode} The node to render when loading.
32
- * @default () => "..."
32
+ * @default () => ""
33
33
  */
34
34
  renderLoading?: () => React.ReactNode;
35
35
  /**
@@ -29,7 +29,7 @@ export interface ExportedDayCalendarProps extends ExportedPickerDayProps {
29
29
  /**
30
30
  * Component rendered on the "day" view when `props.loading` is true.
31
31
  * @returns {React.ReactNode} The node to render when loading.
32
- * @default () => "..."
32
+ * @default () => ""
33
33
  */
34
34
  renderLoading?: () => React.ReactNode;
35
35
  /**
@@ -239,7 +239,7 @@ function DayCalendar(inProps) {
239
239
  readOnly,
240
240
  reduceAnimations,
241
241
  renderLoading = () => /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
242
- children: "..."
242
+ children: "\u2026"
243
243
  }),
244
244
  slideDirection,
245
245
  TransitionProps,
@@ -232,7 +232,7 @@ export function DayCalendar(inProps) {
232
232
  readOnly,
233
233
  reduceAnimations,
234
234
  renderLoading = () => /*#__PURE__*/_jsx("span", {
235
- children: "..."
235
+ children: "\u2026"
236
236
  }),
237
237
  slideDirection,
238
238
  TransitionProps,
@@ -131,7 +131,7 @@ function PickersSlideTransition(inProps) {
131
131
  childFactory: element => /*#__PURE__*/React.cloneElement(element, {
132
132
  classNames: transitionClasses
133
133
  }),
134
- role: "presentation",
134
+ role: "none",
135
135
  ownerState: ownerState,
136
136
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactTransitionGroup.CSSTransition, (0, _extends2.default)({
137
137
  mountOnEnter: true,
@@ -123,7 +123,7 @@ export function PickersSlideTransition(inProps) {
123
123
  childFactory: element => /*#__PURE__*/React.cloneElement(element, {
124
124
  classNames: transitionClasses
125
125
  }),
126
- role: "presentation",
126
+ role: "none",
127
127
  ownerState: ownerState,
128
128
  children: /*#__PURE__*/_jsx(CSSTransition, _extends({
129
129
  mountOnEnter: true,
@@ -278,7 +278,7 @@ process.env.NODE_ENV !== "production" ? DatePicker.propTypes = {
278
278
  /**
279
279
  * Component displaying when passed `loading` true.
280
280
  * @returns {React.ReactNode} The node to render when loading.
281
- * @default () => <span>...</span>
281
+ * @default () => <span>…</span>
282
282
  */
283
283
  renderLoading: _propTypes.default.func,
284
284
  /**
@@ -271,7 +271,7 @@ process.env.NODE_ENV !== "production" ? DatePicker.propTypes = {
271
271
  /**
272
272
  * Component displaying when passed `loading` true.
273
273
  * @returns {React.ReactNode} The node to render when loading.
274
- * @default () => <span>...</span>
274
+ * @default () => <span>…</span>
275
275
  */
276
276
  renderLoading: PropTypes.func,
277
277
  /**
@@ -316,7 +316,7 @@ process.env.NODE_ENV !== "production" ? DateTimePicker.propTypes = {
316
316
  /**
317
317
  * Component displaying when passed `loading` true.
318
318
  * @returns {React.ReactNode} The node to render when loading.
319
- * @default () => <span>...</span>
319
+ * @default () => <span>…</span>
320
320
  */
321
321
  renderLoading: _propTypes.default.func,
322
322
  /**
@@ -309,7 +309,7 @@ process.env.NODE_ENV !== "production" ? DateTimePicker.propTypes = {
309
309
  /**
310
310
  * Component displaying when passed `loading` true.
311
311
  * @returns {React.ReactNode} The node to render when loading.
312
- * @default () => <span>...</span>
312
+ * @default () => <span>…</span>
313
313
  */
314
314
  renderLoading: PropTypes.func,
315
315
  /**
@@ -289,7 +289,7 @@ DesktopDatePicker.propTypes = {
289
289
  /**
290
290
  * Component displaying when passed `loading` true.
291
291
  * @returns {React.ReactNode} The node to render when loading.
292
- * @default () => <span>...</span>
292
+ * @default () => <span>…</span>
293
293
  */
294
294
  renderLoading: _propTypes.default.func,
295
295
  /**
@@ -282,7 +282,7 @@ DesktopDatePicker.propTypes = {
282
282
  /**
283
283
  * Component displaying when passed `loading` true.
284
284
  * @returns {React.ReactNode} The node to render when loading.
285
- * @default () => <span>...</span>
285
+ * @default () => <span>…</span>
286
286
  */
287
287
  renderLoading: PropTypes.func,
288
288
  /**
@@ -411,7 +411,7 @@ DesktopDateTimePicker.propTypes = {
411
411
  /**
412
412
  * Component displaying when passed `loading` true.
413
413
  * @returns {React.ReactNode} The node to render when loading.
414
- * @default () => <span>...</span>
414
+ * @default () => <span>…</span>
415
415
  */
416
416
  renderLoading: _propTypes.default.func,
417
417
  /**
@@ -404,7 +404,7 @@ DesktopDateTimePicker.propTypes = {
404
404
  /**
405
405
  * Component displaying when passed `loading` true.
406
406
  * @returns {React.ReactNode} The node to render when loading.
407
- * @default () => <span>...</span>
407
+ * @default () => <span>…</span>
408
408
  */
409
409
  renderLoading: PropTypes.func,
410
410
  /**
@@ -287,7 +287,7 @@ MobileDatePicker.propTypes = {
287
287
  /**
288
288
  * Component displaying when passed `loading` true.
289
289
  * @returns {React.ReactNode} The node to render when loading.
290
- * @default () => <span>...</span>
290
+ * @default () => <span>…</span>
291
291
  */
292
292
  renderLoading: _propTypes.default.func,
293
293
  /**
@@ -280,7 +280,7 @@ MobileDatePicker.propTypes = {
280
280
  /**
281
281
  * Component displaying when passed `loading` true.
282
282
  * @returns {React.ReactNode} The node to render when loading.
283
- * @default () => <span>...</span>
283
+ * @default () => <span>…</span>
284
284
  */
285
285
  renderLoading: PropTypes.func,
286
286
  /**
@@ -377,7 +377,7 @@ MobileDateTimePicker.propTypes = {
377
377
  /**
378
378
  * Component displaying when passed `loading` true.
379
379
  * @returns {React.ReactNode} The node to render when loading.
380
- * @default () => <span>...</span>
380
+ * @default () => <span>…</span>
381
381
  */
382
382
  renderLoading: _propTypes.default.func,
383
383
  /**
@@ -370,7 +370,7 @@ MobileDateTimePicker.propTypes = {
370
370
  /**
371
371
  * Component displaying when passed `loading` true.
372
372
  * @returns {React.ReactNode} The node to render when loading.
373
- * @default () => <span>...</span>
373
+ * @default () => <span>…</span>
374
374
  */
375
375
  renderLoading: PropTypes.func,
376
376
  /**
@@ -197,7 +197,7 @@ const PickersCalendarHeader = exports.PickersCalendarHeader = /*#__PURE__*/React
197
197
  className: (0, _clsx.default)(classes.root, className),
198
198
  ref: ref,
199
199
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(PickersCalendarHeaderLabelContainer, {
200
- role: "presentation",
200
+ role: "none",
201
201
  onClick: handleToggleView,
202
202
  ownerState: ownerState
203
203
  // putting this on the label item element below breaks when using transition
@@ -190,7 +190,7 @@ const PickersCalendarHeader = /*#__PURE__*/React.forwardRef(function PickersCale
190
190
  className: clsx(classes.root, className),
191
191
  ref: ref,
192
192
  children: [/*#__PURE__*/_jsxs(PickersCalendarHeaderLabelContainer, {
193
- role: "presentation",
193
+ role: "none",
194
194
  onClick: handleToggleView,
195
195
  ownerState: ownerState
196
196
  // putting this on the label item element below breaks when using transition
@@ -12,6 +12,7 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
13
  var React = _interopRequireWildcard(require("react"));
14
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
+ var _clsx = _interopRequireDefault(require("clsx"));
15
16
  var _FormControl = require("@mui/material/FormControl");
16
17
  var _styles = require("@mui/material/styles");
17
18
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
@@ -19,6 +20,7 @@ var _refType = _interopRequireDefault(require("@mui/utils/refType"));
19
20
  var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
20
21
  var _capitalize = _interopRequireDefault(require("@mui/utils/capitalize"));
21
22
  var _useSlotProps = _interopRequireDefault(require("@mui/utils/useSlotProps"));
23
+ var _resolveComponentProps = _interopRequireDefault(require("@mui/utils/resolveComponentProps"));
22
24
  var _visuallyHidden = _interopRequireDefault(require("@mui/utils/visuallyHidden"));
23
25
  var _pickersInputBaseClasses = require("./pickersInputBaseClasses");
24
26
  var _PickersSectionList = require("../../PickersSectionList");
@@ -26,6 +28,14 @@ var _usePickerTextFieldOwnerState = require("../usePickerTextFieldOwnerState");
26
28
  var _jsxRuntime = require("react/jsx-runtime");
27
29
  const _excluded = ["elements", "areAllSectionsEmpty", "defaultValue", "label", "value", "onChange", "id", "autoFocus", "endAdornment", "startAdornment", "renderSuffix", "slots", "slotProps", "contentEditable", "tabIndex", "onInput", "onPaste", "onKeyDown", "fullWidth", "name", "readOnly", "inputRef", "sectionListRef", "onFocus", "onBlur", "classes", "ownerState"],
28
30
  _excluded2 = ["ref"];
31
+ function mergePickersInputBaseSectionContentSlotProps(consumerSlotProps, baseClassName) {
32
+ return ownerState => {
33
+ const resolved = (0, _resolveComponentProps.default)(consumerSlotProps, ownerState) ?? {};
34
+ return (0, _extends2.default)({}, resolved, {
35
+ className: (0, _clsx.default)(baseClassName, resolved.className)
36
+ });
37
+ };
38
+ }
29
39
  const round = value => Math.round(value * 1e5) / 1e5;
30
40
  const PickersInputBaseRoot = exports.PickersInputBaseRoot = (0, _styles.styled)('div', {
31
41
  name: 'MuiPickersInputBase',
@@ -43,6 +53,10 @@ const PickersInputBaseRoot = exports.PickersInputBaseRoot = (0, _styles.styled)(
43
53
  boxSizing: 'border-box',
44
54
  // Prevent padding issue with fullWidth.
45
55
  letterSpacing: `${round(0.15 / 16)}em`,
56
+ [`&.${_pickersInputBaseClasses.pickersInputBaseClasses.disabled}`]: {
57
+ color: (theme.vars || theme).palette.action.disabled,
58
+ cursor: 'default'
59
+ },
46
60
  variants: [{
47
61
  props: {
48
62
  isInputInFullWidth: true
@@ -391,9 +405,7 @@ const PickersInputBase = exports.PickersInputBase = /*#__PURE__*/React.forwardRe
391
405
  root: (0, _extends2.default)({}, slotProps?.input, {
392
406
  ownerState
393
407
  }),
394
- sectionContent: {
395
- className: _pickersInputBaseClasses.pickersInputBaseClasses.sectionContent
396
- },
408
+ sectionContent: mergePickersInputBaseSectionContentSlotProps(slotProps?.sectionContent, _pickersInputBaseClasses.pickersInputBaseClasses.sectionContent),
397
409
  sectionSeparator: ({
398
410
  separatorPosition
399
411
  }) => ({
@@ -7,6 +7,7 @@ const _excluded = ["elements", "areAllSectionsEmpty", "defaultValue", "label", "
7
7
  _excluded2 = ["ref"];
8
8
  import * as React from 'react';
9
9
  import PropTypes from 'prop-types';
10
+ import clsx from 'clsx';
10
11
  import { useFormControl } from '@mui/material/FormControl';
11
12
  import { styled, useThemeProps } from '@mui/material/styles';
12
13
  import useForkRef from '@mui/utils/useForkRef';
@@ -14,11 +15,20 @@ import refType from '@mui/utils/refType';
14
15
  import composeClasses from '@mui/utils/composeClasses';
15
16
  import capitalize from '@mui/utils/capitalize';
16
17
  import useSlotProps from '@mui/utils/useSlotProps';
18
+ import resolveComponentProps from '@mui/utils/resolveComponentProps';
17
19
  import visuallyHidden from '@mui/utils/visuallyHidden';
18
20
  import { pickersInputBaseClasses, getPickersInputBaseUtilityClass } from "./pickersInputBaseClasses.mjs";
19
21
  import { Unstable_PickersSectionList as PickersSectionList, Unstable_PickersSectionListRoot as PickersSectionListRoot, Unstable_PickersSectionListSection as PickersSectionListSection, Unstable_PickersSectionListSectionSeparator as PickersSectionListSectionSeparator, Unstable_PickersSectionListSectionContent as PickersSectionListSectionContent } from "../../PickersSectionList/index.mjs";
20
22
  import { usePickerTextFieldOwnerState } from "../usePickerTextFieldOwnerState.mjs";
21
23
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
+ function mergePickersInputBaseSectionContentSlotProps(consumerSlotProps, baseClassName) {
25
+ return ownerState => {
26
+ const resolved = resolveComponentProps(consumerSlotProps, ownerState) ?? {};
27
+ return _extends({}, resolved, {
28
+ className: clsx(baseClassName, resolved.className)
29
+ });
30
+ };
31
+ }
22
32
  const round = value => Math.round(value * 1e5) / 1e5;
23
33
  export const PickersInputBaseRoot = styled('div', {
24
34
  name: 'MuiPickersInputBase',
@@ -36,6 +46,10 @@ export const PickersInputBaseRoot = styled('div', {
36
46
  boxSizing: 'border-box',
37
47
  // Prevent padding issue with fullWidth.
38
48
  letterSpacing: `${round(0.15 / 16)}em`,
49
+ [`&.${pickersInputBaseClasses.disabled}`]: {
50
+ color: (theme.vars || theme).palette.action.disabled,
51
+ cursor: 'default'
52
+ },
39
53
  variants: [{
40
54
  props: {
41
55
  isInputInFullWidth: true
@@ -384,9 +398,7 @@ const PickersInputBase = /*#__PURE__*/React.forwardRef(function PickersInputBase
384
398
  root: _extends({}, slotProps?.input, {
385
399
  ownerState
386
400
  }),
387
- sectionContent: {
388
- className: pickersInputBaseClasses.sectionContent
389
- },
401
+ sectionContent: mergePickersInputBaseSectionContentSlotProps(slotProps?.sectionContent, pickersInputBaseClasses.sectionContent),
390
402
  sectionSeparator: ({
391
403
  separatorPosition
392
404
  }) => ({
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { SxProps, Theme } from '@mui/material/styles';
3
3
  import { MuiEvent } from '@mui/x-internals/types';
4
- import { PickersSectionListProps } from "../../PickersSectionList/index.mjs";
4
+ import { PickersSectionListProps, PickersSectionListSlotProps } from "../../PickersSectionList/index.mjs";
5
5
  import { PickerTextFieldOwnerState } from "../../models/fields.mjs";
6
6
  export interface PickersInputPropsUsedByField extends Pick<PickersSectionListProps, 'elements' | 'sectionListRef' | 'contentEditable' | 'tabIndex'> {
7
7
  /**
@@ -70,6 +70,11 @@ export interface PickersInputBaseSlotProps {
70
70
  root?: PickersInputBaseRootSlotProps;
71
71
  input?: PickersInputBaseInputSlotProps;
72
72
  htmlInput?: React.ComponentPropsWithRef<'input'>;
73
+ /**
74
+ * Props forwarded to each section's content element inside `PickersSectionList`.
75
+ * Merged with the built-in section content styles.
76
+ */
77
+ sectionContent?: PickersSectionListSlotProps['sectionContent'];
73
78
  }
74
79
  export interface PickersInputBaseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, keyof PickersInputPropsUsedByField>, PickersInputPropsUsedByField {
75
80
  ownerState?: PickerTextFieldOwnerState;
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { SxProps, Theme } from '@mui/material/styles';
3
3
  import { MuiEvent } from '@mui/x-internals/types';
4
- import { PickersSectionListProps } from "../../PickersSectionList/index.js";
4
+ import { PickersSectionListProps, PickersSectionListSlotProps } from "../../PickersSectionList/index.js";
5
5
  import { PickerTextFieldOwnerState } from "../../models/fields.js";
6
6
  export interface PickersInputPropsUsedByField extends Pick<PickersSectionListProps, 'elements' | 'sectionListRef' | 'contentEditable' | 'tabIndex'> {
7
7
  /**
@@ -70,6 +70,11 @@ export interface PickersInputBaseSlotProps {
70
70
  root?: PickersInputBaseRootSlotProps;
71
71
  input?: PickersInputBaseInputSlotProps;
72
72
  htmlInput?: React.ComponentPropsWithRef<'input'>;
73
+ /**
74
+ * Props forwarded to each section's content element inside `PickersSectionList`.
75
+ * Merged with the built-in section content styles.
76
+ */
77
+ sectionContent?: PickersSectionListSlotProps['sectionContent'];
73
78
  }
74
79
  export interface PickersInputBaseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, keyof PickersInputPropsUsedByField>, PickersInputPropsUsedByField {
75
80
  ownerState?: PickerTextFieldOwnerState;
@@ -50,9 +50,6 @@ const PickersOutlinedInputRoot = (0, _styles.styled)(_PickersInputBase2.PickersI
50
50
  [`&.${_pickersOutlinedInputClasses.pickersOutlinedInputClasses.disabled}`]: {
51
51
  [`& .${_pickersOutlinedInputClasses.pickersOutlinedInputClasses.notchedOutline}`]: {
52
52
  borderColor: (theme.vars || theme).palette.action.disabled
53
- },
54
- '*': {
55
- color: (theme.vars || theme).palette.action.disabled
56
53
  }
57
54
  },
58
55
  variants: Object.keys((theme.vars ?? theme).palette)
@@ -43,9 +43,6 @@ const PickersOutlinedInputRoot = styled(PickersInputBaseRoot, {
43
43
  [`&.${pickersOutlinedInputClasses.disabled}`]: {
44
44
  [`& .${pickersOutlinedInputClasses.notchedOutline}`]: {
45
45
  borderColor: (theme.vars || theme).palette.action.disabled
46
- },
47
- '*': {
48
- color: (theme.vars || theme).palette.action.disabled
49
46
  }
50
47
  },
51
48
  variants: Object.keys((theme.vars ?? theme).palette)
@@ -227,7 +227,7 @@ StaticDatePicker.propTypes = {
227
227
  /**
228
228
  * Component displaying when passed `loading` true.
229
229
  * @returns {React.ReactNode} The node to render when loading.
230
- * @default () => <span>...</span>
230
+ * @default () => <span>…</span>
231
231
  */
232
232
  renderLoading: _propTypes.default.func,
233
233
  /**
@@ -220,7 +220,7 @@ StaticDatePicker.propTypes = {
220
220
  /**
221
221
  * Component displaying when passed `loading` true.
222
222
  * @returns {React.ReactNode} The node to render when loading.
223
- * @default () => <span>...</span>
223
+ * @default () => <span>…</span>
224
224
  */
225
225
  renderLoading: PropTypes.func,
226
226
  /**
@@ -314,7 +314,7 @@ StaticDateTimePicker.propTypes = {
314
314
  /**
315
315
  * Component displaying when passed `loading` true.
316
316
  * @returns {React.ReactNode} The node to render when loading.
317
- * @default () => <span>...</span>
317
+ * @default () => <span>…</span>
318
318
  */
319
319
  renderLoading: _propTypes.default.func,
320
320
  /**
@@ -307,7 +307,7 @@ StaticDateTimePicker.propTypes = {
307
307
  /**
308
308
  * Component displaying when passed `loading` true.
309
309
  * @returns {React.ReactNode} The node to render when loading.
310
- * @default () => <span>...</span>
310
+ * @default () => <span>…</span>
311
311
  */
312
312
  renderLoading: PropTypes.func,
313
313
  /**
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v9.2.0
2
+ * @mui/x-date-pickers v9.4.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
package/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v9.2.0
2
+ * @mui/x-date-pickers v9.4.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -31,7 +31,7 @@ function usePreviousMonthDisabled(month, {
31
31
  return React.useMemo(() => {
32
32
  const now = adapter.date(undefined, timezone);
33
33
  const firstEnabledMonth = adapter.startOfMonth(disablePast && adapter.isAfter(now, minDate) ? now : minDate);
34
- return !adapter.isBefore(firstEnabledMonth, month);
34
+ return !adapter.isBefore(firstEnabledMonth, adapter.startOfMonth(month));
35
35
  }, [disablePast, minDate, month, adapter, timezone]);
36
36
  }
37
37
  function useMeridiemMode(date, ampm, onChange, selectionState) {
@@ -22,7 +22,7 @@ export function usePreviousMonthDisabled(month, {
22
22
  return React.useMemo(() => {
23
23
  const now = adapter.date(undefined, timezone);
24
24
  const firstEnabledMonth = adapter.startOfMonth(disablePast && adapter.isAfter(now, minDate) ? now : minDate);
25
- return !adapter.isBefore(firstEnabledMonth, month);
25
+ return !adapter.isBefore(firstEnabledMonth, adapter.startOfMonth(month));
26
26
  }, [disablePast, minDate, month, adapter, timezone]);
27
27
  }
28
28
  export function useMeridiemMode(date, ampm, onChange, selectionState) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-date-pickers",
3
- "version": "9.2.0",
3
+ "version": "9.4.0",
4
4
  "author": "MUI Team",
5
5
  "description": "The community edition of the MUI X Date and Time Picker components.",
6
6
  "license": "MIT",
@@ -33,7 +33,7 @@
33
33
  "directory": "packages/x-date-pickers"
34
34
  },
35
35
  "dependencies": {
36
- "@babel/runtime": "^7.29.2",
36
+ "@babel/runtime": "^7.29.7",
37
37
  "@mui/utils": "9.0.1",
38
38
  "@types/react-transition-group": "^4.4.12",
39
39
  "clsx": "^2.1.1",