We'd like to extend a big thank you to the 20 contributors who made this release possible. Here are some highlights ✨:
-
🧮 Computed columns in the Data Grid Premium
computed-columns-demo.mp4
-
👆 Data Grid column reordering on touch and pen devices
-
↔️ Right-to-left (RTL) support in the Event Calendar and the Event Timeline
-
🕒 Fix recurring events, drag and drop, and the time axis of the Scheduler across DST transitions
-
⚠️ Recurring events and dependencies are now opt-in in the Event Timeline
-
🌍 The Scheduler formats dates with
Intl:dateLocaletakes a locale string like"fr-FR" -
🐞 Bugfixes
-
📚 Documentation improvements
Special thanks go out to these community members for their valuable contributions:
@adamowski10, @Anexus5919, @b84330808, @chanellebingham, @costajohnt, @dasjideepak, @mateuseap, @minwookshin, @mustafajw07
The following team members contributed to this release:
@flaviendelangle, @hasdfa, @Janpot, @JCQuintas, @LukasTy, @MBilalShafi, @michelengelen, @noraleonte, @rita-codes, @romgrk, @ZeeshanTamboli
Data Grid
@mui/x-data-grid@9.17.0
- [DataGrid] Add
filterFormColumnInputslot (#23871) @michelengelen - [DataGrid] Describe column and action in sort button labels (#23755) @minwookshin
- [DataGrid] Describe column and action in sort button labels (#23755) @minwookshin
- [DataGrid] Document undocumented props and classes (#24052) @Janpot
- [DataGrid] Fire
onMenuCloseonly when a menu actually closes (#23873) @michelengelen - [DataGrid] Fix stale values when server-side aggregation is removed (#23973) @JCQuintas
- [DataGrid] Focus the column header when clicking the sort icon (#23947) @JCQuintas
- [DataGrid] Show the column header icons on keyboard focus (#23699) @dasjideepak
- [DataGrid] Keep the first typed character with a controlled modes model (#23982) @michelengelen
@mui/x-data-grid-pro@9.17.0 
Same changes as in @mui/x-data-grid@9.17.0, plus:
- [DataGridPro] Touch column reorder with pointer events (#23928) @noraleonte
@mui/x-data-grid-premium@9.17.0 
Same changes as in @mui/x-data-grid-pro@9.17.0, plus:
- [DataGridPremium] Computed columns (#23646) @MBilalShafi
- [DataGridPremium] Fix React 17 crashes (#24038) @LukasTy
Date and Time Pickers
@mui/x-date-pickers@9.17.0
- [pickers] Document undocumented props and slots (#24031) @Janpot
- [pickers] Forward
readOnlyto the input inPickersTextField(#24042) @LukasTy - [pickers] Only scroll the Digital Clock when its active item changes (#23942) @b84330808
@mui/x-date-pickers-pro@9.17.0 
Same changes as in @mui/x-date-pickers@9.17.0.
Charts
@mui/x-charts@9.17.0
- [charts] Document undocumented props and slots (#24033) @Janpot
- [charts] Fix React 17 crashes (#24038) @LukasTy
@mui/x-charts-pro@9.17.0 
Same changes as in @mui/x-charts@9.17.0.
@mui/x-charts-premium@9.17.0 
Same changes as in @mui/x-charts-pro@9.17.0.
Tree View
@mui/x-tree-view@9.17.0
- [tree view] Document undocumented props (#24036) @Janpot
- [tree view] Keep the dragged item mounted when it is virtualized away (#24050) @JCQuintas
@mui/x-tree-view-pro@9.17.0 
Same changes as in @mui/x-tree-view@9.17.0.
Scheduler
Breaking changes
-
The
headerToolbarLeftElementclass of the Event Calendar has been renamed toheaderToolbarStart.
Update your style overrides and class selectors:const theme = createTheme({ components: { MuiEventCalendar: { styleOverrides: { - headerToolbarLeftElement: { gap: 8 }, + headerToolbarStart: { gap: 8 }, }, }, }, }); -
The unused
DEFAULT_PREFERENCESexport of the Timeline store has been removed. -
Recurring events and dependencies are now opt-in in the Event Timeline. Without the feature, each event with an
rrulerenders once:-<EventTimelinePremium events={events} /> +<EventTimelinePremium events={events} features={{ recurringEvents: recurringEventsFeature }} />
-
The
dateLocaleprop andcreateDateLocaleTheme()take a locale string, likeIntl.DateTimeFormat, instead of adate-fnslocale object:-import { fr } from 'date-fns/locale/fr'; -<EventCalendar dateLocale={fr} /> +<EventCalendar dateLocale="fr-FR" />
-
The
weekStartsOnpreference uses ISO weekdays, from1(Monday) to7(Sunday). Sunday is7instead of0. -
Without
ampm, times follow the hour cycle of the locale instead of a 12-hour clock, anddefaultPreferencesno longer includesampm: true. -
Dates use the
Intl.DateTimeFormatformats of the locale, so some labels change slightly (for example "July 3" instead of "July 3rd"), and week numbers follow the locale. -
Timed events shorter than one day that cross midnight now stay in the time grid by default, and the day grid row no longer shows a visible "All day" label. Use
timeGridEvents: 'same-day-only'inviewConfig.dayandviewConfig.weekto keep the previous behavior.
@mui/x-scheduler@9.0.0-beta.15
- [scheduler] Add
timeGridEventsoption to keep overnight timed events in the time grid (#23749) @Anexus5919 - [scheduler] Add an RTL demo and visual regression tests (#23975) @rita-codes
- [scheduler] Add regression tests for standalone month names in headers (#22841) @adamowski10
- [scheduler] Add store-level tests for the clamped resize with unwritable dates (#23952) @mustafajw07
- [scheduler] Add utility classes to the dependency UI (#24035) @rita-codes
- [scheduler] Allow disabling event deletion with
eventDeletion={false}(#23988) @mustafajw07 - [scheduler] Build the date keys from plain dates (#24010) @flaviendelangle
- [scheduler] Compute the fields of PlainDate when they are read (#23969) @flaviendelangle
- [scheduler] Detect the text direction and pass it to the timeline virtualizer (#23898) @rita-codes
- [scheduler] Document undocumented props (#24036) @Janpot
- [scheduler] Fetch the ranges of the lazy loading as timestamps (#23998) @flaviendelangle
- [scheduler] Fix React 17 crashes (#24038) @LukasTy
- [scheduler] Fix recurring events across timezones and DST transitions (#23943) @flaviendelangle
- [scheduler] Fix the dependency engine across DST transitions and speed it up (#23963) @flaviendelangle
- [scheduler] Fix the drag and drop of the day grid across DST transitions and speed up its preview (#23964) @flaviendelangle
- [scheduler] Fix the edits of recurring series across DST transitions (#23965) @flaviendelangle
- [scheduler] Fix the navigation of the Timeline presets across DST transitions (#23966) @flaviendelangle
- [scheduler] Fix the time axis across DST transitions and speed it up (#23962) @flaviendelangle
- [scheduler] Format the dates with Intl and number the weekdays like ISO 8601 (#24021) @flaviendelangle
- [scheduler] Give the view switcher and the drawer view list an accessible name (#23996) @chanellebingham
- [scheduler] Keep the "+N more" popover and the event context menu in sync with removed events (#23800) @rita-codes
- [scheduler] Make every user-facing store error translatable through
localeText(#24026) @rita-codes - [scheduler] Make the agenda view day count configurable (#23815) @costajohnt
- [scheduler] Mirror arrow key navigation in RTL (#23954) @rita-codes
- [scheduler] Mirror navigation icons, popups and dialogs in RTL (#23955) @rita-codes
- [scheduler] Move the day math of the Event Calendar views to plain dates (#23999) @flaviendelangle
- [scheduler] Move the placeholder of the drag and drop to timestamps (#23997) @flaviendelangle
- [scheduler] Pass timestamps and plain dates to the CalendarGrid (#24007) @flaviendelangle
- [scheduler] Process dates without the getters of the adapter (#23984) @flaviendelangle
- [scheduler] Read more internal dates as plain dates and timestamps (#24014) @flaviendelangle
- [scheduler] Read the Timeline presets, the recurrence presets and the time columns on plain dates (#24015) @flaviendelangle
- [scheduler] Read the bounds of the time axis as timestamps (#24006) @flaviendelangle
- [scheduler] Read the dates of the event dialog as plain dates (#24003) @flaviendelangle
- [scheduler] Read the timestamps of the processed dates in the recurring events (#24004) @flaviendelangle
- [scheduler] Refuse writes atomically when a date can't be written back (#23553) @mustafajw07
- [scheduler] Remove the unused
DEFAULT_PREFERENCESexport of the Timeline store (#24013) @flaviendelangle - [scheduler] Rename
headerToolbarLeftElementtoheaderToolbarStart(#23897) @rita-codes - [scheduler] Speed up the day grid and fix day lists across DST transitions (#23961) @flaviendelangle
- [scheduler] Store the current time as a timestamp and compare the days of the occurrences (#24005) @flaviendelangle
- [scheduler] Support RTL in the Event Timeline dependency arrows (#23974) @rita-codes
- [scheduler] Support RTL pointer and scroll interactions in the Event Timeline (#23972) @rita-codes
- [scheduler] Support RTL when dragging multi-day events in the Event Calendar (#23953) @rita-codes
- [scheduler] Sync the BaseTemporal copy with the Base UI version (#24040) @flaviendelangle
- [scheduler] Type the plain dates through the BaseTemporal namespace (#24034) @flaviendelangle
- [scheduler] Use logical CSS properties in the Event Calendar and Event Timeline (#23899) @rita-codes
@mui/x-scheduler-premium@9.0.0-beta.15 
Same changes as in @mui/x-scheduler@9.0.0-beta.15, plus:
- [scheduler-premium] Draw dependency arrows to events outside the visible range (#23790) @rita-codes
- [scheduler-premium] Fix the Event Timeline features after the plain-date migration (#24020) @flaviendelangle
- [scheduler-premium] Make recurring events and dependencies opt-in in the Event Timeline (#24011) @rita-codes
- [scheduler-premium] Move the dependency UI strings to
localeText(#24027) @rita-codes - [scheduler-premium] Scroll virtualized timeline rows into view on arrow-key navigation (#23860) @rita-codes
Docs
- [DataGrid] Document running your own AI Assistant prompt processor (#24037) @hasdfa
- [docs] Add a shared experiments area and migrate Scheduler experiments (#23979) @flaviendelangle
- [docs] Enforce top-level type imports in docs and scripts (#24046) @Janpot
- [docs] Follow the docs direction in the scheduler overview demos (#23968) @rita-codes
- [docs] Add the Event Timeline dependencies page, unlisted until the feature is public (#24032) @rita-codes
Core
- [code-infra] Enforce top-level type imports in all packages (#24045) @Janpot
- [code-infra] Enforce top-level type imports in test (#24047) @Janpot
- [code-infra] Remove redundant
only-allowpreinstall hook (#23956) @Janpot - [code-infra] Remove redundant enablePrePostScripts setting (#24000) @Janpot
- [code-infra] Skip empty internal package changelogs (#23648) @mateuseap
- [code-infra] Include resolution settings in lockfile (#23944) @ZeeshanTamboli
- [test] Start the e2e test server from vitest (#24062) @LukasTy
Miscellaneous
- [chat] Document undocumented props and slots (#24053) @Janpot
- [chat] Fix
ChatBoxignoringfeatures.attachments(#23946) @JCQuintas - [chat] Fix React 17 crashes (#24038) @LukasTy
- [test] Serve flagcdn images from a placeholder in the regression tests (#24055) @Janpot
- [test] Start the e2e test server from vitest (#24062) @LukasTy
- [test] Start the regression test server from vitest (#24057) @Janpot
- [x-internals] Re-export the utilities shared with @base-ui/utils (#23374) @romgrk