@mui/x-date-pickers 9.10.1 → 9.12.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.
@@ -64,6 +64,15 @@ export declare class AdapterDayjs implements MuiPickersAdapter<string> {
64
64
  * See https://github.com/iamkun/dayjs/blob/b3624de619d6e734cd0ffdbbd3502185041c1b60/src/plugin/timezone/index.js#L72
65
65
  */
66
66
  protected adjustOffset: (value: Dayjs) => Dayjs;
67
+ /**
68
+ * On dates predating the timezone standardization, IANA falls back on the Local Mean Time of the
69
+ * location, whose offset is not a round number of minutes (`Asia/Kolkata` is `GMT+05:53:28`).
70
+ * `dayjs` then moves the day of the month when only the year or the month was meant to change.
71
+ * `daysInMonth()` is unusable on such a value because it derives from the equally broken
72
+ * `endOf('month')`, hence computing it on a plain UTC value instead.
73
+ * See https://github.com/mui/mui-x/issues/23163
74
+ */
75
+ private restoreDayOfMonth;
67
76
  date: <T extends string | null | undefined>(value?: T, timezone?: PickersTimezone) => DateBuilderReturnType<T>;
68
77
  getInvalidDate: () => Dayjs;
69
78
  getTimezone: (value: Dayjs) => string;
@@ -64,6 +64,15 @@ export declare class AdapterDayjs implements MuiPickersAdapter<string> {
64
64
  * See https://github.com/iamkun/dayjs/blob/b3624de619d6e734cd0ffdbbd3502185041c1b60/src/plugin/timezone/index.js#L72
65
65
  */
66
66
  protected adjustOffset: (value: Dayjs) => Dayjs;
67
+ /**
68
+ * On dates predating the timezone standardization, IANA falls back on the Local Mean Time of the
69
+ * location, whose offset is not a round number of minutes (`Asia/Kolkata` is `GMT+05:53:28`).
70
+ * `dayjs` then moves the day of the month when only the year or the month was meant to change.
71
+ * `daysInMonth()` is unusable on such a value because it derives from the equally broken
72
+ * `endOf('month')`, hence computing it on a plain UTC value instead.
73
+ * See https://github.com/mui/mui-x/issues/23163
74
+ */
75
+ private restoreDayOfMonth;
67
76
  date: <T extends string | null | undefined>(value?: T, timezone?: PickersTimezone) => DateBuilderReturnType<T>;
68
77
  getInvalidDate: () => Dayjs;
69
78
  getTimezone: (value: Dayjs) => string;
@@ -282,6 +282,36 @@ class AdapterDayjs {
282
282
  }
283
283
  return value;
284
284
  };
285
+
286
+ /**
287
+ * On dates predating the timezone standardization, IANA falls back on the Local Mean Time of the
288
+ * location, whose offset is not a round number of minutes (`Asia/Kolkata` is `GMT+05:53:28`).
289
+ * `dayjs` then moves the day of the month when only the year or the month was meant to change.
290
+ * `daysInMonth()` is unusable on such a value because it derives from the equally broken
291
+ * `endOf('month')`, hence computing it on a plain UTC value instead.
292
+ * See https://github.com/mui/mui-x/issues/23163
293
+ */
294
+ restoreDayOfMonth = (value, reference) => {
295
+ const timezone = this.getTimezone(value);
296
+ // `system` and `UTC` values keep an offset that matches their instant, so they are never affected.
297
+ if (!this.hasUTCPlugin() || timezone === 'system' || timezone === 'UTC') {
298
+ return value;
299
+ }
300
+ const wallClock = _dayjs.default.utc(value.format('YYYY-MM-DDTHH:mm:ss.SSS'));
301
+
302
+ // Years above 9999 don't round-trip through the ISO format, and an invalid value formats to
303
+ // `Invalid Date`. Both would make the comparison below `NaN`.
304
+ if (!wallClock.isValid()) {
305
+ return value;
306
+ }
307
+
308
+ // A shorter target month legitimately clamps the day (`Jan 31` + 1 month is `Feb 28`).
309
+ const expectedDayOfMonth = Math.min(reference.date(), wallClock.daysInMonth());
310
+ if (value.date() === expectedDayOfMonth) {
311
+ return value;
312
+ }
313
+ return value.set('date', expectedDayOfMonth);
314
+ };
285
315
  date = (value, timezone = 'default') => {
286
316
  if (value === null) {
287
317
  return null;
@@ -456,10 +486,10 @@ class AdapterDayjs {
456
486
  return this.adjustOffset(value.endOf('day'));
457
487
  };
458
488
  addYears = (value, amount) => {
459
- return this.adjustOffset(value.add(amount, 'year'));
489
+ return this.adjustOffset(this.restoreDayOfMonth(value.add(amount, 'year'), value));
460
490
  };
461
491
  addMonths = (value, amount) => {
462
- return this.adjustOffset(value.add(amount, 'month'));
492
+ return this.adjustOffset(this.restoreDayOfMonth(value.add(amount, 'month'), value));
463
493
  };
464
494
  addWeeks = (value, amount) => {
465
495
  return this.adjustOffset(value.add(amount, 'week'));
@@ -498,10 +528,10 @@ class AdapterDayjs {
498
528
  return value.millisecond();
499
529
  };
500
530
  setYear = (value, year) => {
501
- return this.adjustOffset(value.set('year', year));
531
+ return this.adjustOffset(this.restoreDayOfMonth(value.set('year', year), value));
502
532
  };
503
533
  setMonth = (value, month) => {
504
- return this.adjustOffset(value.set('month', month));
534
+ return this.adjustOffset(this.restoreDayOfMonth(value.set('month', month), value));
505
535
  };
506
536
  setDate = (value, date) => {
507
537
  return this.adjustOffset(value.set('date', date));
@@ -273,6 +273,36 @@ export class AdapterDayjs {
273
273
  }
274
274
  return value;
275
275
  };
276
+
277
+ /**
278
+ * On dates predating the timezone standardization, IANA falls back on the Local Mean Time of the
279
+ * location, whose offset is not a round number of minutes (`Asia/Kolkata` is `GMT+05:53:28`).
280
+ * `dayjs` then moves the day of the month when only the year or the month was meant to change.
281
+ * `daysInMonth()` is unusable on such a value because it derives from the equally broken
282
+ * `endOf('month')`, hence computing it on a plain UTC value instead.
283
+ * See https://github.com/mui/mui-x/issues/23163
284
+ */
285
+ restoreDayOfMonth = (value, reference) => {
286
+ const timezone = this.getTimezone(value);
287
+ // `system` and `UTC` values keep an offset that matches their instant, so they are never affected.
288
+ if (!this.hasUTCPlugin() || timezone === 'system' || timezone === 'UTC') {
289
+ return value;
290
+ }
291
+ const wallClock = dayjs.utc(value.format('YYYY-MM-DDTHH:mm:ss.SSS'));
292
+
293
+ // Years above 9999 don't round-trip through the ISO format, and an invalid value formats to
294
+ // `Invalid Date`. Both would make the comparison below `NaN`.
295
+ if (!wallClock.isValid()) {
296
+ return value;
297
+ }
298
+
299
+ // A shorter target month legitimately clamps the day (`Jan 31` + 1 month is `Feb 28`).
300
+ const expectedDayOfMonth = Math.min(reference.date(), wallClock.daysInMonth());
301
+ if (value.date() === expectedDayOfMonth) {
302
+ return value;
303
+ }
304
+ return value.set('date', expectedDayOfMonth);
305
+ };
276
306
  date = (value, timezone = 'default') => {
277
307
  if (value === null) {
278
308
  return null;
@@ -447,10 +477,10 @@ export class AdapterDayjs {
447
477
  return this.adjustOffset(value.endOf('day'));
448
478
  };
449
479
  addYears = (value, amount) => {
450
- return this.adjustOffset(value.add(amount, 'year'));
480
+ return this.adjustOffset(this.restoreDayOfMonth(value.add(amount, 'year'), value));
451
481
  };
452
482
  addMonths = (value, amount) => {
453
- return this.adjustOffset(value.add(amount, 'month'));
483
+ return this.adjustOffset(this.restoreDayOfMonth(value.add(amount, 'month'), value));
454
484
  };
455
485
  addWeeks = (value, amount) => {
456
486
  return this.adjustOffset(value.add(amount, 'week'));
@@ -489,10 +519,10 @@ export class AdapterDayjs {
489
519
  return value.millisecond();
490
520
  };
491
521
  setYear = (value, year) => {
492
- return this.adjustOffset(value.set('year', year));
522
+ return this.adjustOffset(this.restoreDayOfMonth(value.set('year', year), value));
493
523
  };
494
524
  setMonth = (value, month) => {
495
- return this.adjustOffset(value.set('month', month));
525
+ return this.adjustOffset(this.restoreDayOfMonth(value.set('month', month), value));
496
526
  };
497
527
  setDate = (value, date) => {
498
528
  return this.adjustOffset(value.set('date', date));
package/CHANGELOG.md CHANGED
@@ -1,5 +1,288 @@
1
1
  # Changelog
2
2
 
3
+ ## 9.12.0
4
+
5
+ _Aug 21, 2026_
6
+
7
+ We'd like to extend a big thank you to the 12 contributors who made this release possible. Here are some highlights ✨:
8
+
9
+ - 🧮 Support [Formulas](https://mui.com/x/react-data-grid/formulas/) on the Data Grid: cells in opted-in columns can hold spreadsheet-like formulas (`=SUM(RANGE(…))`, `=price * quantity`) evaluated by a built-in engine, with a formula editor and [Formula Bar](https://mui.com/x/react-data-grid/components/formula-bar/), autocomplete, reference highlighting, optional A1 notation, fill-handle reference adjustment, custom functions, and live formula Excel export
10
+ - ♿️ Improve the accessibility of Data Grid cells and picker day cells
11
+ - 🗓️ Enable multi-resource event creation and editing in the Scheduler
12
+ - 🐞 Bugfixes
13
+ - 📚 Documentation improvements
14
+
15
+ Special thanks go out to these community members for their valuable contributions:
16
+ @Anexus5919, @mustafajw07
17
+
18
+ The following team members contributed to this release:
19
+ @brijeshb42, @flaviendelangle, @JCQuintas, @LukasTy, @MBilalShafi, @michelengelen, @noraleonte, @rita-codes, @romgrk, @silviuaavram
20
+
21
+ ### Data Grid
22
+
23
+ #### `@mui/x-data-grid@9.12.0`
24
+
25
+ - [DataGrid] Expose `apiRef` on `GridCallbackDetails` for selector access in callbacks (#22973) @michelengelen
26
+ - [DataGrid] Fix header height not updating when `headerFilters` or `columnGroupingModel` change (#23059) @MBilalShafi
27
+ - [DataGrid] Fix unhandled rejection when unmounting mid-autosize (#23319) @JCQuintas
28
+ - [DataGrid] Label the blank `singleSelect` filter option (#23294) @JCQuintas
29
+ - [DataGrid] Stop sending incomplete filter items to the data source (#23303) @JCQuintas
30
+ - [DataGrid] Support the `rowheader` attribute for grid cells (#23340) @silviuaavram
31
+
32
+ #### `@mui/x-data-grid-pro@9.12.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
33
+
34
+ Same changes as in `@mui/x-data-grid@9.12.0`, plus:
35
+
36
+ - [DataGridPro] Honor `hasNextPage` in infinite lazy loading (#23048) @MBilalShafi
37
+
38
+ #### `@mui/x-data-grid-premium@9.12.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
39
+
40
+ Same changes as in `@mui/x-data-grid-pro@9.12.0`, plus:
41
+
42
+ - [DataGridPremium] Formula support (#22807) @MBilalShafi
43
+
44
+ ### Date and Time Pickers
45
+
46
+ #### `@mui/x-date-pickers@9.12.0`
47
+
48
+ - [fields] Keep the selected section on blank space clicks (#23318) @LukasTy
49
+ - [pickers] Associate the day cells with their week day column header (#23339) @LukasTy
50
+ - [pickers] Keep the `gridcell` role and the column index on filler cells (#23326) @Anexus5919
51
+
52
+ #### `@mui/x-date-pickers-pro@9.12.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
53
+
54
+ Same changes as in `@mui/x-date-pickers@9.12.0`, plus:
55
+
56
+ - [DateRangeCalendar] Round the range highlight at the month grid edges (#23297) @JCQuintas
57
+ - [DateRangePicker] Keep the range highlight opaque for disabled days (#23317) @JCQuintas
58
+
59
+ ### Charts
60
+
61
+ #### `@mui/x-charts@9.12.0`
62
+
63
+ - [charts] Add a demo for label on grid row (#23333) @noraleonte
64
+ - [charts] Fix React 18 `propTypes` warnings and stray-pointer test flakiness (#23384) @LukasTy
65
+ - [charts] Focus the clicked item for keyboard navigation (#23247) @JCQuintas
66
+
67
+ #### `@mui/x-charts-pro@9.12.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
68
+
69
+ Same changes as in `@mui/x-charts@9.12.0`.
70
+
71
+ #### `@mui/x-charts-premium@9.12.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
72
+
73
+ Same changes as in `@mui/x-charts-pro@9.12.0`, plus:
74
+
75
+ - [charts-premium] Add `onItemClick` to the radial charts (#23253) @JCQuintas
76
+
77
+ ### Tree View
78
+
79
+ #### `@mui/x-tree-view@9.12.0`
80
+
81
+ Internal changes.
82
+
83
+ #### `@mui/x-tree-view-pro@9.12.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
84
+
85
+ Same changes as in `@mui/x-tree-view@9.12.0`.
86
+
87
+ ### Scheduler
88
+
89
+ #### `@mui/x-scheduler@9.0.0-beta.10`
90
+
91
+ - [scheduler] Add `onEventEditingStart` to let consumers open their own edit UI (#23361) @rita-codes
92
+ - [scheduler] Fix keyboard and focus issues around the "+N more" popover (#23312) @rita-codes
93
+ - [scheduler] Honor `viewConfig` hour limits in the compact day and week views (#23316) @rita-codes
94
+ - [scheduler] Share timeline event layout data (#23366) @flaviendelangle
95
+ - [scheduler] enable multi-resource event creation and editing (#23313) @mustafajw07
96
+
97
+ #### `@mui/x-scheduler-premium@9.0.0-beta.10` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
98
+
99
+ Same changes as in `@mui/x-scheduler@9.0.0-beta.10`, plus:
100
+
101
+ - [scheduler-premium] Allow to control the min and max hour in the Event Timeline (#23212) @rita-codes
102
+ - [scheduler-premium] Dependencies - Create, select and delete via terminals (#23200) @rita-codes
103
+
104
+ ### Codemod
105
+
106
+ #### `@mui/x-codemod@9.12.0`
107
+
108
+ Internal changes.
109
+
110
+ ### Docs
111
+
112
+ - [docs][charts] Document line mark size customization (#23370) @JCQuintas
113
+ - [docs] Add recipe for constraining the `make-child` drop action by item type (#22940) @michelengelen
114
+ - [docs] Redirect the renamed Event Timeline views page (#23324) @brijeshb42
115
+ - [docs] Remove unused `adapter-dependencies.json` (#23328) @LukasTy
116
+
117
+ ### Core
118
+
119
+ - [code-infra] Add release skill (#23308) @brijeshb42
120
+ - [code-infra] Fix changelog categorization of docs and `DateRangeCalendar` tags (#23385) @JCQuintas
121
+ - [code-infra] Sync mui-release skill (#23330) @brijeshb42
122
+
123
+ ### Miscellaneous
124
+
125
+ - [core] Declare the missing `react-dom` peer dependencies (#23381) @LukasTy
126
+ - [test] Fix act warnings in the data source filter tests (#23360) @JCQuintas
127
+ - [virtualizer] Add inverse-sticky layout (#23053) @romgrk
128
+
129
+ ## 9.11.1
130
+
131
+ _Aug 6, 2026_
132
+
133
+ We'd like to extend a big thank you to the 2 contributors who made this release possible. Here are some highlights ✨:
134
+
135
+ - 🐛 Fix the empty `@mui/x-charts-vendor` package published in v9.11.0
136
+
137
+ The following team members contributed to this release:
138
+ @JCQuintas, @rita-codes
139
+
140
+ ### Charts
141
+
142
+ #### `@mui/x-charts@9.11.1`
143
+
144
+ - [charts] Fix empty `@mui/x-charts-vendor` published package (#23310) @JCQuintas
145
+
146
+ #### `@mui/x-charts-pro@9.11.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
147
+
148
+ Same changes as in `@mui/x-charts@9.11.1`.
149
+
150
+ #### `@mui/x-charts-premium@9.11.1` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
151
+
152
+ Same changes as in `@mui/x-charts-pro@9.11.1`.
153
+
154
+ #### `@mui/x-charts-vendor@9.11.1`
155
+
156
+ - [charts] Fix empty `@mui/x-charts-vendor` published package (#23310) @JCQuintas
157
+
158
+ ### Scheduler
159
+
160
+ #### `@mui/x-scheduler@9.0.0-beta.9`
161
+
162
+ - [scheduler] Show the range validation errors on the End date and End time fields (#23291) @rita-codes
163
+
164
+ #### `@mui/x-scheduler-premium@9.0.0-beta.9` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
165
+
166
+ Same changes as in `@mui/x-scheduler@9.0.0-beta.9`.
167
+
168
+ ## 9.11.0
169
+
170
+ _Aug 6, 2026_
171
+
172
+ We'd like to extend a big thank you to the 14 contributors who made this release possible. Here are some highlights ✨:
173
+
174
+ - ✨ Add `addItems()` and `getItemSelection()` API methods to Tree View
175
+
176
+ Special thanks go out to these community members for their valuable contributions:
177
+ @12joan, @Anexus5919, @kevincorizi-sbt, @mixelburg, @mustafajw07, @strazto
178
+
179
+ The following team members contributed to this release:
180
+ @flaviendelangle, @hasdfa, @JCQuintas, @LukasTy, @MBilalShafi, @michelengelen, @noraleonte, @rita-codes
181
+
182
+ ### Data Grid
183
+
184
+ #### `@mui/x-data-grid@9.11.0`
185
+
186
+ - [DataGrid] Fix `updateRows` stripping class prototypes from rows in datasource mode (#22288) @mixelburg
187
+ - [DataGrid] Do not re-fetch data when an `Activity` becomes visible (#22603) @12joan
188
+ - [DataGrid] Fix toolbar button stealing focus when a sibling's disabled state changes (#23204) @MBilalShafi
189
+
190
+ #### `@mui/x-data-grid-pro@9.11.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
191
+
192
+ Same changes as in `@mui/x-data-grid@9.11.0`.
193
+
194
+ #### `@mui/x-data-grid-premium@9.11.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
195
+
196
+ Same changes as in `@mui/x-data-grid-pro@9.11.0`.
197
+
198
+ ### Date and Time Pickers
199
+
200
+ #### `@mui/x-date-pickers@9.11.0`
201
+
202
+ - [pickers] Fix day shift when editing dates predating timezone standardization (#23296) @JCQuintas
203
+
204
+ #### `@mui/x-date-pickers-pro@9.11.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
205
+
206
+ Same changes as in `@mui/x-date-pickers@9.11.0`, plus:
207
+
208
+ - [DateRangePicker] Fix disabled filler cells showing the range highlight (#23293) @JCQuintas
209
+
210
+ ### Charts
211
+
212
+ #### `@mui/x-charts@9.11.0`
213
+
214
+ - [charts] Activate the focused item with `Enter`/`Space` (#23218) @JCQuintas
215
+ - [charts] Extract the axis click payload builders (#23215) @JCQuintas
216
+ - [charts] Fix `GestureManager` event listener leak on chart unmount (#23283) @kevincorizi-sbt
217
+ - [charts] Fix `slotProps.legend.position` and `direction` in `RadarChart` (#23254) @JCQuintas
218
+ - [charts] Fix axis clicks being discarded on slight pointer movement (#23244) @noraleonte
219
+ - [charts] Fix image export of charts sized by their parent element (#23255) @JCQuintas
220
+ - [charts] Forward `experimentalFeatures` on `RadarChart` and `Heatmap` (#23216) @JCQuintas
221
+ - [charts] Hide focus indicator when the chart loses focus (#23213) @JCQuintas
222
+
223
+ #### `@mui/x-charts-pro@9.11.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
224
+
225
+ Same changes as in `@mui/x-charts@9.11.0`.
226
+
227
+ #### `@mui/x-charts-premium@9.11.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
228
+
229
+ Same changes as in `@mui/x-charts-pro@9.11.0`, plus:
230
+
231
+ - [charts-premium] Fix `RangeBar` type override (#23217) @JCQuintas
232
+
233
+ ### Tree View
234
+
235
+ #### `@mui/x-tree-view@9.11.0`
236
+
237
+ - [tree view] Add `addItems()` API method (#23159) @JCQuintas
238
+ - [tree view] Add `getItemSelection` API method (#23257) @noraleonte
239
+ - [tree view] Ignore `keepExistingSelection` when `multiSelect` is `false` (#23242) @JCQuintas
240
+ - [tree view] Prevent duplicate ids in multi-select arrow navigation (#23006) @Anexus5919
241
+
242
+ #### `@mui/x-tree-view-pro@9.11.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-tree-view@9.11.0`, plus:
245
+
246
+ - [tree view] Discard superseded lazy-loading responses (#23005) @Anexus5919
247
+
248
+ ### Scheduler
249
+
250
+ #### `@mui/x-scheduler@9.0.0-beta.8`
251
+
252
+ - [scheduler] Add `localeText` prop to standalone views (#23210) @rita-codes
253
+ - [scheduler] Finetune touch experience for time grid events and introduce editing drawer (#22624) @noraleonte
254
+ - [scheduler] Introduce the edit dialog form context & lifecycle contract (#23284) @rita-codes
255
+ - [scheduler] Refactor edit dialog General tab into section components (#23206) @rita-codes
256
+ - [scheduler] Replace copied Base UI internals with `@base-ui/react/internals` imports (#21972) @flaviendelangle
257
+ - [scheduler] Hide resource picker when no resources are provided (#23290) @mustafajw07
258
+ - [scheduler] Support multi-resource occurrences in `EventTimeline` (#23240) @mustafajw07
259
+
260
+ #### `@mui/x-scheduler-premium@9.0.0-beta.8` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
261
+
262
+ Same changes as in `@mui/x-scheduler@9.0.0-beta.8`.
263
+
264
+ ### Codemod
265
+
266
+ #### `@mui/x-codemod@9.11.0`
267
+
268
+ - [codemod] Remove unused `@babel/core` and `@babel/traverse` dependencies (#23245) @LukasTy
269
+
270
+ ### Docs
271
+
272
+ - [docs] Add recipe for adding new rows from clipboard copy (#22913) @michelengelen
273
+ - [docs] Clarify the package versions in v8 upgrade guides (#22376) @strazto
274
+ - [docs] Replace README peer dependency lists with an npm install command (#23256) @LukasTy
275
+
276
+ ### Core
277
+
278
+ - [code-infra] Align action pin version comments (#23238) @LukasTy
279
+
280
+ ### Miscellaneous
281
+
282
+ - [chat] Drop the undeclared `@mui/icons-material` dependency (#23252) @LukasTy
283
+ - [chat] Sanitize image part URLs and share the URL allow-list with markdown (#23058) @hasdfa
284
+ - [test] Type the `PickersTextField` test stub instead of `as any` (#23194) @LukasTy
285
+
3
286
  ## 9.10.1
4
287
 
5
288
  _Jul 23, 2026_
@@ -262,6 +262,8 @@ function DayCalendar(inProps) {
262
262
  const now = (0, _useUtils.useNow)(timezone);
263
263
  const classes = useUtilityClasses(classesProp);
264
264
  const isRtl = (0, _RtlProvider.useRtl)();
265
+ // The week number is a `rowheader`, so it takes the first column of the grid.
266
+ const columnIndexOffset = displayWeekNumber ? 1 : 0;
265
267
  const isDateDisabled = (0, _useIsDateDisabled.useIsDateDisabled)({
266
268
  shouldDisableDate,
267
269
  shouldDisableMonth,
@@ -384,19 +386,24 @@ function DayCalendar(inProps) {
384
386
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(PickerCalendarDayRoot, {
385
387
  role: "grid",
386
388
  "aria-labelledby": gridLabelId,
389
+ "aria-colcount": columnIndexOffset + 7,
390
+ "aria-rowcount": weeksToDisplay.length + 1,
387
391
  className: classes.root,
388
392
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(PickerCalendarDayHeader, {
389
393
  role: "row",
394
+ "aria-rowindex": 1,
390
395
  className: classes.header,
391
396
  children: [displayWeekNumber && /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerCalendarWeekNumberLabel, {
392
397
  variant: "caption",
393
398
  role: "columnheader",
399
+ "aria-colindex": 1,
394
400
  "aria-label": translations.calendarWeekNumberHeaderLabel,
395
401
  className: classes.weekNumberLabel,
396
402
  children: translations.calendarWeekNumberHeaderText
397
403
  }), (0, _dateUtils.getWeekdays)(adapter, now).map((weekday, i) => /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerCalendarWeekDayLabel, {
398
404
  variant: "caption",
399
405
  role: "columnheader",
406
+ "aria-colindex": columnIndexOffset + i + 1,
400
407
  "aria-label": adapter.format(weekday, 'weekday'),
401
408
  className: classes.weekDayLabel,
402
409
  children: dayOfWeekFormatter(weekday)
@@ -419,13 +426,13 @@ function DayCalendar(inProps) {
419
426
  children: weeksToDisplay.map((week, index) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(PickerCalendarWeek, {
420
427
  role: "row",
421
428
  className: classes.weekContainer
422
- // fix issue of announcing row 1 as row 2
423
- // caused by week day labels row
429
+ // The week day labels row is the first row of the grid.
424
430
  ,
425
- "aria-rowindex": index + 1,
431
+ "aria-rowindex": index + 2,
426
432
  children: [displayWeekNumber && /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerCalendarWeekNumber, {
427
433
  className: classes.weekNumber,
428
434
  role: "rowheader",
435
+ "aria-colindex": 1,
429
436
  "aria-label": translations.calendarWeekNumberAriaLabelText(adapter.getWeekNumber(week[0])),
430
437
  children: translations.calendarWeekNumberText(adapter.getWeekNumber(week[0]))
431
438
  }), week.map((day, dayIndex) => /*#__PURE__*/(0, _jsxRuntime.jsx)(WrappedDay, {
@@ -439,10 +446,8 @@ function DayCalendar(inProps) {
439
446
  onBlur: handleBlur,
440
447
  onDaySelect: handleDaySelect,
441
448
  isDateDisabled: isDateDisabled,
442
- currentMonthNumber: currentMonthNumber
443
- // fix issue of announcing column 1 as column 2 when `displayWeekNumber` is enabled
444
- ,
445
- "aria-colindex": dayIndex + 1
449
+ currentMonthNumber: currentMonthNumber,
450
+ "aria-colindex": columnIndexOffset + dayIndex + 1
446
451
  }, day.toString()))]
447
452
  }, `week-${week[0]}`))
448
453
  })
@@ -255,6 +255,8 @@ export function DayCalendar(inProps) {
255
255
  const now = useNow(timezone);
256
256
  const classes = useUtilityClasses(classesProp);
257
257
  const isRtl = useRtl();
258
+ // The week number is a `rowheader`, so it takes the first column of the grid.
259
+ const columnIndexOffset = displayWeekNumber ? 1 : 0;
258
260
  const isDateDisabled = useIsDateDisabled({
259
261
  shouldDisableDate,
260
262
  shouldDisableMonth,
@@ -377,19 +379,24 @@ export function DayCalendar(inProps) {
377
379
  return /*#__PURE__*/_jsxs(PickerCalendarDayRoot, {
378
380
  role: "grid",
379
381
  "aria-labelledby": gridLabelId,
382
+ "aria-colcount": columnIndexOffset + 7,
383
+ "aria-rowcount": weeksToDisplay.length + 1,
380
384
  className: classes.root,
381
385
  children: [/*#__PURE__*/_jsxs(PickerCalendarDayHeader, {
382
386
  role: "row",
387
+ "aria-rowindex": 1,
383
388
  className: classes.header,
384
389
  children: [displayWeekNumber && /*#__PURE__*/_jsx(PickerCalendarWeekNumberLabel, {
385
390
  variant: "caption",
386
391
  role: "columnheader",
392
+ "aria-colindex": 1,
387
393
  "aria-label": translations.calendarWeekNumberHeaderLabel,
388
394
  className: classes.weekNumberLabel,
389
395
  children: translations.calendarWeekNumberHeaderText
390
396
  }), getWeekdays(adapter, now).map((weekday, i) => /*#__PURE__*/_jsx(PickerCalendarWeekDayLabel, {
391
397
  variant: "caption",
392
398
  role: "columnheader",
399
+ "aria-colindex": columnIndexOffset + i + 1,
393
400
  "aria-label": adapter.format(weekday, 'weekday'),
394
401
  className: classes.weekDayLabel,
395
402
  children: dayOfWeekFormatter(weekday)
@@ -412,13 +419,13 @@ export function DayCalendar(inProps) {
412
419
  children: weeksToDisplay.map((week, index) => /*#__PURE__*/_jsxs(PickerCalendarWeek, {
413
420
  role: "row",
414
421
  className: classes.weekContainer
415
- // fix issue of announcing row 1 as row 2
416
- // caused by week day labels row
422
+ // The week day labels row is the first row of the grid.
417
423
  ,
418
- "aria-rowindex": index + 1,
424
+ "aria-rowindex": index + 2,
419
425
  children: [displayWeekNumber && /*#__PURE__*/_jsx(PickerCalendarWeekNumber, {
420
426
  className: classes.weekNumber,
421
427
  role: "rowheader",
428
+ "aria-colindex": 1,
422
429
  "aria-label": translations.calendarWeekNumberAriaLabelText(adapter.getWeekNumber(week[0])),
423
430
  children: translations.calendarWeekNumberText(adapter.getWeekNumber(week[0]))
424
431
  }), week.map((day, dayIndex) => /*#__PURE__*/_jsx(WrappedDay, {
@@ -432,10 +439,8 @@ export function DayCalendar(inProps) {
432
439
  onBlur: handleBlur,
433
440
  onDaySelect: handleDaySelect,
434
441
  isDateDisabled: isDateDisabled,
435
- currentMonthNumber: currentMonthNumber
436
- // fix issue of announcing column 1 as column 2 when `displayWeekNumber` is enabled
437
- ,
438
- "aria-colindex": dayIndex + 1
442
+ currentMonthNumber: currentMonthNumber,
443
+ "aria-colindex": columnIndexOffset + dayIndex + 1
439
444
  }, day.toString()))]
440
445
  }, `week-${week[0]}`))
441
446
  })
@@ -115,7 +115,9 @@ function PickersSlideTransition(inProps) {
115
115
  const classes = useUtilityClasses(classesProp, ownerState);
116
116
  const theme = (0, _styles.useTheme)();
117
117
  if (reduceAnimations) {
118
+ // `role="none"` keeps the day rows owned by the calendar grid.
118
119
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
120
+ role: "none",
119
121
  className: (0, _clsx.default)(classes.root, className),
120
122
  children: children
121
123
  });
@@ -107,7 +107,9 @@ export function PickersSlideTransition(inProps) {
107
107
  const classes = useUtilityClasses(classesProp, ownerState);
108
108
  const theme = useTheme();
109
109
  if (reduceAnimations) {
110
+ // `role="none"` keeps the day rows owned by the calendar grid.
110
111
  return /*#__PURE__*/_jsx("div", {
112
+ role: "none",
111
113
  className: clsx(classes.root, className),
112
114
  children: children
113
115
  });
@@ -91,6 +91,16 @@ const PickerDayRoot = (0, _styles.styled)(_ButtonBase.default, {
91
91
  }
92
92
  }
93
93
  }, {
94
+ props: {
95
+ isDayOutsideMonth: true
96
+ },
97
+ style: {
98
+ color: (theme.vars || theme).palette.text.secondary
99
+ }
100
+ },
101
+ // Must come after `isDayOutsideMonth` so that a disabled day outside the current month
102
+ // uses the disabled text color.
103
+ {
94
104
  props: {
95
105
  isDayDisabled: true
96
106
  },
@@ -107,13 +117,6 @@ const PickerDayRoot = (0, _styles.styled)(_ButtonBase.default, {
107
117
  opacity: 0,
108
118
  pointerEvents: 'none'
109
119
  }
110
- }, {
111
- props: {
112
- isDayOutsideMonth: true
113
- },
114
- style: {
115
- color: (theme.vars || theme).palette.text.secondary
116
- }
117
120
  }, {
118
121
  props: {
119
122
  isDayCurrent: true,
@@ -205,6 +208,7 @@ const PickerDayRaw = /*#__PURE__*/React.forwardRef(function PickerDay(inProps, f
205
208
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(PickerDayRoot, {
206
209
  ref: handleRef,
207
210
  role: other.role,
211
+ "aria-colindex": other['aria-colindex'],
208
212
  ownerState: ownerState,
209
213
  className: (0, _clsx.default)(classes.root, className),
210
214
  as: "div"
@@ -84,6 +84,16 @@ const PickerDayRoot = styled(ButtonBase, {
84
84
  }
85
85
  }
86
86
  }, {
87
+ props: {
88
+ isDayOutsideMonth: true
89
+ },
90
+ style: {
91
+ color: (theme.vars || theme).palette.text.secondary
92
+ }
93
+ },
94
+ // Must come after `isDayOutsideMonth` so that a disabled day outside the current month
95
+ // uses the disabled text color.
96
+ {
87
97
  props: {
88
98
  isDayDisabled: true
89
99
  },
@@ -100,13 +110,6 @@ const PickerDayRoot = styled(ButtonBase, {
100
110
  opacity: 0,
101
111
  pointerEvents: 'none'
102
112
  }
103
- }, {
104
- props: {
105
- isDayOutsideMonth: true
106
- },
107
- style: {
108
- color: (theme.vars || theme).palette.text.secondary
109
- }
110
113
  }, {
111
114
  props: {
112
115
  isDayCurrent: true,
@@ -198,6 +201,7 @@ const PickerDayRaw = /*#__PURE__*/React.forwardRef(function PickerDay(inProps, f
198
201
  return /*#__PURE__*/_jsx(PickerDayRoot, {
199
202
  ref: handleRef,
200
203
  role: other.role,
204
+ "aria-colindex": other['aria-colindex'],
201
205
  ownerState: ownerState,
202
206
  className: clsx(classes.root, className),
203
207
  as: "div"
package/README.md CHANGED
@@ -8,7 +8,7 @@ It's part of [MUI X](https://mui.com/x/), an open-core extension of our Core li
8
8
  Install the package in your project directory with:
9
9
 
10
10
  ```bash
11
- npm install @mui/x-date-pickers
11
+ npm install @mui/x-date-pickers @mui/material @emotion/react @emotion/styled
12
12
  ```
13
13
 
14
14
  Then install the date library of your choice (if not already installed).
@@ -33,16 +33,6 @@ npm install luxon
33
33
  npm install moment
34
34
  ```
35
35
 
36
- This component has the following peer dependencies that you need to install as well.
37
-
38
- ```json
39
- "peerDependencies": {
40
- "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0",
41
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
42
- "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
43
- },
44
- ```
45
-
46
36
  After completing the installation, you have to set the `dateAdapter` prop of the `LocalizationProvider` accordingly.
47
37
  The supported adapters are exported from `@mui/x-date-pickers`.
48
38
 
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v9.10.1
2
+ * @mui/x-date-pickers v9.12.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.10.1
2
+ * @mui/x-date-pickers v9.12.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -208,18 +208,32 @@ function useFieldRootProps(parameters) {
208
208
  return;
209
209
  }
210
210
  const target = event.target;
211
- // `sectionListRoot` is the sections container (a descendant of the
212
- // InputBase root that owns this handler). The guard rejects clicks on
213
- // sibling adornments (open / clear buttons, etc.) which have their own
214
- // behavior and must not get intercepted here.
215
211
  const sectionListRoot = domGetters.getRoot();
216
- if (!sectionListRoot.contains(target)) {
212
+ const isInsideSectionList = sectionListRoot.contains(target);
213
+ // Only the field root is ours outside the sections container: it is the
214
+ // target of a padding click. The adornments keep their own behavior.
215
+ if (!isInsideSectionList && target !== event.currentTarget) {
217
216
  return;
218
217
  }
218
+ const sectionElement = isInsideSectionList ? target.closest('[data-sectionindex]') : null;
219
+
220
+ // Blank space is the field padding and the area past the sections. Mimic
221
+ // the native date input: first section on entry, keep it afterwards.
222
+ // `preventDefault` is what keeps it, by stopping both the browser blur and
223
+ // Chromium's focus delegation.
224
+ const isBlankSpaceClick = sectionElement == null && (!isInsideSectionList || isPointOutsideSections(sectionListRoot, event.clientX));
225
+ if (isBlankSpaceClick) {
226
+ event.preventDefault();
227
+ if (!focused) {
228
+ setFocused(true);
229
+ setSelectedSections(sectionOrder.startIndex);
230
+ }
231
+ return;
232
+ }
233
+
219
234
  // Prefer the visually-containing section (matches Chromium's
220
235
  // delegation + section container `onClick`), fall back to the
221
- // closest-by-distance section for padding / past-last-section clicks.
222
- const sectionElement = target.closest('[data-sectionindex]');
236
+ // closest-by-distance section for clicks on the container padding.
223
237
  const parsedIndex = sectionElement ? Number(sectionElement.dataset.sectionindex) : findClosestSectionIndexToPoint(sectionListRoot, event.clientX);
224
238
  // `Number(undefined) === NaN` and `NaN == null === false`, so guard
225
239
  // explicitly here even though `data-sectionindex` is set by
@@ -313,6 +327,32 @@ function useFieldRootProps(parameters) {
313
327
  };
314
328
  }
315
329
 
330
+ /**
331
+ * Slop on each side of the sections, so a click that just misses the outermost
332
+ * one still selects it. Under half a digit at the default font size.
333
+ */
334
+ const BLANK_SPACE_TOLERANCE = 4;
335
+
336
+ /**
337
+ * Returns `true` when `clientX` sits past the sections on either side.
338
+ * Horizontal only: a click in the container's vertical padding still belongs to
339
+ * the section above or below it.
340
+ */
341
+ function isPointOutsideSections(root, clientX) {
342
+ const sections = root.querySelectorAll('[data-sectionindex]');
343
+ if (sections.length === 0) {
344
+ return false;
345
+ }
346
+ let left = Infinity;
347
+ let right = -Infinity;
348
+ for (let i = 0; i < sections.length; i += 1) {
349
+ const rect = sections[i].getBoundingClientRect();
350
+ left = Math.min(left, rect.left);
351
+ right = Math.max(right, rect.right);
352
+ }
353
+ return clientX < left - BLANK_SPACE_TOLERANCE || clientX > right + BLANK_SPACE_TOLERANCE;
354
+ }
355
+
316
356
  /**
317
357
  * Returns the index of the section whose horizontal center is closest to `clientX`.
318
358
  * Returns `null` if the field renders no `[role="spinbutton"]` descendants
@@ -202,18 +202,32 @@ export function useFieldRootProps(parameters) {
202
202
  return;
203
203
  }
204
204
  const target = event.target;
205
- // `sectionListRoot` is the sections container (a descendant of the
206
- // InputBase root that owns this handler). The guard rejects clicks on
207
- // sibling adornments (open / clear buttons, etc.) which have their own
208
- // behavior and must not get intercepted here.
209
205
  const sectionListRoot = domGetters.getRoot();
210
- if (!sectionListRoot.contains(target)) {
206
+ const isInsideSectionList = sectionListRoot.contains(target);
207
+ // Only the field root is ours outside the sections container: it is the
208
+ // target of a padding click. The adornments keep their own behavior.
209
+ if (!isInsideSectionList && target !== event.currentTarget) {
211
210
  return;
212
211
  }
212
+ const sectionElement = isInsideSectionList ? target.closest('[data-sectionindex]') : null;
213
+
214
+ // Blank space is the field padding and the area past the sections. Mimic
215
+ // the native date input: first section on entry, keep it afterwards.
216
+ // `preventDefault` is what keeps it, by stopping both the browser blur and
217
+ // Chromium's focus delegation.
218
+ const isBlankSpaceClick = sectionElement == null && (!isInsideSectionList || isPointOutsideSections(sectionListRoot, event.clientX));
219
+ if (isBlankSpaceClick) {
220
+ event.preventDefault();
221
+ if (!focused) {
222
+ setFocused(true);
223
+ setSelectedSections(sectionOrder.startIndex);
224
+ }
225
+ return;
226
+ }
227
+
213
228
  // Prefer the visually-containing section (matches Chromium's
214
229
  // delegation + section container `onClick`), fall back to the
215
- // closest-by-distance section for padding / past-last-section clicks.
216
- const sectionElement = target.closest('[data-sectionindex]');
230
+ // closest-by-distance section for clicks on the container padding.
217
231
  const parsedIndex = sectionElement ? Number(sectionElement.dataset.sectionindex) : findClosestSectionIndexToPoint(sectionListRoot, event.clientX);
218
232
  // `Number(undefined) === NaN` and `NaN == null === false`, so guard
219
233
  // explicitly here even though `data-sectionindex` is set by
@@ -307,6 +321,32 @@ export function useFieldRootProps(parameters) {
307
321
  };
308
322
  }
309
323
 
324
+ /**
325
+ * Slop on each side of the sections, so a click that just misses the outermost
326
+ * one still selects it. Under half a digit at the default font size.
327
+ */
328
+ const BLANK_SPACE_TOLERANCE = 4;
329
+
330
+ /**
331
+ * Returns `true` when `clientX` sits past the sections on either side.
332
+ * Horizontal only: a click in the container's vertical padding still belongs to
333
+ * the section above or below it.
334
+ */
335
+ function isPointOutsideSections(root, clientX) {
336
+ const sections = root.querySelectorAll('[data-sectionindex]');
337
+ if (sections.length === 0) {
338
+ return false;
339
+ }
340
+ let left = Infinity;
341
+ let right = -Infinity;
342
+ for (let i = 0; i < sections.length; i += 1) {
343
+ const rect = sections[i].getBoundingClientRect();
344
+ left = Math.min(left, rect.left);
345
+ right = Math.max(right, rect.right);
346
+ }
347
+ return clientX < left - BLANK_SPACE_TOLERANCE || clientX > right + BLANK_SPACE_TOLERANCE;
348
+ }
349
+
310
350
  /**
311
351
  * Returns the index of the section whose horizontal center is closest to `clientX`.
312
352
  * Returns `null` if the field renders no `[role="spinbutton"]` descendants
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Returns the private context passed by the Picker wrapping the current component.
3
3
  */
4
- export declare const usePickerPrivateContext: () => import("../components/PickerProvider.mjs").PickerPrivateContextValue;
4
+ export declare const usePickerPrivateContext: () => import("../index.mjs").PickerPrivateContextValue;
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Returns the private context passed by the Picker wrapping the current component.
3
3
  */
4
- export declare const usePickerPrivateContext: () => import("../components/PickerProvider.js").PickerPrivateContextValue;
4
+ export declare const usePickerPrivateContext: () => import("../index.js").PickerPrivateContextValue;
@@ -2,8 +2,8 @@ export { PickersArrowSwitcher } from "./components/PickersArrowSwitcher/PickersA
2
2
  export type { ExportedPickersArrowSwitcherProps, PickersArrowSwitcherSlots, PickersArrowSwitcherSlotProps } from "./components/PickersArrowSwitcher/index.mjs";
3
3
  export { PickerFieldUI, PickerFieldUIContextProvider, cleanFieldResponse, useFieldTextFieldProps, PickerFieldUIContext, mergeSlotProps } from "./components/PickerFieldUI.mjs";
4
4
  export type { ExportedPickerFieldUIProps, PickerFieldUISlots, PickerFieldUISlotProps, PickerFieldUISlotsFromContext, PickerFieldUISlotPropsFromContext } from "./components/PickerFieldUI.mjs";
5
- export { PickerProvider } from "./components/PickerProvider.mjs";
6
- export type { PickerContextValue } from "./components/PickerProvider.mjs";
5
+ export { PickerProvider, PickerPrivateContext } from "./components/PickerProvider.mjs";
6
+ export type { PickerContextValue, PickerPrivateContextValue } from "./components/PickerProvider.mjs";
7
7
  export { PickersModalDialog } from "./components/PickersModalDialog.mjs";
8
8
  export type { PickersModalDialogSlots, PickersModalDialogSlotProps } from "./components/PickersModalDialog.mjs";
9
9
  export { PickerPopper } from "./components/PickerPopper/PickerPopper.mjs";
@@ -2,8 +2,8 @@ export { PickersArrowSwitcher } from "./components/PickersArrowSwitcher/PickersA
2
2
  export type { ExportedPickersArrowSwitcherProps, PickersArrowSwitcherSlots, PickersArrowSwitcherSlotProps } from "./components/PickersArrowSwitcher/index.js";
3
3
  export { PickerFieldUI, PickerFieldUIContextProvider, cleanFieldResponse, useFieldTextFieldProps, PickerFieldUIContext, mergeSlotProps } from "./components/PickerFieldUI.js";
4
4
  export type { ExportedPickerFieldUIProps, PickerFieldUISlots, PickerFieldUISlotProps, PickerFieldUISlotsFromContext, PickerFieldUISlotPropsFromContext } from "./components/PickerFieldUI.js";
5
- export { PickerProvider } from "./components/PickerProvider.js";
6
- export type { PickerContextValue } from "./components/PickerProvider.js";
5
+ export { PickerProvider, PickerPrivateContext } from "./components/PickerProvider.js";
6
+ export type { PickerContextValue, PickerPrivateContextValue } from "./components/PickerProvider.js";
7
7
  export { PickersModalDialog } from "./components/PickersModalDialog.js";
8
8
  export type { PickersModalDialogSlots, PickersModalDialogSlotProps } from "./components/PickersModalDialog.js";
9
9
  export { PickerPopper } from "./components/PickerPopper/PickerPopper.js";
@@ -75,6 +75,12 @@ Object.defineProperty(exports, "PickerPopper", {
75
75
  return _PickerPopper.PickerPopper;
76
76
  }
77
77
  });
78
+ Object.defineProperty(exports, "PickerPrivateContext", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _PickerProvider.PickerPrivateContext;
82
+ }
83
+ });
78
84
  Object.defineProperty(exports, "PickerProvider", {
79
85
  enumerable: true,
80
86
  get: function () {
@@ -1,6 +1,6 @@
1
1
  export { PickersArrowSwitcher } from "./components/PickersArrowSwitcher/PickersArrowSwitcher.mjs";
2
2
  export { PickerFieldUI, PickerFieldUIContextProvider, cleanFieldResponse, useFieldTextFieldProps, PickerFieldUIContext, mergeSlotProps } from "./components/PickerFieldUI.mjs";
3
- export { PickerProvider } from "./components/PickerProvider.mjs";
3
+ export { PickerProvider, PickerPrivateContext } from "./components/PickerProvider.mjs";
4
4
  export { PickersModalDialog } from "./components/PickersModalDialog.mjs";
5
5
  export { PickerPopper } from "./components/PickerPopper/PickerPopper.mjs";
6
6
  export { pickerPopperClasses } from "./components/PickerPopper/pickerPopperClasses.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-date-pickers",
3
- "version": "9.10.1",
3
+ "version": "9.12.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",
@@ -34,12 +34,12 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@babel/runtime": "^7.29.7",
37
- "@mui/utils": "^9.2.0",
37
+ "@mui/utils": "^9.3.0",
38
38
  "@types/react-transition-group": "^4.4.12",
39
39
  "clsx": "^2.1.1",
40
40
  "prop-types": "^15.8.1",
41
41
  "react-transition-group": "^4.4.5",
42
- "@mui/x-internals": "^9.10.1"
42
+ "@mui/x-internals": "^9.12.0"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@emotion/react": "^11.9.0",