@mui/x-date-pickers 8.8.0 → 8.9.2

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 (66) hide show
  1. package/AdapterDayjs/AdapterDayjs.d.ts +28 -31
  2. package/AdapterDayjs/AdapterDayjs.js +25 -31
  3. package/CHANGELOG.md +225 -24
  4. package/DateCalendar/DateCalendar.js +2 -2
  5. package/DatePicker/DatePicker.js +1 -1
  6. package/DateTimePicker/DateTimePicker.js +3 -3
  7. package/DesktopDatePicker/DesktopDatePicker.js +1 -1
  8. package/DesktopDateTimePicker/DesktopDateTimePicker.js +3 -3
  9. package/DesktopTimePicker/DesktopTimePicker.js +3 -3
  10. package/DigitalClock/DigitalClock.js +2 -2
  11. package/MobileDatePicker/MobileDatePicker.js +1 -1
  12. package/MobileDateTimePicker/MobileDateTimePicker.js +3 -3
  13. package/MobileTimePicker/MobileTimePicker.js +1 -1
  14. package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +3 -3
  15. package/PickerDay2/PickerDay2.js +1 -0
  16. package/PickersDay/PickersDay.js +1 -0
  17. package/PickersLayout/PickersLayout.js +1 -1
  18. package/StaticDatePicker/StaticDatePicker.js +1 -1
  19. package/StaticDateTimePicker/StaticDateTimePicker.js +3 -3
  20. package/StaticTimePicker/StaticTimePicker.js +1 -1
  21. package/TimeClock/TimeClock.js +2 -2
  22. package/TimePicker/TimePicker.js +3 -3
  23. package/esm/AdapterDayjs/AdapterDayjs.d.ts +28 -31
  24. package/esm/AdapterDayjs/AdapterDayjs.js +37 -43
  25. package/esm/DateCalendar/DateCalendar.js +2 -2
  26. package/esm/DatePicker/DatePicker.js +1 -1
  27. package/esm/DateTimePicker/DateTimePicker.js +3 -3
  28. package/esm/DesktopDatePicker/DesktopDatePicker.js +1 -1
  29. package/esm/DesktopDateTimePicker/DesktopDateTimePicker.js +3 -3
  30. package/esm/DesktopTimePicker/DesktopTimePicker.js +3 -3
  31. package/esm/DigitalClock/DigitalClock.js +2 -2
  32. package/esm/MobileDatePicker/MobileDatePicker.js +1 -1
  33. package/esm/MobileDateTimePicker/MobileDateTimePicker.js +3 -3
  34. package/esm/MobileTimePicker/MobileTimePicker.js +1 -1
  35. package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.js +3 -3
  36. package/esm/PickerDay2/PickerDay2.js +1 -0
  37. package/esm/PickersDay/PickersDay.js +1 -0
  38. package/esm/PickersLayout/PickersLayout.js +1 -1
  39. package/esm/StaticDatePicker/StaticDatePicker.js +1 -1
  40. package/esm/StaticDateTimePicker/StaticDateTimePicker.js +3 -3
  41. package/esm/StaticTimePicker/StaticTimePicker.js +1 -1
  42. package/esm/TimeClock/TimeClock.js +2 -2
  43. package/esm/TimePicker/TimePicker.js +3 -3
  44. package/esm/index.js +1 -1
  45. package/esm/internals/components/PickerPopper/PickerPopper.js +12 -9
  46. package/esm/internals/hooks/useField/syncSelectionToDOM.js +3 -2
  47. package/esm/internals/hooks/useField/useFieldRootProps.js +2 -2
  48. package/esm/internals/hooks/useField/useFieldV6TextField.js +7 -7
  49. package/esm/internals/hooks/useField/useFieldV7TextField.js +2 -2
  50. package/esm/internals/hooks/useViews.d.ts +2 -2
  51. package/esm/internals/models/props/time.d.ts +3 -3
  52. package/esm/internals/utils/utils.d.ts +7 -1
  53. package/esm/internals/utils/utils.js +14 -3
  54. package/esm/locales/koKR.js +3 -5
  55. package/index.js +1 -1
  56. package/internals/components/PickerPopper/PickerPopper.js +12 -9
  57. package/internals/hooks/useField/syncSelectionToDOM.js +4 -2
  58. package/internals/hooks/useField/useFieldRootProps.js +2 -2
  59. package/internals/hooks/useField/useFieldV6TextField.js +7 -7
  60. package/internals/hooks/useField/useFieldV7TextField.js +2 -2
  61. package/internals/hooks/useViews.d.ts +2 -2
  62. package/internals/models/props/time.d.ts +3 -3
  63. package/internals/utils/utils.d.ts +7 -1
  64. package/internals/utils/utils.js +15 -3
  65. package/locales/koKR.js +3 -5
  66. package/package.json +4 -5
@@ -1,6 +1,5 @@
1
- import defaultDayjs, { Dayjs } from 'dayjs';
1
+ import dayjs, { Dayjs } from 'dayjs';
2
2
  import { FieldFormatTokenMap, MuiPickersAdapter, AdapterFormats, AdapterOptions, PickersTimezone, DateBuilderReturnType } from "../models/index.js";
3
- type Constructor = (...args: Parameters<typeof defaultDayjs>) => Dayjs;
4
3
  declare module '@mui/x-date-pickers/models' {
5
4
  interface PickerValidDateLookup {
6
5
  dayjs: Dayjs;
@@ -35,7 +34,6 @@ export declare class AdapterDayjs implements MuiPickersAdapter<string> {
35
34
  isMUIAdapter: boolean;
36
35
  isTimezoneCompatible: boolean;
37
36
  lib: string;
38
- dayjs: Constructor;
39
37
  locale?: string;
40
38
  formats: AdapterFormats;
41
39
  escapedCharacters: {
@@ -67,11 +65,11 @@ export declare class AdapterDayjs implements MuiPickersAdapter<string> {
67
65
  */
68
66
  private adjustOffset;
69
67
  date: <T extends string | null | undefined>(value?: T, timezone?: PickersTimezone) => DateBuilderReturnType<T>;
70
- getInvalidDate: () => defaultDayjs.Dayjs;
68
+ getInvalidDate: () => dayjs.Dayjs;
71
69
  getTimezone: (value: Dayjs) => string;
72
70
  setTimezone: (value: Dayjs, timezone: PickersTimezone) => Dayjs;
73
71
  toJsDate: (value: Dayjs) => Date;
74
- parse: (value: string, format: string) => defaultDayjs.Dayjs | null;
72
+ parse: (value: string, format: string) => dayjs.Dayjs | null;
75
73
  getCurrentLocaleCode: () => string;
76
74
  is12HourCycleInCurrentLocale: () => boolean;
77
75
  expandFormat: (format: string) => string;
@@ -91,21 +89,21 @@ export declare class AdapterDayjs implements MuiPickersAdapter<string> {
91
89
  isBeforeYear: (value: Dayjs, comparing: Dayjs) => boolean;
92
90
  isBeforeDay: (value: Dayjs, comparing: Dayjs) => boolean;
93
91
  isWithinRange: (value: Dayjs, [start, end]: [Dayjs, Dayjs]) => boolean;
94
- startOfYear: (value: Dayjs) => defaultDayjs.Dayjs;
95
- startOfMonth: (value: Dayjs) => defaultDayjs.Dayjs;
96
- startOfWeek: (value: Dayjs) => defaultDayjs.Dayjs;
97
- startOfDay: (value: Dayjs) => defaultDayjs.Dayjs;
98
- endOfYear: (value: Dayjs) => defaultDayjs.Dayjs;
99
- endOfMonth: (value: Dayjs) => defaultDayjs.Dayjs;
100
- endOfWeek: (value: Dayjs) => defaultDayjs.Dayjs;
101
- endOfDay: (value: Dayjs) => defaultDayjs.Dayjs;
102
- addYears: (value: Dayjs, amount: number) => defaultDayjs.Dayjs;
103
- addMonths: (value: Dayjs, amount: number) => defaultDayjs.Dayjs;
104
- addWeeks: (value: Dayjs, amount: number) => defaultDayjs.Dayjs;
105
- addDays: (value: Dayjs, amount: number) => defaultDayjs.Dayjs;
106
- addHours: (value: Dayjs, amount: number) => defaultDayjs.Dayjs;
107
- addMinutes: (value: Dayjs, amount: number) => defaultDayjs.Dayjs;
108
- addSeconds: (value: Dayjs, amount: number) => defaultDayjs.Dayjs;
92
+ startOfYear: (value: Dayjs) => dayjs.Dayjs;
93
+ startOfMonth: (value: Dayjs) => dayjs.Dayjs;
94
+ startOfWeek: (value: Dayjs) => dayjs.Dayjs;
95
+ startOfDay: (value: Dayjs) => dayjs.Dayjs;
96
+ endOfYear: (value: Dayjs) => dayjs.Dayjs;
97
+ endOfMonth: (value: Dayjs) => dayjs.Dayjs;
98
+ endOfWeek: (value: Dayjs) => dayjs.Dayjs;
99
+ endOfDay: (value: Dayjs) => dayjs.Dayjs;
100
+ addYears: (value: Dayjs, amount: number) => dayjs.Dayjs;
101
+ addMonths: (value: Dayjs, amount: number) => dayjs.Dayjs;
102
+ addWeeks: (value: Dayjs, amount: number) => dayjs.Dayjs;
103
+ addDays: (value: Dayjs, amount: number) => dayjs.Dayjs;
104
+ addHours: (value: Dayjs, amount: number) => dayjs.Dayjs;
105
+ addMinutes: (value: Dayjs, amount: number) => dayjs.Dayjs;
106
+ addSeconds: (value: Dayjs, amount: number) => dayjs.Dayjs;
109
107
  getYear: (value: Dayjs) => number;
110
108
  getMonth: (value: Dayjs) => number;
111
109
  getDate: (value: Dayjs) => number;
@@ -113,17 +111,16 @@ export declare class AdapterDayjs implements MuiPickersAdapter<string> {
113
111
  getMinutes: (value: Dayjs) => number;
114
112
  getSeconds: (value: Dayjs) => number;
115
113
  getMilliseconds: (value: Dayjs) => number;
116
- setYear: (value: Dayjs, year: number) => defaultDayjs.Dayjs;
117
- setMonth: (value: Dayjs, month: number) => defaultDayjs.Dayjs;
118
- setDate: (value: Dayjs, date: number) => defaultDayjs.Dayjs;
119
- setHours: (value: Dayjs, hours: number) => defaultDayjs.Dayjs;
120
- setMinutes: (value: Dayjs, minutes: number) => defaultDayjs.Dayjs;
121
- setSeconds: (value: Dayjs, seconds: number) => defaultDayjs.Dayjs;
122
- setMilliseconds: (value: Dayjs, milliseconds: number) => defaultDayjs.Dayjs;
114
+ setYear: (value: Dayjs, year: number) => dayjs.Dayjs;
115
+ setMonth: (value: Dayjs, month: number) => dayjs.Dayjs;
116
+ setDate: (value: Dayjs, date: number) => dayjs.Dayjs;
117
+ setHours: (value: Dayjs, hours: number) => dayjs.Dayjs;
118
+ setMinutes: (value: Dayjs, minutes: number) => dayjs.Dayjs;
119
+ setSeconds: (value: Dayjs, seconds: number) => dayjs.Dayjs;
120
+ setMilliseconds: (value: Dayjs, milliseconds: number) => dayjs.Dayjs;
123
121
  getDaysInMonth: (value: Dayjs) => number;
124
- getWeekArray: (value: Dayjs) => defaultDayjs.Dayjs[][];
122
+ getWeekArray: (value: Dayjs) => dayjs.Dayjs[][];
125
123
  getWeekNumber: (value: Dayjs) => number;
126
124
  getDayOfWeek(value: Dayjs): number;
127
- getYearRange: ([start, end]: [Dayjs, Dayjs]) => defaultDayjs.Dayjs[];
128
- }
129
- export {};
125
+ getYearRange: ([start, end]: [Dayjs, Dayjs]) => dayjs.Dayjs[];
126
+ }
@@ -135,7 +135,6 @@ const defaultFormats = {
135
135
  };
136
136
  const MISSING_UTC_PLUGIN = ['Missing UTC plugin', 'To be able to use UTC or timezones, you have to enable the `utc` plugin', 'Find more information on https://mui.com/x/react-date-pickers/timezone/#day-js-and-utc'].join('\n');
137
137
  const MISSING_TIMEZONE_PLUGIN = ['Missing timezone plugin', 'To be able to use timezones, you have to enable both the `utc` and the `timezone` plugin', 'Find more information on https://mui.com/x/react-date-pickers/timezone/#day-js-and-timezone'].join('\n');
138
- const withLocale = (dayjs, locale) => !locale ? dayjs : (...args) => dayjs(...args).locale(locale);
139
138
  /**
140
139
  * Based on `@date-io/dayjs`
141
140
  *
@@ -169,7 +168,6 @@ class AdapterDayjs {
169
168
  this.isMUIAdapter = true;
170
169
  this.isTimezoneCompatible = true;
171
170
  this.lib = 'dayjs';
172
- this.dayjs = void 0;
173
171
  this.locale = void 0;
174
172
  this.formats = void 0;
175
173
  this.escapedCharacters = {
@@ -210,24 +208,26 @@ class AdapterDayjs {
210
208
  }
211
209
  };
212
210
  this.createSystemDate = value => {
211
+ let date;
213
212
  if (this.hasUTCPlugin() && this.hasTimezonePlugin()) {
214
213
  const timezone = _dayjs.default.tz.guess();
215
-
216
- // We can't change the system timezone in the tests
217
- /* v8 ignore next 3 */
218
- if (timezone !== 'UTC') {
219
- return _dayjs.default.tz(value, timezone);
214
+ if (timezone === 'UTC') {
215
+ date = (0, _dayjs.default)(value);
216
+ } /* v8 ignore next 3 */else {
217
+ // We can't change the system timezone in the tests
218
+ date = _dayjs.default.tz(value, timezone);
220
219
  }
221
- return (0, _dayjs.default)(value);
220
+ } else {
221
+ date = (0, _dayjs.default)(value);
222
222
  }
223
- return (0, _dayjs.default)(value);
223
+ return this.setLocaleToValue(date);
224
224
  };
225
225
  this.createUTCDate = value => {
226
226
  /* v8 ignore next 3 */
227
227
  if (!this.hasUTCPlugin()) {
228
228
  throw new Error(MISSING_UTC_PLUGIN);
229
229
  }
230
- return _dayjs.default.utc(value);
230
+ return this.setLocaleToValue(_dayjs.default.utc(value));
231
231
  };
232
232
  this.createTZDate = (value, timezone) => {
233
233
  /* v8 ignore next 3 */
@@ -240,7 +240,7 @@ class AdapterDayjs {
240
240
  throw new Error(MISSING_TIMEZONE_PLUGIN);
241
241
  }
242
242
  const keepLocalTime = value !== undefined && !value.endsWith('Z');
243
- return (0, _dayjs.default)(value).tz(this.cleanTimezone(timezone), keepLocalTime);
243
+ return this.setLocaleToValue((0, _dayjs.default)(value).tz(this.cleanTimezone(timezone), keepLocalTime));
244
244
  };
245
245
  this.getLocaleFormats = () => {
246
246
  const locales = _dayjs.default.Ls;
@@ -287,18 +287,13 @@ class AdapterDayjs {
287
287
  if (value === null) {
288
288
  return null;
289
289
  }
290
- let parsedValue;
291
290
  if (timezone === 'UTC') {
292
- parsedValue = this.createUTCDate(value);
293
- } else if (timezone === 'system' || timezone === 'default' && !this.hasTimezonePlugin()) {
294
- parsedValue = this.createSystemDate(value);
295
- } else {
296
- parsedValue = this.createTZDate(value, timezone);
291
+ return this.createUTCDate(value);
297
292
  }
298
- if (this.locale === undefined) {
299
- return parsedValue;
293
+ if (timezone === 'system' || timezone === 'default' && !this.hasTimezonePlugin()) {
294
+ return this.createSystemDate(value);
300
295
  }
301
- return parsedValue.locale(this.locale);
296
+ return this.createTZDate(value, timezone);
302
297
  };
303
298
  this.getInvalidDate = () => (0, _dayjs.default)(new Date('Invalid date'));
304
299
  this.getTimezone = value => {
@@ -340,7 +335,7 @@ class AdapterDayjs {
340
335
  /* v8 ignore next */
341
336
  throw new Error(MISSING_TIMEZONE_PLUGIN);
342
337
  }
343
- return _dayjs.default.tz(value, this.cleanTimezone(timezone));
338
+ return this.setLocaleToValue(_dayjs.default.tz(value, this.cleanTimezone(timezone)));
344
339
  };
345
340
  this.toJsDate = value => {
346
341
  return value.toDate();
@@ -349,7 +344,7 @@ class AdapterDayjs {
349
344
  if (value === '') {
350
345
  return null;
351
346
  }
352
- return this.dayjs(value, format, this.locale, true);
347
+ return (0, _dayjs.default)(value, format, this.locale, true);
353
348
  };
354
349
  this.getCurrentLocaleCode = () => {
355
350
  return this.locale || 'en';
@@ -378,7 +373,7 @@ class AdapterDayjs {
378
373
  return this.formatByString(value, this.formats[formatKey]);
379
374
  };
380
375
  this.formatByString = (value, formatString) => {
381
- return this.dayjs(value).format(formatString);
376
+ return this.setLocaleToValue(value).format(formatString);
382
377
  };
383
378
  this.formatNumber = numberToFormat => {
384
379
  return numberToFormat;
@@ -462,25 +457,25 @@ class AdapterDayjs {
462
457
  return this.adjustOffset(value.endOf('day'));
463
458
  };
464
459
  this.addYears = (value, amount) => {
465
- return this.adjustOffset(amount < 0 ? value.subtract(Math.abs(amount), 'year') : value.add(amount, 'year'));
460
+ return this.adjustOffset(value.add(amount, 'year'));
466
461
  };
467
462
  this.addMonths = (value, amount) => {
468
- return this.adjustOffset(amount < 0 ? value.subtract(Math.abs(amount), 'month') : value.add(amount, 'month'));
463
+ return this.adjustOffset(value.add(amount, 'month'));
469
464
  };
470
465
  this.addWeeks = (value, amount) => {
471
- return this.adjustOffset(amount < 0 ? value.subtract(Math.abs(amount), 'week') : value.add(amount, 'week'));
466
+ return this.adjustOffset(value.add(amount, 'week'));
472
467
  };
473
468
  this.addDays = (value, amount) => {
474
- return this.adjustOffset(amount < 0 ? value.subtract(Math.abs(amount), 'day') : value.add(amount, 'day'));
469
+ return this.adjustOffset(value.add(amount, 'day'));
475
470
  };
476
471
  this.addHours = (value, amount) => {
477
- return this.adjustOffset(amount < 0 ? value.subtract(Math.abs(amount), 'hour') : value.add(amount, 'hour'));
472
+ return this.adjustOffset(value.add(amount, 'hour'));
478
473
  };
479
474
  this.addMinutes = (value, amount) => {
480
- return this.adjustOffset(amount < 0 ? value.subtract(Math.abs(amount), 'minute') : value.add(amount, 'minute'));
475
+ return this.adjustOffset(value.add(amount, 'minute'));
481
476
  };
482
477
  this.addSeconds = (value, amount) => {
483
- return this.adjustOffset(amount < 0 ? value.subtract(Math.abs(amount), 'second') : value.add(amount, 'second'));
478
+ return this.adjustOffset(value.add(amount, 'second'));
484
479
  };
485
480
  this.getYear = value => {
486
481
  return value.year();
@@ -556,7 +551,6 @@ class AdapterDayjs {
556
551
  }
557
552
  return years;
558
553
  };
559
- this.dayjs = withLocale(_dayjs.default, _locale);
560
554
  this.locale = _locale;
561
555
  this.formats = (0, _extends2.default)({}, defaultFormats, formats);
562
556
 
package/CHANGELOG.md CHANGED
@@ -5,6 +5,225 @@
5
5
  All notable changes to this project will be documented in this file.
6
6
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
7
7
 
8
+ ## 8.9.2
9
+
10
+ _Jul 31, 2025_
11
+
12
+ We'd like to extend a big thank you to the 23 contributors who made this release possible. Here are some highlights ✨:
13
+
14
+ - 🌎 Improve French (fr-FR), Hebrew (he-IL) and Polish (pl-PL) locales on the Data Grid
15
+ - 🌎 Improve Korean (ko-KR) locale on the Date and Time Pickers
16
+ - 📈 Add symlog scale to charts
17
+ - 📊 Fix bar border radius on Firefox
18
+ - 🐞 Bugfixes
19
+ - 📚 Documentation improvements
20
+
21
+ Special thanks go out to the community members for their valuable contributions:
22
+ @AmrElnaggar99, @atlanteh, @ddolcimascolo, @Jiseoup, @leonaha5, @noherczeg, @sai6855
23
+
24
+ The following are all team members who have contributed to this release:
25
+ @alexfauquette, @arminmeh, @bernardobelchior, @bharatkashyap, @brijeshb42, @cherniavskii, @flaviendelangle, @Janpot, @JCQuintas, @KenanYusuf, @LukasTy, @mapache-salvaje, @MBilalShafi, @rita-codes, @romgrk, @siriwatknp
26
+
27
+ ### Data Grid
28
+
29
+ #### `@mui/x-data-grid@8.9.2`
30
+
31
+ - [DataGrid] Add debounce for columns panel search (#18719) @noherczeg
32
+ - [DataGrid] Extract virtualization engine (#18275) @romgrk
33
+ - [DataGrid] Improve types in `<GridEditSingleSelect />` (#18184) @sai6855
34
+ - [l10n] Improve French (fr-FR) locale (#18905) @ddolcimascolo
35
+ - [l10n] Improve Hebrew (he-IL) locale (#18665) @atlanteh
36
+ - [l10n] Improve Polish (pl-PL) locale (#18068) @leonaha5
37
+
38
+ #### `@mui/x-data-grid-pro@8.9.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
39
+
40
+ Same changes as in `@mui/x-data-grid@8.9.2`, plus:
41
+
42
+ - [DataGridPro] Fix duplicate nested rows for dynamically updated row IDs (#18526) @MBilalShafi
43
+
44
+ #### `@mui/x-data-grid-premium@8.9.2` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
45
+
46
+ Same changes as in `@mui/x-data-grid-pro@8.9.2`, plus:
47
+
48
+ - [DataGridPremium] Add `privateMode` to AI assistant prompt resolver (#18759) @bharatkashyap
49
+ - [DataGridPremium] Fix empty nested group values caused by main criterial `valueFormatter()` (#18916) @cherniavskii
50
+ - [DataGridPremium] Sidebar content and state is managed the same way as for preference panel (#18741) @arminmeh
51
+ - [DataGridPremium] Make `api` param for the aggregation function optional (#18984) @arminmeh
52
+
53
+ ### Date and Time Pickers
54
+
55
+ #### `@mui/x-date-pickers@8.9.2`
56
+
57
+ - [l10n] Improve Korean (ko-KR) locale (#18664) @Jiseoup
58
+ - [pickers] Fix popper click-away behavior (#18804) @LukasTy
59
+ - [pickers] Fix usage not in main document (#18944) @LukasTy
60
+
61
+ #### `@mui/x-date-pickers-pro@8.9.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
62
+
63
+ Same changes as in `@mui/x-date-pickers@8.9.2`.
64
+
65
+ ### Charts
66
+
67
+ #### `@mui/x-charts@8.9.2`
68
+
69
+ - [charts] Add symlog scale to charts (#18729) @bernardobelchior
70
+ - [charts] Fix bar border radius on Firefox (#18824) @bernardobelchior
71
+ - [charts] Fix crash when rendering large scatter dataset (#18845) @bernardobelchior
72
+ - [charts] Remove unnecessary type assertion in tooltip `valueFormatter()` (#18877) @sai6855
73
+ - [charts] Export `ChartsWrapper` from `'./ChartsWrapper'` rather than `'./internals'` (#18966) @JCQuintas
74
+
75
+ #### `@mui/x-charts-pro@8.9.2` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
76
+
77
+ Same changes as in `@mui/x-charts@8.9.2`, plus:
78
+
79
+ - [charts-pro] Fix voronoi interaction with zoom (#18950) @alexfauquette
80
+ - [charts-pro] Hide toolbar by default when exporting (#18764) @bernardobelchior
81
+
82
+ ### Codemod
83
+
84
+ #### `@mui/x-codemod@8.9.2`
85
+
86
+ Internal changes.
87
+
88
+ ### Docs
89
+
90
+ - [docs] Add Data Grid demo pages (#18180) @KenanYusuf
91
+ - [docs] Copyedit the Charts Overview page (#18840) @mapache-salvaje
92
+ - [docs] Fix incorrect parameter name in pickers "Custom components" page from `variant` to `pickerVariant` (#18919) @AmrElnaggar99
93
+
94
+ ### Miscellaneous
95
+
96
+ - [code-infra] Auto-generate deep exports to prevent asymmetric exports (#18917) @JCQuintas
97
+ - [docs-infra] Turn on "Edit in Chat" for X docs (#18869) @siriwatknp
98
+ - [infra] Add specific bundle size tracking (#18884) @Janpot
99
+ - [infra] Fix markdown formatting in llms generation (#18914) @Janpot
100
+ - [infra] Use CI action from mui-public (#18709) @brijeshb42
101
+
102
+ ## 8.9.1
103
+
104
+ _Jul 21, 2025_
105
+
106
+ We'd like to extend a big thank you to the 2 contributors who made this release possible. Here are some highlights ✨:
107
+
108
+ 🐞 Fix package publish issue
109
+
110
+ The following are all team members who have contributed to this release:
111
+ @KenanYusuf, @MBilalShafi
112
+
113
+ ### Data Grid
114
+
115
+ #### `@mui/x-data-grid@8.9.1`
116
+
117
+ - [DataGrid] Move conditional list view column logic into `gridVisibleColumnDefinitionsSelector` (#18724) @KenanYusuf
118
+ - [DataGrid] Fix row selection "exclude" model inconsistency (#18844) @MBilalShafi
119
+
120
+ #### `@mui/x-data-grid-pro@8.9.1` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
121
+
122
+ Same changes as in `@mui/x-data-grid@8.9.1`.
123
+
124
+ #### `@mui/x-data-grid-premium@8.9.1` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
125
+
126
+ Same changes as in `@mui/x-data-grid-pro@8.9.1`.
127
+
128
+ ### Core
129
+
130
+ - [core] Follow yml syntax convention @oliviertassinari
131
+
132
+ ## 8.9.0
133
+
134
+ _Jul 17, 2025_
135
+
136
+ We'd like to extend a big thank you to the 10 contributors who made this release possible. Here are some highlights ✨:
137
+
138
+ - ✨ Improve the drag and drop interaction for Data Grid [row reordering](https://mui.com/x/react-data-grid/row-ordering/) feature. It uses a drop indicator to point to the position the row would be moving to.
139
+
140
+ https://github.com/user-attachments/assets/37284c4f-e8d4-4fc6-a6af-a780592905ef
141
+
142
+ - 🚀 Improve Data Grid Pivoting and Aggregation performance
143
+
144
+ - 📊 Add `minBarSize` to set a minimum height for bars
145
+
146
+ Special thanks go out to the community members for their valuable contributions:
147
+ @lauri865
148
+
149
+ The following are all team members who have contributed to this release:
150
+ @alexfauquette, @arminmeh, @bernardobelchior, @flaviendelangle, @JCQuintas, @LukasTy, @mapache-salvaje, @noraleonte, @MBilalShafi
151
+
152
+ ### Data Grid
153
+
154
+ #### `@mui/x-data-grid@8.9.0`
155
+
156
+ Internal changes.
157
+
158
+ #### `@mui/x-data-grid-pro@8.9.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
159
+
160
+ Same changes as in `@mui/x-data-grid@8.9.0`, plus:
161
+
162
+ - [DataGridPro] Row reorder using drop indicator (#18627) @MBilalShafi
163
+
164
+ #### `@mui/x-data-grid-premium@8.9.0` [![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-data-grid-pro@8.9.0`, plus:
167
+
168
+ - [DataGridPremium] Allow group column overrides with pivoting (#18765) @arminmeh
169
+ - [DataGridPremium] Support sort-dependent aggregation and improve performance (#18348) @lauri865
170
+
171
+ ### Date and Time Pickers
172
+
173
+ #### `@mui/x-date-pickers@8.9.0`
174
+
175
+ - [pickers] Avoid useless date creation in `AdapterDayjs` (#18429) @flaviendelangle
176
+ - [pickers] Fix `timeSteps` JSDoc (#18807) @LukasTy
177
+
178
+ #### `@mui/x-date-pickers-pro@8.9.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
179
+
180
+ Same changes as in `@mui/x-date-pickers@8.9.0`.
181
+
182
+ ### Charts
183
+
184
+ #### `@mui/x-charts@8.9.0`
185
+
186
+ - [charts] Add `minBarSize` to prevent bars from having 0 height (#18798) @JCQuintas
187
+ - [charts] Add click listener to radar charts (#18773) @alexfauquette
188
+ - [charts] Improve scatter chart pointer move performance (#18775) @bernardobelchior
189
+ - [charts] Simplify radar internal hooks (#18760) @alexfauquette
190
+ - [charts] `minBarSize` now ignores `0` and `null` values (#18816) @JCQuintas
191
+ - [charts] Fix y-axis tick label overlap when using log scale (#18744) @bernardobelchior
192
+ - [charts] Expose <ChartType>Series type for all chart types (#18805) @bernardobelchior
193
+
194
+ #### `@mui/x-charts-pro@8.9.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
195
+
196
+ Same changes as in `@mui/x-charts@8.9.0` plus:
197
+
198
+ [charts-pro] Fix issue where charts gestures weren't properly working when inside the shadow-dom (#18837) @JCQuintas
199
+
200
+ ### Tree View
201
+
202
+ #### `@mui/x-tree-view@8.9.0`
203
+
204
+ Internal changes.
205
+
206
+ #### `@mui/x-tree-view-pro@8.9.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
207
+
208
+ Same changes as in `@mui/x-tree-view@8.9.0`.
209
+
210
+ ### Codemod
211
+
212
+ #### `@mui/x-codemod@8.9.0`
213
+
214
+ Internal changes.
215
+
216
+ ### Docs
217
+
218
+ - [data grid][docs] Revise the Pro filter docs (#17929) @mapache-salvaje
219
+ - [charts][docs] Move mark outside clip-path (#18806) @alexfauquette
220
+
221
+ ### Miscellaneous
222
+
223
+ - [code-infra] Fix ESLint `import` restriction rule for test files (#18669) @LukasTy
224
+ - [code-infra] Remove charts benchmarks dependency on `@testing-library/jest-dom` (#18800) @bernardobelchior
225
+ - [code-infra] Remove duplicate dependency from `eslint-plugin-mui-x` (#18797) @bernardobelchior
226
+
8
227
  ## 8.8.0
9
228
 
10
229
  _Jul 11, 2025_
@@ -216,6 +435,7 @@ We'd like to extend a big thank you to the 12 contributors who made this release
216
435
  - 📅 Add `usePickerAdapter` hook to access the date adapter.
217
436
 
218
437
  You can use the adapter in your custom components if you need them to work with multiple date libraries — [Learn more](https://mui.com/x/react-date-pickers/custom-components/#access-date-adapter).
438
+
219
439
  - 🌎 Improve Danish (da-DK) locale
220
440
  - 🌎 Improve German (de-DE) locale
221
441
 
@@ -234,13 +454,13 @@ The following are all team members who have contributed to this release:
234
454
  - [l10n] Improve Danish (da-DK) locale (#18428) @ShahrazH
235
455
  - [l10n] Improve German (de-DE) locale (#18388) @omalyutin
236
456
 
237
- #### `@mui/x-data-grid-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")
457
+ #### `@mui/x-data-grid-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
238
458
 
239
459
  Same changes as in `@mui/x-data-grid@8.6.0`, plus:
240
460
 
241
461
  - [DataGridPro] Fix lazy loading params calculated from rendering context (#18460) @arminmeh
242
462
 
243
- #### `@mui/x-data-grid-premium@8.6.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link "Premium plan")
463
+ #### `@mui/x-data-grid-premium@8.6.0` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link 'Premium plan')
244
464
 
245
465
  Same changes as in `@mui/x-data-grid-pro@8.6.0`.
246
466
 
@@ -252,7 +472,7 @@ Same changes as in `@mui/x-data-grid-pro@8.6.0`.
252
472
  - [pickers] Fix to use latest `value` when updating `lastCommittedValue` in internal state (#18518) @LukasTy
253
473
  - [pickers] Use `usePickerAdapter` hook internally instead of `useUtils` (#18465) @LukasTy
254
474
 
255
- #### `@mui/x-date-pickers-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")
475
+ #### `@mui/x-date-pickers-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
256
476
 
257
477
  Same changes as in `@mui/x-date-pickers@8.6.0`.
258
478
 
@@ -269,7 +489,7 @@ Same changes as in `@mui/x-date-pickers@8.6.0`.
269
489
  - [charts] Improve touch behavior for polar axis (#18531) @JCQuintas
270
490
  - [charts] Add `isElementInside` helper (#18530) @JCQuintas
271
491
 
272
- #### `@mui/x-charts-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")
492
+ #### `@mui/x-charts-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
273
493
 
274
494
  Same changes as in `@mui/x-charts@8.6.0`, plus:
275
495
 
@@ -283,7 +503,7 @@ Same changes as in `@mui/x-charts@8.6.0`, plus:
283
503
 
284
504
  Internal changes.
285
505
 
286
- #### `@mui/x-tree-view-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")
506
+ #### `@mui/x-tree-view-pro@8.6.0` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link 'Pro plan')
287
507
 
288
508
  Same changes as in `@mui/x-tree-view@8.6.0`, plus:
289
509
 
@@ -1498,7 +1718,6 @@ Same changes as in `@mui/x-date-pickers@8.0.0-beta.3`.
1498
1718
 
1499
1719
  - Removed `react-spring` as a dependency of `@mui/x-charts`.
1500
1720
  A consequence of this change is that the props of some slots have been changed because the `SpringValue` wrapper has been removed. The affected slots and props are:
1501
-
1502
1721
  - the type of the `x`, `y`, `width` and `height` props of the `bar` slot are now `number`;
1503
1722
  - the type of `startAngle`, `endAngle`, `innerRadius`, `outerRadius`, `arcLabelRadius`, `cornerRadius` and `paddingAngle` props of `pieArc` and `pieArcLabel` slot are now `number`.
1504
1723
 
@@ -2066,7 +2285,6 @@ Following are all team members who have contributed to this release:
2066
2285
  - The `slots.baseFormControl` component was removed.
2067
2286
 
2068
2287
  - The "Reset" button in the column visibility panel now resets to the initial column visibility model. Previously it was reset to the model that was active at the time the panel was opened. The reset behavior follows these rules:
2069
-
2070
2288
  1. If an initial `columnVisibilityModel` is provided, it resets to that model.
2071
2289
  2. If a controlled `columnVisibilityModel` is provided, it resets to the first model value.
2072
2290
  3. When the columns are updated (via the `columns` prop or `updateColumns()` API method), the reset reference point updates to the current `columnVisibilityModel`.
@@ -2089,7 +2307,6 @@ Following are all team members who have contributed to this release:
2089
2307
  The `exclude` selection type allows to select all rows except the ones in the `ids` set.
2090
2308
 
2091
2309
  This change impacts the following props:
2092
-
2093
2310
  - `rowSelectionModel`
2094
2311
  - `onRowSelectionModelChange`
2095
2312
  - `initialState.rowSelectionModel`
@@ -2413,7 +2630,6 @@ Same changes as in `@mui/x-data-grid-pro@8.0.0-alpha.12`, plus:
2413
2630
  - The `aria-label` on the `<Clock />` component and Time Picker opening button has been fixed to rely on the set `ampm` property instead of defaulting to the user's locale.
2414
2631
 
2415
2632
  - The following unused formats have been removed from the adapters and can no longer be overridden via the `dateFormats` prop on the `<LocalizationProvider />` component:
2416
-
2417
2633
  - `fullTime` - please use `fullTime12h` and `fullTime24h` instead:
2418
2634
  ```diff
2419
2635
  <LocalizationProvider
@@ -2628,7 +2844,6 @@ Following are all team members who have contributed to this release:
2628
2844
 
2629
2845
  - `viewportInnerSize.width` now includes pinned columns' widths (fixes recursive loops in updating dimensions <-> columns)
2630
2846
  - The Data Grid now has a default background color, and its customization has moved from `theme.mixins.MuiDataGrid` to `theme.palette.DataGrid` with the following properties:
2631
-
2632
2847
  - `bg`: Sets the background color of the entire grid (new property)
2633
2848
  - `headerBg`: Sets the background color of the header (previously named `containerBackground`)
2634
2849
  - `pinnedBg`: Sets the background color of pinned rows and columns (previously named `pinnedBackground`)
@@ -2657,7 +2872,6 @@ Following are all team members who have contributed to this release:
2657
2872
  Only the initial value and the type are updated. Logic that initializes the API and its availability remained the same, which means that if you could access API in a particular line of your code before, you are able to access it as well after this change.
2658
2873
 
2659
2874
  Depending on the context in which the API is being used, you can decide what is the best way to deal with `null` value. Some options are:
2660
-
2661
2875
  - Use optional chaining
2662
2876
  - Use non-null assertion operator if you are sure your code is always executed when the `apiRef` is not `null`
2663
2877
  - Return early if `apiRef` is `null`
@@ -3181,7 +3395,6 @@ Following are all team members who have contributed to this release:
3181
3395
  #### Breaking changes
3182
3396
 
3183
3397
  - Passing additional props (like `data-*`, `aria-*`) directly on the Data Grid component is no longer supported. To pass the props, use `slotProps`:
3184
-
3185
3398
  - For `.root` element, use `slotProps.root`.
3186
3399
  - For `.main` element (the one with `role="grid"`), use `slotProps.main`.
3187
3400
 
@@ -3698,14 +3911,12 @@ Same changes as in `@mui/x-date-pickers@v8.0.0-alpha.1`, plus:
3698
3911
  #### Breaking change
3699
3912
 
3700
3913
  - The DX of the Tooltip customization has been refactored
3701
-
3702
3914
  - The `tooltip` prop has been removed in favor of `slotProps.tooltip` for consistency.
3703
3915
  - The `popper`, `axisContent`, and `itemContent` slots have been removed in favor of the `tooltip` slot which overrides the entire tooltip.
3704
3916
  - To override the tooltip content, use the `useItemTooltip` or `useAxisTooltip` hook to get the data, and wrap your component in `ChartsTooltipContainer` to follow the pointer position.
3705
3917
  - To override the tooltip placement, use the `ChartsItemTooltipContent` or `ChartsItemTooltipContent` to get default data and place them in your custom tooltip.
3706
3918
 
3707
3919
  - The library now uses the SVG `filter` attribute instead of `d3-color` for color manipulation.
3708
-
3709
3920
  - This modification impacts the `LinePlot`, `AreaPlot`, and `BarPlot` components.
3710
3921
  If you've customized the `fill` of those elements, you might need to override it by using the CSS `filter`.
3711
3922
  - The `theme.styleOverride` is removed for `MuiLineElement`, `MuiAreaElement`, and `MuiBarElement` to improve performance.
@@ -3815,14 +4026,12 @@ Same changes as in `@mui/x-data-grid-pro@8.0.0-alpha.0`, plus:
3815
4026
  #### Breaking changes
3816
4027
 
3817
4028
  - The default DOM structure of the field has changed [Learn more](https://mui.com/x/migration/migration-pickers-v7/#new-dom-structure-for-the-field).
3818
-
3819
4029
  - Before version `v8.x`, the fields' DOM structure consisted of an `<input />`, which held the whole value for the component, but unfortunately presents a few limitations in terms of accessibility when managing multiple section values.
3820
4030
  - Starting with version `v8.x`, all the field and picker components come with a new DOM structure that allows the field component to set aria attributes on individual sections, providing a far better experience with screen readers.
3821
4031
 
3822
4032
  - Some translation keys no longer require `utils` and the date object as parameters, but only the formatted value as a string. The keys affected by this changes are: `clockLabelText`, `openDatePickerDialogue` and `openTimePickerDialogue` — [Learn more](https://mui.com/x/migration/migration-pickers-v7/#stop-passing-utils-and-the-date-object-to-some-translation-keys).
3823
4033
 
3824
4034
  - The following types are no longer exported by `@mui/x-date-pickers` and `@mui/x-date-pickers-pro` — [Learn more](https://mui.com/x/migration/migration-pickers-v7/#removed-types).
3825
-
3826
4035
  - `UseDateFieldComponentProps`
3827
4036
  - `UseTimeFieldComponentProps`
3828
4037
  - `UseDateTimeFieldComponentProps`
@@ -3870,7 +4079,6 @@ Same changes as in `@mui/x-date-pickers@8.0.0-alpha.0`.
3870
4079
  - The `slots.legend` does not receive the `drawingArea` prop. You can still access your custom legend with the `useDrawingArea()` hook if your custom legend needs it.
3871
4080
 
3872
4081
  - Removed or renamed multiple props from Series — [Learn more](https://mui.com/x/migration/migration-charts-v7/#series-properties-renaming).
3873
-
3874
4082
  - The `highlighted` and `faded` properties of highlightScope have been deprecated in favor of `highlight` and `fade`.
3875
4083
  The deprecated ones are now removed.
3876
4084
  - The `xAxisKey`, `yAxisKey`, and `zAxisKey` properties have been deprecated in favor of `xAxisId`, `yAxisId`, and `zAxisId`.
@@ -6134,7 +6342,6 @@ We'd like to offer a big thanks to the 12 contributors who made this release pos
6134
6342
  <img width="287" src="https://github.com/user-attachments/assets/78bd83c5-7ce4-4ed7-acf9-be70b2dbce54" alt="Item reordering using drag and drop" />
6135
6343
 
6136
6344
  - 📦 Support CommonJS bundle out of the box on `@mui/x-charts` by adding vendored D3 dependencies.
6137
-
6138
6345
  - This modifies how the package imports D3.js. It will impact you if you use `d3` packages installed by `@mui/x-charts` and don't have them in your `package.json`. You shouldn't be affected otherwise.
6139
6346
  - For more context, the initial issue is caused by D3 only exporting ESM.
6140
6347
 
@@ -7669,7 +7876,6 @@ We'd like to offer a big thanks to the 12 contributors who made this release pos
7669
7876
  #### Breaking changes
7670
7877
 
7671
7878
  - The `density` is a [controlled prop](https://mui.com/x/react-data-grid/accessibility/#set-the-density-programmatically) now, if you were previously passing the `density` prop to the Data Grid, you will need to do one of the following:
7672
-
7673
7879
  1. Move it to the `initialState.density` to initialize it.
7674
7880
 
7675
7881
  ```diff
@@ -8175,7 +8381,6 @@ Same changes as in `@mui/x-data-grid-pro@7.0.0-beta.4`.
8175
8381
  ```
8176
8382
 
8177
8383
  - The following internal types were exported by mistake and have been removed from the public API:
8178
-
8179
8384
  - `UseDateFieldDefaultizedProps`
8180
8385
  - `UseTimeFieldDefaultizedProps`
8181
8386
  - `UseDateTimeFieldDefaultizedProps`
@@ -8416,7 +8621,6 @@ We'd like to offer a big thanks to the 12 contributors who made this release pos
8416
8621
  - 🎁 The Line Chart component now has animation by default (#11620) @alexfauquette
8417
8622
  - 🚀 All charts have click handlers (#11411) @alexfauquette
8418
8623
  Test their respective documentation demonstrations to know more about the data format:
8419
-
8420
8624
  - [Scatter Chart](https://v7.mui.com/x/react-charts/scatter/#click-event)
8421
8625
  - [Line Chart](https://v7.mui.com/x/react-charts/lines/#click-event)
8422
8626
  - [Bar Chart](https://v7.mui.com/x/react-charts/bars/#click-event)
@@ -8696,7 +8900,6 @@ We'd like to offer a big thanks to the 11 contributors who made this release pos
8696
8900
  ```
8697
8901
 
8698
8902
  The most notable changes that might affect your application or tests are:
8699
-
8700
8903
  - The `role="grid"` attribute along with related ARIA attributes are now applied to the inner `div` element instead of the root `div` element:
8701
8904
 
8702
8905
  ```diff
@@ -9247,7 +9450,6 @@ We'd like to offer a big thanks to the 6 contributors who made this release poss
9247
9450
 
9248
9451
  - The filter panel no longer uses the native version of the [`Select`](https://mui.com/material-ui/react-select/) component for all components.
9249
9452
  - The `getOptionValue` and `getOptionLabel` props were removed from the following components:
9250
-
9251
9453
  - `GridEditSingleSelectCell`
9252
9454
  - `GridFilterInputSingleSelect`
9253
9455
  - `GridFilterInputMultipleSingleSelect`
@@ -9661,7 +9863,6 @@ Same changes as in `@mui/x-data-grid-pro@7.0.0-alpha.3`, plus:
9661
9863
  - Add new parameters to the `shortcuts` slot `onChange` callback
9662
9864
 
9663
9865
  The `onChange` callback fired when selecting a shortcut now requires two new parameters (previously they were optional):
9664
-
9665
9866
  - The [`changeImportance`](/x/react-date-pickers/shortcuts/#behavior-when-selecting-a-shortcut) of the shortcut.
9666
9867
  - The `item` containing the entire shortcut object.
9667
9868