Skip to content

[transitions] Prevent exit transitions from getting stuck - #48881

Merged
ZeeshanTamboli merged 7 commits into
mui:masterfrom
ZeeshanTamboli:issue-32286-transition-not-completely-exited
Aug 5, 2026
Merged

[transitions] Prevent exit transitions from getting stuck#48881
ZeeshanTamboli merged 7 commits into
mui:masterfrom
ZeeshanTamboli:issue-32286-transition-not-completely-exited

Conversation

@ZeeshanTamboli

@ZeeshanTamboli ZeeshanTamboli commented Jul 29, 2026

Copy link
Copy Markdown
Member

Fix transitions that can get stuck in exiting when React reconnects effects or when a Modal’s portal container changes during an exit.

The transition completion timer/listener is rearmed after effects reconnect without repeating lifecycle callbacks such as onExit or onExiting.

Modal now retains its last resolved portal container while exiting. This prevents React from remounting the transition subtree before onExited fires, ensuring the Modal unmounts and releases its scroll lock. Subsequent opens use the latest container.

Added regression tests covering:

  • Transition completion after effects reconnect.
  • Portal container changes during an active exit.
  • Lifecycle callbacks firing exactly once.
  • Modal cleanup, unmounting, and reopening in the new container.

Fixes #32286.

@ZeeshanTamboli ZeeshanTamboli added type: bug It doesn't behave as expected. scope: transitions Changes related to the transitions. scope: backdrop This is the name of the generic UI component, not the React module! labels Jul 29, 2026
@code-infra-dashboard

code-infra-dashboard Bot commented Jul 29, 2026

Copy link
Copy Markdown

Deploy preview

https://deploy-preview-48881--material-ui.netlify.app/
QR code for https://deploy-preview-48881--material-ui.netlify.app/

Bundle size

Bundle Parsed size Gzip size
@mui/material 🔺+167B(+0.03%) 🔺+51B(+0.03%)
@mui/lab 0B(0.00%) 0B(0.00%)
@mui/private-theming 0B(0.00%) 0B(0.00%)
@mui/system 0B(0.00%) 0B(0.00%)
@mui/utils 0B(0.00%) 0B(0.00%)

Details of bundle changes


Check out the code infra dashboard for more information about this PR.

@ZeeshanTamboli
ZeeshanTamboli marked this pull request as ready for review August 4, 2026 09:11
@ZeeshanTamboli ZeeshanTamboli added the scope: modal Changes related to the modal. label Aug 4, 2026
@ZeeshanTamboli ZeeshanTamboli changed the title [transitions] Resume completion after effects reconnect [transitions] Prevent exit transitions from getting stuck Aug 4, 2026

@LukasTy LukasTy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice fix -- both halves are needed (the Transition change alone does not stop the portal remount, and the Modal change alone does not survive an effects reconnect). Two things before merging.

1. [P1] A reconnected effect can schedule completion for a superseded phase --

return;
}
const prev = lastFiredStatusRef.current;
const statusChanged = prev !== status;
if (statusChanged) {
lastFiredStatusRef.current = status;
}
const current = propsRef.current;
if (status === 'entering') {
if (statusChanged) {
current.onEntering?.(isAppearingRef.current);
}
if (nextCallbackRef.current === null) {
scheduleTransitionEnd('entered', 'entering');
}
} else if (status === 'exiting') {
if (statusChanged) {
current.onExiting?.();
}
if (nextCallbackRef.current === null) {
scheduleTransitionEnd('exited', 'exiting');
}
} else if (status === 'entered' && statusChanged) {
current.onEntered?.(isAppearingRef.current);
} else if (status === 'exited' && statusChanged) {
current.onExited?.();
}
}, [propsRef, scheduleTransitionEnd, status]);

Moving the scheduling outside the statusChanged guard means it runs against the rendered status, which is stale when the reconciliation effect starts a new phase in the same commit that effects reconnect. It arms completion for the phase that was just abandoned, and because nextCallbackRef.current is non-null by then, the real phase never gets its own timer.

Verified on this branch (React 19.2.8):

  • exit in flight -> React.Activity hidden -> visible again with in={true} in the same commit: onExited fires once despite in={true}, onEnter/onEntering fire twice, and the status is still entering after the full timeout.
  • enter in flight -> hidden -> visible with in={false}: mirror image -- spurious onEntered, onExit/onExiting twice, still exiting.

Both are correct on master, so this is a regression. It is not Activity-specific either -- a Suspense boundary that re-suspends and resolves disconnects effects the same way. For Modal, the erroneous onExited runs handleClose() and onTransitionExited while the modal is open, dropping the scroll lock and the manager registration.

Completion should only be scheduled when the rendered phase is still current:

if (nextCallbackRef.current === null && statusRef.current === status) {

Verified: fixes both directions, and the new restarts completion when effects reconnect while exiting test plus ~1500 tests across the transition-adjacent suites still pass.

Worth two more regression tests next to the existing one: reconnect while entering, and reconnect with in flipped -- the latter is what catches this.

2. [P2, pre-existing] Changing disablePortal during exit still loses the transition --

// Changing a portal's container remounts its children. Keep an exiting transition in its
// current container so it can finish and notify the modal that it is safe to unmount.
const portalContainer =
!open && hasTransition && !exited ? (lastMountNodeRef.current ?? container) : container;

Freezing container covers one source of portal remounts, but toggling disablePortal changes Portal topology and remounts the children too. With a 100ms exit and closeAfterTransition, neither direction ever fires onExited/onTransitionExited, so document.body.style.overflow stays hidden. true -> false also drops the Modal from the DOM; false -> true leaves the hidden Modal root mounted.

This reproduces on master too, so it is not introduced here -- but it is the same failure mode this PR is fixing, and the fix shape is the same: preserve the effective disablePortal alongside the resolved container until the exit completes. Reasonable to defer to a follow-up.

@ZeeshanTamboli

Copy link
Copy Markdown
Member Author

[P1] A reconnected effect can schedule completion for a superseded phas

@LukasTy Fixed this. Makes sense.

@ZeeshanTamboli
ZeeshanTamboli requested a review from LukasTy August 5, 2026 07:34
@LukasTy

LukasTy commented Aug 5, 2026

Copy link
Copy Markdown
Member

Claude Opus 5 review

Fix looks right -- I re-ran the two reported repros plus reconnect-while-entering, a double in flip while hidden, and unmountOnExit + flip, all correct now. Three follow-ups.

1. [P1] The fix landed without a regression test -- Transition.test.tsx is unchanged since ea3d35e.

The existing restarts completion when effects reconnect while exiting test passed before this fix too, so nothing currently guards it. This one fails on ea3d35e (data-status stays entering) and passes on 559e8fa; verified in both the node and chromium projects, eslint and prettier clean:

it.skipIf(!('Activity' in React))(
  'does not complete the superseded phase when in flips on reconnect',
  () => {
    const handlers = {
      onEnter: spy(),
      onEntering: spy(),
      onEntered: spy(),
      onExit: spy(),
      onExiting: spy(),
      onExited: spy(),
    };

    function ActivityHarness(props: { in: boolean; mode: 'hidden' | 'visible' }) {
      return (
        <React.Activity mode={props.mode}>
          <TestHarness in={props.in} appear={false} timeout={100} handlers={handlers} />
        </React.Activity>
      );
    }

    const { setProps } = render(<ActivityHarness in mode="visible" />);
    setProps({ in: false, mode: 'visible' });
    expect(screen.getByTestId('target')).to.have.attribute('data-status', 'exiting');

    // Effects disconnect mid-exit, then reconnect in the same commit that `in` flips back.
    // The reconciliation effect starts entering before the lifecycle effect runs, so the
    // lifecycle effect must not schedule completion for the superseded exit.
    setProps({ in: false, mode: 'hidden' });
    clock.tick(50);
    setProps({ in: true, mode: 'visible' });
    clock.tick(100);

    expect(screen.getByTestId('target')).to.have.attribute('data-status', 'entered');
    expect(handlers.onEnter.callCount).to.equal(1);
    expect(handlers.onEntering.callCount).to.equal(1);
    expect(handlers.onEntered.callCount).to.equal(1);
    expect(handlers.onExited.callCount).to.equal(0);
  },
);

2. [P2] disablePortal toggled during exit -- still open, no reply yet.

Re-checked on 559e8fa: with a 100ms exit and closeAfterTransition, neither direction fires onExited/onTransitionExited, so document.body.style.overflow stays hidden. Confirmed it reproduces on master too, so it is pre-existing, not caused by this PR -- but it is the same failure mode, and the same fix shape applies (freeze the effective disablePortal alongside the resolved container). Fine to spin off as a follow-up issue; just want an explicit call rather than it going unnoticed.

3. [P3, minor] The re-arm restarts the phase from zero and re-invokes addEndListener.

Measured on this branch: addEndListener call count goes 1 -> 2 -> 3 across two reconnects (1 -> 3 for a single reconnect in StrictMode, since React double-invokes effects on Activity reveal). On master it stays at 1, so this is new. A user addEndListener that attaches a transitionend listener has no teardown hook, so dead listeners accumulate on the node. Relatedly, a reconnect every 60ms against a 100ms exit never completes -- still exiting after 1200ms, finishing only once the toggling stops.

Both are self-healing and need unusual input, so not a blocker. Flagging so the restart-from-zero semantics are a conscious trade-off rather than a surprise later.

@ZeeshanTamboli

ZeeshanTamboli commented Aug 5, 2026

Copy link
Copy Markdown
Member Author

@LukasTy

Regarding P1:
I've added the suggested regression test. It fails without the statusRef.current === status guard and passes with the fix, so the superseded-phase case is now covered.

Regarding P2:
Agree this is related at the mechanism level: toggling disablePortal, like changing the portal container, can remount the subtree during an active exit and prevent transition completion. However, it is pre-existing and outside the original reproduction. We can do it separately,

Regarding P3:
Agreed. Reconnect currently re-arms completion from scratch because effect cleanup cancels the pending callback, and addEndListener does not provide a teardown contract. Consequently, the timeout restarts at its full duration and addEndListener can be invoked again, leaving previously registered listeners with cancelled callbacks. Avoiding that would require tracking the remaining duration and redesigning how listener completion survives effect disconnection. I'll treat that as a conscious limitation of this fix and document it as a known trade-off separately rather than expanding this PR.

@ZeeshanTamboli
ZeeshanTamboli merged commit a13824f into mui:master Aug 5, 2026
18 checks passed
@ZeeshanTamboli
ZeeshanTamboli deleted the issue-32286-transition-not-completely-exited branch August 5, 2026 13:14
This was referenced Aug 6, 2026
736-c41-2c1-e464fc974 added a commit to Swiss-Armed-Forces/Loom that referenced this pull request Aug 17, 2026
This MR contains the following updates:

| Package | Type | Update | Change | OpenSSF |
|---|---|---|---|---|
| [@mui/icons-material](https://mui.com/material-ui/material-icons/) ([source](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material)) | dependencies | minor | [`9.0.0` → `9.3.1`](https://renovatebot.com/diffs/npm/@mui%2ficons-material/9.0.0/9.3.1) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mui/material-ui/badge)](https://securityscorecards.dev/viewer/?uri=github.com/mui/material-ui) |
| [@mui/material](https://mui.com/material-ui/) ([source](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material)) | dependencies | minor | [`9.0.0` → `9.3.1`](https://renovatebot.com/diffs/npm/@mui%2fmaterial/9.0.0/9.3.1) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mui/material-ui/badge)](https://securityscorecards.dev/viewer/?uri=github.com/mui/material-ui) |
| [@mui/types](https://github.com/mui/material-ui/tree/master/packages/mui-types) ([source](https://github.com/mui/material-ui/tree/HEAD/packages/mui-types)) | devDependencies | minor | [`9.0.0` → `9.3.0`](https://renovatebot.com/diffs/npm/@mui%2ftypes/9.0.0/9.3.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mui/material-ui/badge)](https://securityscorecards.dev/viewer/?uri=github.com/mui/material-ui) |
| [@mui/x-charts](https://mui.com/x/react-charts/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-charts)) | dependencies | minor | [`9.1.0` → `9.11.1`](https://renovatebot.com/diffs/npm/@mui%2fx-charts/9.1.0/9.11.1) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mui/mui-x/badge)](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) |
| [@mui/x-tree-view](https://mui.com/x/react-tree-view/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-tree-view)) | dependencies | minor | [`9.1.0` → `9.11.0`](https://renovatebot.com/diffs/npm/@mui%2fx-tree-view/9.1.0/9.11.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mui/mui-x/badge)](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) |
| [@openapitools/openapi-generator-cli](https://github.com/OpenAPITools/openapi-generator-cli) | devDependencies | minor | [`2.32.0` → `2.40.1`](https://renovatebot.com/diffs/npm/@openapitools%2fopenapi-generator-cli/2.32.0/2.40.1) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/OpenAPITools/openapi-generator-cli/badge)](https://securityscorecards.dev/viewer/?uri=github.com/OpenAPITools/openapi-generator-cli) |
| [@reduxjs/toolkit](https://redux-toolkit.js.org) ([source](https://github.com/reduxjs/redux-toolkit)) | dependencies | minor | [`2.11.2` → `2.12.0`](https://renovatebot.com/diffs/npm/@reduxjs%2ftoolkit/2.11.2/2.12.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/reduxjs/redux-toolkit/badge)](https://securityscorecards.dev/viewer/?uri=github.com/reduxjs/redux-toolkit) |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | devDependencies | minor | [`25.6.0` → `25.9.5`](https://renovatebot.com/diffs/npm/@types%2fnode/25.6.0/25.9.5) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/DefinitelyTyped/DefinitelyTyped/badge)](https://securityscorecards.dev/viewer/?uri=github.com/DefinitelyTyped/DefinitelyTyped) |
| [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | devDependencies | minor | [`8.59.0` → `8.67.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.59.0/8.67.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/typescript-eslint/typescript-eslint/badge)](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | devDependencies | minor | [`8.59.0` → `8.67.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.59.0/8.67.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/typescript-eslint/typescript-eslint/badge)](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [date-fns](https://github.com/date-fns/date-fns) | dependencies | minor | [`4.1.0` → `4.4.0`](https://renovatebot.com/diffs/npm/date-fns/4.1.0/4.4.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/date-fns/date-fns/badge)](https://securityscorecards.dev/viewer/?uri=github.com/date-fns/date-fns) |
| [globals](https://github.com/sindresorhus/globals) | devDependencies | minor | [`17.6.0` → `17.11.0`](https://renovatebot.com/diffs/npm/globals/17.6.0/17.11.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/sindresorhus/globals/badge)](https://securityscorecards.dev/viewer/?uri=github.com/sindresorhus/globals) |
| [i18next](https://www.i18next.com) ([source](https://github.com/i18next/i18next)) | dependencies | minor | [`26.1.0` → `26.3.6`](https://renovatebot.com/diffs/npm/i18next/26.1.0/26.3.6) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/i18next/i18next/badge)](https://securityscorecards.dev/viewer/?uri=github.com/i18next/i18next) |
| [pdfjs-dist](https://mozilla.github.io/pdf.js/) ([source](https://github.com/mozilla/pdf.js)) | dependencies | minor | [`6.1.200` → `6.2.108`](https://renovatebot.com/diffs/npm/pdfjs-dist/6.1.200/6.2.108) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mozilla/pdf.js/badge)](https://securityscorecards.dev/viewer/?uri=github.com/mozilla/pdf.js) |
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | minor | [`3.8.3` → `3.9.6`](https://renovatebot.com/diffs/npm/prettier/3.8.3/3.9.6) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/prettier/prettier/badge)](https://securityscorecards.dev/viewer/?uri=github.com/prettier/prettier) |
| [react-ace](https://github.com/securingsincity/react-ace) | dependencies | minor | [`14.0.1` → `14.1.0`](https://renovatebot.com/diffs/npm/react-ace/14.0.1/14.1.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/securingsincity/react-ace/badge)](https://securityscorecards.dev/viewer/?uri=github.com/securingsincity/react-ace) |
| [react-intersection-observer](https://github.com/thebuilder/react-intersection-observer) | dependencies | minor | [`10.0.3` → `10.1.0`](https://renovatebot.com/diffs/npm/react-intersection-observer/10.0.3/10.1.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/thebuilder/react-intersection-observer/badge)](https://securityscorecards.dev/viewer/?uri=github.com/thebuilder/react-intersection-observer) |
| [react-redux](https://github.com/reduxjs/react-redux) | dependencies | minor | [`9.2.0` → `9.3.0`](https://renovatebot.com/diffs/npm/react-redux/9.2.0/9.3.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/reduxjs/react-redux/badge)](https://securityscorecards.dev/viewer/?uri=github.com/reduxjs/react-redux) |
| [react-router-dom](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | dependencies | minor | [`7.15.0` → `7.18.2`](https://renovatebot.com/diffs/npm/react-router-dom/7.15.0/7.18.2) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/remix-run/react-router/badge)](https://securityscorecards.dev/viewer/?uri=github.com/remix-run/react-router) |
| [typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)) | devDependencies | minor | [`8.59.0` → `8.67.0`](https://renovatebot.com/diffs/npm/typescript-eslint/8.59.0/8.67.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/typescript-eslint/typescript-eslint/badge)](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [vite](https://vite.dev) ([source](https://github.com/vitejs/vite/tree/HEAD/packages/vite)) | devDependencies | minor | [`8.0.9` → `8.2.1`](https://renovatebot.com/diffs/npm/vite/8.0.9/8.2.1) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/vitejs/vite/badge)](https://securityscorecards.dev/viewer/?uri=github.com/vitejs/vite) |

---

### Release Notes

<details>
<summary>mui/material-ui (@&#8203;mui/icons-material)</summary>

### [`v9.3.1`](https://github.com/mui/material-ui/blob/HEAD/CHANGELOG.md#931)

[Compare Source](https://github.com/mui/material-ui/compare/v9.3.0...v9.3.1)

<!-- generated comparing v9.3.0..master -->

*Aug 6, 2026*

A big thanks to the 4 contributors who made this release possible.

##### `@mui/material@9.3.1`

- \[transitions] Prevent exit transitions from getting stuck ([#&#8203;48881](https://github.com/mui/material-ui/issues/48881)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)

##### `@mui/codemod@9.3.1`

- Include transforms in published package ([#&#8203;48934](https://github.com/mui/material-ui/issues/48934)) [@&#8203;brijeshb42](https://github.com/brijeshb42)

##### Core

- \[blog] Clarify early bird renewal discount scope ([#&#8203;48906](https://github.com/mui/material-ui/issues/48906)) [@&#8203;DanailH](https://github.com/DanailH)
- \[test]\[pagination] Add more unit tests ([#&#8203;48927](https://github.com/mui/material-ui/issues/48927)) [@&#8203;silviuaavram](https://github.com/silviuaavram)

All contributors of this release in alphabetical order: [@&#8203;brijeshb42](https://github.com/brijeshb42), [@&#8203;DanailH](https://github.com/DanailH), [@&#8203;silviuaavram](https://github.com/silviuaavram), [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)

### [`v9.3.0`](https://github.com/mui/material-ui/blob/HEAD/CHANGELOG.md#930)

[Compare Source](https://github.com/mui/material-ui/compare/v9.2.0...v9.3.0)

<!-- generated comparing v9.2.0..master -->

*Aug 4, 2026*

A big thanks to the 18 contributors who made this release possible. Here are some highlights ✨:

- ♿️ Keyboard navigation in the [Toggle Button Group](https://mui.com/material-ui/react-toggle-button/) now follows the roving tabindex pattern.
- ♿️ The [Autocomplete](https://mui.com/material-ui/react-autocomplete/) announces its loading and no options messages through a new `status` slot.

##### `@mui/material@9.3.0`

- \[autocomplete] Wrap the no results and loading messages in an aria live region ([#&#8203;48690](https://github.com/mui/material-ui/issues/48690)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[buttongroup] Respect global disableRipple / disableFocusRipple in grouped buttons ([#&#8203;48762](https://github.com/mui/material-ui/issues/48762)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[checkbox]\[radio] Respect global disableRipple from MuiButtonBase defaultProps ([#&#8203;48795](https://github.com/mui/material-ui/issues/48795)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[formcontrollabel] Add missing `labelPlacementEnd` class ([#&#8203;48843](https://github.com/mui/material-ui/issues/48843)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[listitembutton] Fix typos in component code ([#&#8203;48868](https://github.com/mui/material-ui/issues/48868)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[menuitem] Add `aria-checked` for checkbox and radio menu items ([#&#8203;48651](https://github.com/mui/material-ui/issues/48651)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[modal] Replace custom findIndexOf with findIndex ([#&#8203;48827](https://github.com/mui/material-ui/issues/48827)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[modal]\[dialog] Fix scrollbar compensation in Shadow DOM ([#&#8203;48826](https://github.com/mui/material-ui/issues/48826)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[select] Fix endAdornment overlapping the open indicator ([#&#8203;48723](https://github.com/mui/material-ui/issues/48723)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[tablepagination] Add focus style to default InputBase used in Select ([#&#8203;48871](https://github.com/mui/material-ui/issues/48871)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[togglebuttongroup] Add roving tabindex keyboard navigation ([#&#8203;48849](https://github.com/mui/material-ui/issues/48849)) [@&#8203;silviuaavram](https://github.com/silviuaavram)

##### `@mui/system@9.3.0`

- Prevent prototype pollution in cssVarsParser ([#&#8203;48822](https://github.com/mui/material-ui/issues/48822)) [@&#8203;Janpot](https://github.com/Janpot)

##### `@mui/codemod@9.3.0`

- Don't leak state between files in v5.0.0/path-imports ([#&#8203;48797](https://github.com/mui/material-ui/issues/48797)) [@&#8203;manbearwiz](https://github.com/manbearwiz)
- Remove use of eval() ([#&#8203;48701](https://github.com/mui/material-ui/issues/48701)) [@&#8203;oliviertassinari](https://github.com/oliviertassinari)
- Transform all style exports in `v5.0.0/path-imports` codemod ([#&#8203;48800](https://github.com/mui/material-ui/issues/48800)) [@&#8203;manbearwiz](https://github.com/manbearwiz)

##### Docs

- Clarify `container` prop inheritance for Shadow DOM ([#&#8203;48670](https://github.com/mui/material-ui/issues/48670)) [@&#8203;Juan-C-Ceballos](https://github.com/Juan-C-Ceballos)
- Clarify third-party script risk in CSP unsafe-inline note ([#&#8203;48787](https://github.com/mui/material-ui/issues/48787)) [@&#8203;Janpot](https://github.com/Janpot)
- Document `box-sx-prop` codemod ([#&#8203;48888](https://github.com/mui/material-ui/issues/48888)) [@&#8203;SR0725](https://github.com/SR0725)
- Document Grid direction column removal in v9 upgrade guide ([#&#8203;48880](https://github.com/mui/material-ui/issues/48880)) [@&#8203;kalayciburak](https://github.com/kalayciburak)
- Fix color contrast in GitHub labels example ([#&#8203;48844](https://github.com/mui/material-ui/issues/48844)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- Fix per-page canonical URL and stale SEO link ([#&#8203;48789](https://github.com/mui/material-ui/issues/48789)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- Fix redirect loop on the Design Kits page ([#&#8203;48869](https://github.com/mui/material-ui/issues/48869)) [@&#8203;Janpot](https://github.com/Janpot)
- Fix typo 'overriden' -> 'overridden' in CHANGELOG ([#&#8203;48785](https://github.com/mui/material-ui/issues/48785)) [@&#8203;ZhouYinLong-lab](https://github.com/ZhouYinLong-lab)
- Improve TransferList examples ([#&#8203;48845](https://github.com/mui/material-ui/issues/48845)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- Link a new theme generator tool ([#&#8203;48847](https://github.com/mui/material-ui/issues/48847)) [@&#8203;mansourcodes](https://github.com/mansourcodes)
- Remove broken learning resource links ([#&#8203;48598](https://github.com/mui/material-ui/issues/48598)) [@&#8203;morning-verlu](https://github.com/morning-verlu)
- Update the 9.2.0 changelog ([#&#8203;48763](https://github.com/mui/material-ui/issues/48763)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[autocomplete] Clarify how to render custom start and end adornments ([#&#8203;48883](https://github.com/mui/material-ui/issues/48883)) [@&#8203;DebadityaHait](https://github.com/DebadityaHait)
- \[drawer] Clarify clipped AppBar spacing ([#&#8203;48887](https://github.com/mui/material-ui/issues/48887)) [@&#8203;rushijagani-dev](https://github.com/rushijagani-dev)
- \[menu] Fix stale `selected` prop reference in Selected menu section ([#&#8203;48879](https://github.com/mui/material-ui/issues/48879)) [@&#8203;LukasTy](https://github.com/LukasTy)
- \[skeleton] Document preserving typography sizing with custom border radius ([#&#8203;48596](https://github.com/mui/material-ui/issues/48596)) [@&#8203;meaqua9420](https://github.com/meaqua9420)

##### Core

- \[blog] Fix caret annotation broken by Prettier wrapping ([#&#8203;48884](https://github.com/mui/material-ui/issues/48884)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[code-infra] Automate team sync on about page ([#&#8203;48794](https://github.com/mui/material-ui/issues/48794)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[code-infra] Bump [@&#8203;mui/internal-code-infra](https://github.com/mui/internal-code-infra) to 0.0.4-canary.101 ([#&#8203;48878](https://github.com/mui/material-ui/issues/48878)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Fix Dependabot alerts ([#&#8203;48756](https://github.com/mui/material-ui/issues/48756)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Fix team sync MR creation ([#&#8203;48911](https://github.com/mui/material-ui/issues/48911)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[code-infra] Pin node version in publish CI ([#&#8203;48799](https://github.com/mui/material-ui/issues/48799)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[core-docs] Tighten service worker host check ([#&#8203;48581](https://github.com/mui/material-ui/issues/48581)) [@&#8203;Janpot](https://github.com/Janpot)
- \[docs-infra] Change branch name to the allowed one ([#&#8203;48910](https://github.com/mui/material-ui/issues/48910)) [@&#8203;brijeshb42](https://github.com/brijeshb42)

All contributors of this release in alphabetical order: [@&#8203;bernardobelchior](https://github.com/bernardobelchior), [@&#8203;brijeshb42](https://github.com/brijeshb42), [@&#8203;DebadityaHait](https://github.com/DebadityaHait), [@&#8203;Janpot](https://github.com/Janpot), [@&#8203;Juan-C-Ceballos](https://github.com/Juan-C-Ceballos), [@&#8203;kalayciburak](https://github.com/kalayciburak), [@&#8203;LukasTy](https://github.com/LukasTy), [@&#8203;manbearwiz](https://github.com/manbearwiz), [@&#8203;mansourcodes](https://github.com/mansourcodes), [@&#8203;meaqua9420](https://github.com/meaqua9420), [@&#8203;morning-verlu](https://github.com/morning-verlu), [@&#8203;oliviertassinari](https://github.com/oliviertassinari), [@&#8203;rushijagani-dev](https://github.com/rushijagani-dev), [@&#8203;silviuaavram](https://github.com/silviuaavram), [@&#8203;siriwatknp](https://github.com/siriwatknp), [@&#8203;SR0725](https://github.com/SR0725), [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli), [@&#8203;ZhouYinLong-lab](https://github.com/ZhouYinLong-lab)

### [`v9.2.0`](https://github.com/mui/material-ui/blob/HEAD/CHANGELOG.md#920)

[Compare Source](https://github.com/mui/material-ui/compare/v9.1.1...v9.2.0)

<!-- generated comparing v9.1.2..master -->

*Jul 3, 2026*

A big thanks to the 9 contributors who made this release possible.

- ⚙️ Add support for [`data-*` attributes on `slotProps`](https://mui.com/material-ui/guides/typescript/#allowing-data-attributes-on-slotprops).

##### `@mui/material@9.2.0`

- \[l10n] Add missing MuiPagination localization to zh-CN locale ([#&#8203;48741](https://github.com/mui/material-ui/issues/48741)) [@&#8203;greymoth-jp](https://github.com/greymoth-jp)
- \[select] Guard display ref during mouse down ([#&#8203;48744](https://github.com/mui/material-ui/issues/48744)) [@&#8203;michelengelen](https://github.com/michelengelen)

##### `@mui/utils@9.2.0`

- \[utils] Add opt-in `DataAttributesOverrides` augmentation for slot props ([#&#8203;48554](https://github.com/mui/material-ui/issues/48554)) [@&#8203;LukasTy](https://github.com/LukasTy)

##### Docs

- \[docs] Improve Icon Dialog responsiveness on small screens ([#&#8203;48639](https://github.com/mui/material-ui/issues/48639)) [@&#8203;Prakash1185](https://github.com/Prakash1185)
- \[docs] Fix invalid UTF-8 in skill references ([#&#8203;48739](https://github.com/mui/material-ui/issues/48739)) [@&#8203;mturac](https://github.com/mturac)

##### Core

- \[code-infra] Resolve Renovate dashboard warnings ([#&#8203;48700](https://github.com/mui/material-ui/issues/48700)) [@&#8203;Sushantplive](https://github.com/Sushantplive)
- \[code-infra] Validate npm publishing through dry run ([#&#8203;48691](https://github.com/mui/material-ui/issues/48691)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[code-infra] Run prettier after renovate update ([#&#8203;48754](https://github.com/mui/material-ui/issues/48754)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Fix 'A11y results committed?' check on react-pinned nightly jobs ([#&#8203;48740](https://github.com/mui/material-ui/issues/48740)) [@&#8203;Janpot](https://github.com/Janpot)
- \[core] Remove leftover Joy UI references ([#&#8203;48719](https://github.com/mui/material-ui/issues/48719)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[code-infra] Bump react-router to 7.15.1 ([#&#8203;48725](https://github.com/mui/material-ui/issues/48725)) [@&#8203;Janpot](https://github.com/Janpot)
- \[docs-infra] Drive docs analytics IDs via ANALYTICS\_ENV ([#&#8203;48694](https://github.com/mui/material-ui/issues/48694)) [@&#8203;Janpot](https://github.com/Janpot)
- \[docs-infra] Pre-render API page descriptions ([#&#8203;48693](https://github.com/mui/material-ui/issues/48693)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[code-infra]\[icons-material] Build lib/package.json with code-infra --no-expand ([#&#8203;48689](https://github.com/mui/material-ui/issues/48689)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Fix react\@&#8203;18/next nightly workflow ([#&#8203;48635](https://github.com/mui/material-ui/issues/48635)) [@&#8203;Janpot](https://github.com/Janpot)

All contributors of this release in alphabetical order: [@&#8203;brijeshb42](https://github.com/brijeshb42), [@&#8203;greymoth-jp](https://github.com/greymoth-jp), [@&#8203;Janpot](https://github.com/Janpot), [@&#8203;LukasTy](https://github.com/LukasTy), [@&#8203;michelengelen](https://github.com/michelengelen), [@&#8203;mturac](https://github.com/mturac), [@&#8203;Prakash1185](https://github.com/Prakash1185), [@&#8203;siriwatknp](https://github.com/siriwatknp), [@&#8203;Sushantplive](https://github.com/Sushantplive)

### [`v9.1.1`](https://github.com/mui/material-ui/blob/HEAD/CHANGELOG.md#911)

[Compare Source](https://github.com/mui/material-ui/compare/v9.1.0...v9.1.1)

<!-- generated comparing v9.1.0..master -->

*Jun 11, 2026*

A big thanks to the 9 contributors who made this release possible.

##### `@mui/material@9.1.1`

- \[Autocomplete] Update fullWidth prop documentation ([#&#8203;48626](https://github.com/mui/material-ui/issues/48626)) [@&#8203;vipin8797](https://github.com/vipin8797)
- \[ButtonBase] Fix focus ripple lingering after blur ([#&#8203;48650](https://github.com/mui/material-ui/issues/48650)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[InitColorSchemeScript] Server-render in tests for React 19.3 ([#&#8203;48604](https://github.com/mui/material-ui/issues/48604)) [@&#8203;Janpot](https://github.com/Janpot)
- \[Transition] Mount child in same commit when opening from unmounted ([#&#8203;48649](https://github.com/mui/material-ui/issues/48649)) [@&#8203;siriwatknp](https://github.com/siriwatknp)

##### `@mui/styled-engine@9.1.1`

- \[styled-engine] Prevent enableCssLayer styles from being overridden by unlayered styles ([#&#8203;48603](https://github.com/mui/material-ui/issues/48603)) [@&#8203;Janpot](https://github.com/Janpot)

##### Docs

- Send SOURCE to Brevo on newsletter subscribe ([#&#8203;48633](https://github.com/mui/material-ui/issues/48633)) [@&#8203;aemartos](https://github.com/aemartos)
- fix TypeScript heading capitalization ([#&#8203;48619](https://github.com/mui/material-ui/issues/48619)) [@&#8203;ifer47](https://github.com/ifer47)
- Remove outdated security section ([#&#8203;48628](https://github.com/mui/material-ui/issues/48628)) [@&#8203;oliviertassinari](https://github.com/oliviertassinari)
- \[legal] Update EULA links on website ([#&#8203;48642](https://github.com/mui/material-ui/issues/48642)) [@&#8203;rluzists1](https://github.com/rluzists1)

##### Core

- Update dependencies to resolve Dependabot security alerts ([#&#8203;48641](https://github.com/mui/material-ui/issues/48641)) [@&#8203;Janpot](https://github.com/Janpot)
- \[core-docs] Pin StackBlitz demo vite to v7 and plugin-react to v5 ([#&#8203;48643](https://github.com/mui/material-ui/issues/48643)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Port codebase to use tsgo ([#&#8203;48616](https://github.com/mui/material-ui/issues/48616)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Fix immutable cache headers for /\_next/static assets ([#&#8203;48655](https://github.com/mui/material-ui/issues/48655)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Run link checker during docs build instead of as separate CI step ([#&#8203;48634](https://github.com/mui/material-ui/issues/48634)) [@&#8203;Janpot](https://github.com/Janpot)
- \[docs-infra] Support turbopack for docs ([#&#8203;48569](https://github.com/mui/material-ui/issues/48569)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[test] Cover docs landing-page composites with Argos ([#&#8203;48589](https://github.com/mui/material-ui/issues/48589)) [@&#8203;LukasTy](https://github.com/LukasTy)

All contributors of this release in alphabetical order: [@&#8203;aemartos](https://github.com/aemartos), [@&#8203;brijeshb42](https://github.com/brijeshb42), [@&#8203;ifer47](https://github.com/ifer47), [@&#8203;Janpot](https://github.com/Janpot), [@&#8203;LukasTy](https://github.com/LukasTy), [@&#8203;oliviertassinari](https://github.com/oliviertassinari), [@&#8203;rluzists1](https://github.com/rluzists1), [@&#8203;siriwatknp](https://github.com/siriwatknp), [@&#8203;vipin8797](https://github.com/vipin8797)

### [`v9.1.0`](https://github.com/mui/material-ui/blob/HEAD/CHANGELOG.md#910)

[Compare Source](https://github.com/mui/material-ui/compare/v9.0.1...v9.1.0)

<!-- generated comparing v9.0.1..master -->

*Jun 8, 2026*

A big thanks to the 15 contributors who made this release possible. Here are some highlights ✨:

- ⚙️ Support for the [prefers-reduced-motion](https://mui.com/material-ui/transitions/#reduced-motion) setting.
- ♿️ Improved support for Windows High Contrast mode with the [enhanceHighContrast](https://mui.com/material-ui/customization/palette/#windows-high-contrast-mode) theme wrapper.

##### `@mui/material@9.1.0`

- \[autocomplete] Enable clearing highlight when mouse leaves popup ([#&#8203;48354](https://github.com/mui/material-ui/issues/48354)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[autocomplete] Fix `freeSolo` controlled values cleared by initial `null` ([#&#8203;48611](https://github.com/mui/material-ui/issues/48611)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[autocomplete] Fix item removal when it receives focus from VoiceOver before using Backspace ([#&#8203;48572](https://github.com/mui/material-ui/issues/48572)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[autocomplete] Fix `resetHighlightOnMouseLeave` JSdoc ([#&#8203;48536](https://github.com/mui/material-ui/issues/48536)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[autocomplete] Guard against null inputRef during unmount ([#&#8203;48617](https://github.com/mui/material-ui/issues/48617)) [@&#8203;noam3127](https://github.com/noam3127)
- \[badge] Add `aria-hidden` to badge content and polish docs demos ([#&#8203;48471](https://github.com/mui/material-ui/issues/48471)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[badge] Use inline CSS variables for anchorOrigin/overlap positioning ([#&#8203;48549](https://github.com/mui/material-ui/issues/48549)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[button] Fix customized flex gap styles ([#&#8203;48542](https://github.com/mui/material-ui/issues/48542)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[dialog] Fix unwanted `DialogPaper` focus ring ([#&#8203;48535](https://github.com/mui/material-ui/issues/48535)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[focus trap] Fix incorrect tab order when `tabIndex >= 1` ([#&#8203;48546](https://github.com/mui/material-ui/issues/48546)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[progress] Show runtime errors only once ([#&#8203;48591](https://github.com/mui/material-ui/issues/48591)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[select] Allow spacebar to select elements ([#&#8203;48615](https://github.com/mui/material-ui/issues/48615)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[select] Support typeahead when closed ([#&#8203;48563](https://github.com/mui/material-ui/issues/48563)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[step button] Choose higher contrast ripple color for dark mode focus ([#&#8203;48612](https://github.com/mui/material-ui/issues/48612)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[stepper] Include StepConnector inside Step element ([#&#8203;48492](https://github.com/mui/material-ui/issues/48492)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[stepper] Proper support for vertical alternativeLabel ([#&#8203;48485](https://github.com/mui/material-ui/issues/48485)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[tabs] Fix React 18 roving tabindex and dedupe invalid-value warning ([#&#8203;48605](https://github.com/mui/material-ui/issues/48605)) [@&#8203;Janpot](https://github.com/Janpot)
- \[theme] Add HighContrast theme enhancer ([#&#8203;48319](https://github.com/mui/material-ui/issues/48319)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[timeline item] Fix extra ::before spacing when TimelineOppositeContent is present ([#&#8203;46663](https://github.com/mui/material-ui/issues/46663)) [@&#8203;tyalau](https://github.com/tyalau)
- \[tooltip] Prevent stuck-open tooltip when child becomes disabled ([#&#8203;48606](https://github.com/mui/material-ui/issues/48606)) [@&#8203;Janpot](https://github.com/Janpot)
- \[transitions] Custom `Transition` component ([#&#8203;48325](https://github.com/mui/material-ui/issues/48325)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[transitions] Support `prefers-reduced-motion` ([#&#8203;48357](https://github.com/mui/material-ui/issues/48357)) [@&#8203;mj12albert](https://github.com/mj12albert)

##### `@mui/utils@9.1.0`

- \[utils] Prevent prototype pollution in fastDeepAssign ([#&#8203;48580](https://github.com/mui/material-ui/issues/48580)) [@&#8203;Janpot](https://github.com/Janpot)

##### Docs

- \[docs] Add function `slotProps` documentation ([#&#8203;48574](https://github.com/mui/material-ui/issues/48574)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[docs] Clarify styled-components version compatibility ([#&#8203;48533](https://github.com/mui/material-ui/issues/48533)) [@&#8203;nightt5879](https://github.com/nightt5879)
- \[docs] Fix broken URLs ([#&#8203;48520](https://github.com/mui/material-ui/issues/48520)) [@&#8203;oliviertassinari](https://github.com/oliviertassinari)
- \[docs] Fix invalid JSON in Zed MCP setup example ([#&#8203;48490](https://github.com/mui/material-ui/issues/48490)) [@&#8203;pavan-sh](https://github.com/pavan-sh)
- \[docs] Mention release version for enhanceHighContrast ([#&#8203;48609](https://github.com/mui/material-ui/issues/48609)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[docs] Remove outdated MUI X v8 notification ([#&#8203;48600](https://github.com/mui/material-ui/issues/48600)) [@&#8203;cherniavskii](https://github.com/cherniavskii)
- \[docs] Remove redundant enhanceHighContrast information ([#&#8203;48632](https://github.com/mui/material-ui/issues/48632)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[docs-infra] Decrease loaded bundle size on docs ([#&#8203;48584](https://github.com/mui/material-ui/issues/48584)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Drop multi-locale plumbing from API pages ([#&#8203;48370](https://github.com/mui/material-ui/issues/48370)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Fix Cookie banner heading ([#&#8203;48529](https://github.com/mui/material-ui/issues/48529)) [@&#8203;oliviertassinari](https://github.com/oliviertassinari)
- \[docs-infra] Infinitely cache all static assets ([#&#8203;48627](https://github.com/mui/material-ui/issues/48627)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Remove outdated noSEOadvantage entries ([#&#8203;48527](https://github.com/mui/material-ui/issues/48527)) [@&#8203;oliviertassinari](https://github.com/oliviertassinari)
- \[docs-infra] Restore build-only invariant throws via `NEXT_RUNTIME` guard ([#&#8203;48475](https://github.com/mui/material-ui/issues/48475)) [@&#8203;Janpot](https://github.com/Janpot)
- \[docs-infra] Test HTML validation in broken links checker ([#&#8203;48088](https://github.com/mui/material-ui/issues/48088)) [@&#8203;Janpot](https://github.com/Janpot)
- \[docs]\[icons] Fix Font Awesome Chip demo in dark mode ([#&#8203;48576](https://github.com/mui/material-ui/issues/48576)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[docs]\[icons] Remove redundant font awesome demo ([#&#8203;48493](https://github.com/mui/material-ui/issues/48493)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[docs]\[modal] Add nested modal guidance ([#&#8203;46507](https://github.com/mui/material-ui/issues/46507)) [@&#8203;JakeSaterlay](https://github.com/JakeSaterlay)
- \[docs]\[stepper] Fix focus management in examples ([#&#8203;48494](https://github.com/mui/material-ui/issues/48494)) [@&#8203;silviuaavram](https://github.com/silviuaavram)

##### Core

- Eslint markdown ([#&#8203;48371](https://github.com/mui/material-ui/issues/48371)) [@&#8203;Janpot](https://github.com/Janpot)
- \[agents] Fix some docs links ([#&#8203;48561](https://github.com/mui/material-ui/issues/48561)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[blog] Copy editing improvement on v9 announcement blog posts ([#&#8203;48543](https://github.com/mui/material-ui/issues/48543)) [@&#8203;joserodolfofreitas](https://github.com/joserodolfofreitas)
- \[code-infra] Cleanup unused jss packages ([#&#8203;48590](https://github.com/mui/material-ui/issues/48590)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[code-infra] Collapse canary workflows into nightly and nightly-cron ([#&#8203;48556](https://github.com/mui/material-ui/issues/48556)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Convert [@&#8203;mui/private-theming](https://github.com/mui/private-theming) to TypeScript ([#&#8203;48565](https://github.com/mui/material-ui/issues/48565)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Convert [@&#8203;mui/styled-engine](https://github.com/mui/styled-engine) to TypeScript ([#&#8203;48544](https://github.com/mui/material-ui/issues/48544)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Convert [@&#8203;mui/styled-engine-sc](https://github.com/mui/styled-engine-sc) to TypeScript ([#&#8203;48577](https://github.com/mui/material-ui/issues/48577)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Fix duplicate resource\_class in test\_regressions CI job ([#&#8203;48601](https://github.com/mui/material-ui/issues/48601)) [@&#8203;LukasTy](https://github.com/LukasTy)
- \[code-infra] Make [@&#8203;mui/internal-docs-utils](https://github.com/mui/internal-docs-utils) compatible with TypeScript 6 ([#&#8203;48594](https://github.com/mui/material-ui/issues/48594)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Migrate CircleCI jobs to Gen2 resource classes ([#&#8203;48593](https://github.com/mui/material-ui/issues/48593)) [@&#8203;LukasTy](https://github.com/LukasTy)
- \[code-infra] Parallelize visual regression screenshots ([#&#8203;48557](https://github.com/mui/material-ui/issues/48557)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Run nightly-cron on v7.x ([#&#8203;48579](https://github.com/mui/material-ui/issues/48579)) [@&#8203;Janpot](https://github.com/Janpot)
- \[core] Fix typescript\@&#8203;next typecheck ([#&#8203;48587](https://github.com/mui/material-ui/issues/48587)) [@&#8203;Janpot](https://github.com/Janpot)
- \[pnpm] Add security settings to pnpm-workspace.yaml ([#&#8203;48582](https://github.com/mui/material-ui/issues/48582)) [@&#8203;Janpot](https://github.com/Janpot)
- \[styled-engine-sc] Fix compatibility with Vite and Vitest ([#&#8203;48558](https://github.com/mui/material-ui/issues/48558)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[test] Add axe-core tests for mui-material ([#&#8203;48341](https://github.com/mui/material-ui/issues/48341)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[test] Configure Tailwind CSS in the visual-regression app ([#&#8203;48575](https://github.com/mui/material-ui/issues/48575)) [@&#8203;Janpot](https://github.com/Janpot)

All contributors of this release in alphabetical order: [@&#8203;brijeshb42](https://github.com/brijeshb42), [@&#8203;cherniavskii](https://github.com/cherniavskii), [@&#8203;JakeSaterlay](https://github.com/JakeSaterlay), [@&#8203;Janpot](https://github.com/Janpot), [@&#8203;joserodolfofreitas](https://github.com/joserodolfofreitas), [@&#8203;LukasTy](https://github.com/LukasTy), [@&#8203;mj12albert](https://github.com/mj12albert), [@&#8203;nightt5879](https://github.com/nightt5879), [@&#8203;noam3127](https://github.com/noam3127), [@&#8203;oliviertassinari](https://github.com/oliviertassinari), [@&#8203;pavan-sh](https://github.com/pavan-sh), [@&#8203;silviuaavram](https://github.com/silviuaavram), [@&#8203;siriwatknp](https://github.com/siriwatknp), [@&#8203;tyalau](https://github.com/tyalau), [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)

### [`v9.0.1`](https://github.com/mui/material-ui/blob/HEAD/CHANGELOG.md#901)

[Compare Source](https://github.com/mui/material-ui/compare/v9.0.0...v9.0.1)

<!-- generated comparing v9.0.0..master -->

*May 6, 2026*

A big thanks to the 25 contributors who made this release possible.

##### `@mui/material@9.0.1`

- \[accessibility] HighContrast mode on Avatar, Badge, Slider and Switch ([#&#8203;48320](https://github.com/mui/material-ui/issues/48320)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[autocomplete] Fix highlight sync and scroll preservation ([#&#8203;48322](https://github.com/mui/material-ui/issues/48322)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[autocomplete] Fix input value and clear ([#&#8203;48263](https://github.com/mui/material-ui/issues/48263)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[autocomplete] Fix iOS group scrollbar overflow ([#&#8203;48400](https://github.com/mui/material-ui/issues/48400)) [@&#8203;oliviertassinari](https://github.com/oliviertassinari)
- \[autocomplete] Fix popper rendering issues ([#&#8203;48327](https://github.com/mui/material-ui/issues/48327)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[autocomplete] Improve highlight tracking and selection state ([#&#8203;48219](https://github.com/mui/material-ui/issues/48219)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[button] Fix `startIcon` alignment ([#&#8203;48332](https://github.com/mui/material-ui/issues/48332)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[button]\[button base] Document `type` attribute ([#&#8203;48146](https://github.com/mui/material-ui/issues/48146)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[button]\[fab]\[menu item]\[list item button] Remove duplicated className entries ([#&#8203;48213](https://github.com/mui/material-ui/issues/48213)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[checkbox] Set `aria-checked=mixed` when indeterminate ([#&#8203;48147](https://github.com/mui/material-ui/issues/48147)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[circularprogress]\[linearprogress] Improve accessibility ([#&#8203;48172](https://github.com/mui/material-ui/issues/48172)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[dialog]\[drawer]\[focus trap] Fix initial focus target ([#&#8203;48280](https://github.com/mui/material-ui/issues/48280)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[drawer] Fix swipe close flicker ([#&#8203;48372](https://github.com/mui/material-ui/issues/48372)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[drawer] Fix transition jump ([#&#8203;48308](https://github.com/mui/material-ui/issues/48308)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[focus trap] Remove IE 11-specific focus safety check from FocusTrap cleanup ([#&#8203;48368](https://github.com/mui/material-ui/issues/48368)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[form controls] Add internal `useFormControlState` hook ([#&#8203;48344](https://github.com/mui/material-ui/issues/48344)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[icon button] Remove unused color palette mapping in styles ([#&#8203;48353](https://github.com/mui/material-ui/issues/48353)) [@&#8203;sai6855](https://github.com/sai6855)
- \[icons] Revert to using wildcard export paths ([#&#8203;48381](https://github.com/mui/material-ui/issues/48381)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[input] Fix layout shift with display: flex ([#&#8203;43839](https://github.com/mui/material-ui/issues/43839)) [@&#8203;oliviertassinari](https://github.com/oliviertassinari)
- \[input] Prevent `notched` prop leaking into DOM ([#&#8203;48281](https://github.com/mui/material-ui/issues/48281)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[input base] Place aria-label on the input element ([#&#8203;48283](https://github.com/mui/material-ui/issues/48283)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[inputs] Fix autofocus in SSR environment ([#&#8203;48290](https://github.com/mui/material-ui/issues/48290)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[List] Fix sticky subheader overlapping iOS scrollbar ([#&#8203;48375](https://github.com/mui/material-ui/issues/48375)) [@&#8203;sandeshdamkondwar](https://github.com/sandeshdamkondwar)
- \[popper] Persist positioning styles when popperOptions changes reference ([#&#8203;48121](https://github.com/mui/material-ui/issues/48121)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[select] Stop using combobox element for labeling ([#&#8203;48251](https://github.com/mui/material-ui/issues/48251)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[select] Support single-pointer-cycle selection and pointer cancellation ([#&#8203;48328](https://github.com/mui/material-ui/issues/48328)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[switch] Fix incorrect `role` with `slotProps.input` ([#&#8203;48469](https://github.com/mui/material-ui/issues/48469)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[tabs] Fix scrollable tabs blocking pointer events ([#&#8203;48166](https://github.com/mui/material-ui/issues/48166)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[textfield] Fix autofill styles always in dark mode when CSS variables is used ([#&#8203;48244](https://github.com/mui/material-ui/issues/48244)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[tooltip] Simplify RTL styles using CSS logical properties ([#&#8203;48351](https://github.com/mui/material-ui/issues/48351)) [@&#8203;sai6855](https://github.com/sai6855)
- \[tooltip] Close Tooltip when its child becomes disabled ([#&#8203;44507](https://github.com/mui/material-ui/issues/44507)) [@&#8203;chudesno](https://github.com/chudesno)
- \[typography] Fix `h4` variant when using `responsiveFontSizes()` ([#&#8203;48314](https://github.com/mui/material-ui/issues/48314)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[useMediaQuery] Fix crash in Firefox extension ([#&#8203;45196](https://github.com/mui/material-ui/issues/45196)) [@&#8203;Mr-Quin](https://github.com/Mr-Quin)

##### `@mui/system@9.0.1`

- \[system] Fix theme mutation when using responsive typography shorthand in sx ([#&#8203;48266](https://github.com/mui/material-ui/issues/48266)) [@&#8203;tomups](https://github.com/tomups)

##### `@mui/codemod@9.0.1`

- \[codemod] Add --jsx option to `v9.0.0/system-props` codemod ([#&#8203;48315](https://github.com/mui/material-ui/issues/48315)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[codemod] Add packageName support to the v9 system props codemod ([#&#8203;48253](https://github.com/mui/material-ui/issues/48253)) [@&#8203;franco-dias](https://github.com/franco-dias)

##### `@mui/utils@9.0.1`

- \[utils] Add shadow dom utils ([#&#8203;48256](https://github.com/mui/material-ui/issues/48256)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[utils] Fix `resolveProps` receiving empty string className ([#&#8203;48289](https://github.com/mui/material-ui/issues/48289)) [@&#8203;SAY-5](https://github.com/SAY-5)
- \[utils] Remove unnecessary `excludeKeys` from `extractEventHandlers` ([#&#8203;48481](https://github.com/mui/material-ui/issues/48481)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)

##### Docs

- \[docs]\[autocomplete] Add demo with Tanstack Query `useInfiniteQuery` ([#&#8203;48356](https://github.com/mui/material-ui/issues/48356)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[docs] Add agent skills for styling, theming, Next.js, and Tailwind CSS integrations ([#&#8203;48187](https://github.com/mui/material-ui/issues/48187)) [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje)
- \[docs] Cleanup `@mui/base` ([#&#8203;48278](https://github.com/mui/material-ui/issues/48278)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[docs] Fix create-playground script ([#&#8203;48380](https://github.com/mui/material-ui/issues/48380)) [@&#8203;imazizbohra](https://github.com/imazizbohra)
- \[docs] Fix date range calendar demo after MUI X v9 update ([#&#8203;48262](https://github.com/mui/material-ui/issues/48262)) [@&#8203;LukasTy](https://github.com/LukasTy)
- \[docs] Fix icon search modal ([#&#8203;48255](https://github.com/mui/material-ui/issues/48255)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[docs] Fix Material UI and MUI system "Upgrade to v9" docs ([#&#8203;48245](https://github.com/mui/material-ui/issues/48245)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[docs] Fix Popover JSdoc ([#&#8203;48310](https://github.com/mui/material-ui/issues/48310)) [@&#8203;nitzan-treg](https://github.com/nitzan-treg)
- \[docs] Fix RTL toggle highlight in docs settings drawer ([#&#8203;48476](https://github.com/mui/material-ui/issues/48476)) [@&#8203;sai6855](https://github.com/sai6855)
- \[docs] Fix typos ([#&#8203;48155](https://github.com/mui/material-ui/issues/48155)) [@&#8203;ayushshukla1807](https://github.com/ayushshukla1807)
- \[docs] Fix typos ([#&#8203;48270](https://github.com/mui/material-ui/issues/48270)) [@&#8203;pavan-sh](https://github.com/pavan-sh)
- \[docs] Fix versions page ([#&#8203;48261](https://github.com/mui/material-ui/issues/48261)) [@&#8203;mnajdova](https://github.com/mnajdova)
- \[docs] Fix vision grammar ([#&#8203;48477](https://github.com/mui/material-ui/issues/48477)) [@&#8203;pavan-sh](https://github.com/pavan-sh)
- \[docs] Improve accessibility for select examples ([#&#8203;48250](https://github.com/mui/material-ui/issues/48250)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[docs] Improve CSP guide with required directives ([#&#8203;48258](https://github.com/mui/material-ui/issues/48258)) [@&#8203;Janpot](https://github.com/Janpot)
- \[docs] Link to agent skills in relevant docs ([#&#8203;48387](https://github.com/mui/material-ui/issues/48387)) [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje)
- \[docs] Make NumberField described by helper text ([#&#8203;48257](https://github.com/mui/material-ui/issues/48257)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[docs] Remove esm.sh references and endorsement ([#&#8203;44649](https://github.com/mui/material-ui/issues/44649)) ([#&#8203;48330](https://github.com/mui/material-ui/issues/48330)) [@&#8203;starboyvarun](https://github.com/starboyvarun)
- \[docs] Remove generated CSS utility component doc ([#&#8203;48383](https://github.com/mui/material-ui/issues/48383)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[docs] Remove incorrect message from experiments page and hide `/experiments` from crawlers ([#&#8203;48297](https://github.com/mui/material-ui/issues/48297)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[docs] Remove outdated references of .ttf and .woff ([#&#8203;48399](https://github.com/mui/material-ui/issues/48399)) [@&#8203;oliviertassinari](https://github.com/oliviertassinari)
- \[docs] Restore wider maxWidth for `disableToc` pages ([#&#8203;48260](https://github.com/mui/material-ui/issues/48260)) [@&#8203;LukasTy](https://github.com/LukasTy)
- \[docs] Show v9 announcement banner ([#&#8203;48242](https://github.com/mui/material-ui/issues/48242)) [@&#8203;mnajdova](https://github.com/mnajdova)
- \[docs] Sync team members from frontend-public endpoint ([#&#8203;48273](https://github.com/mui/material-ui/issues/48273)) [@&#8203;Janpot](https://github.com/Janpot)
- \[docs] Update AGENTS.md testing section ([#&#8203;48392](https://github.com/mui/material-ui/issues/48392)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[docs] Update e2e test README and test error message ([#&#8203;48285](https://github.com/mui/material-ui/issues/48285)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[docs] Update menu examples to always have aria-expanded ([#&#8203;48211](https://github.com/mui/material-ui/issues/48211)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[docs] Update MUI Treasury links ([#&#8203;47760](https://github.com/mui/material-ui/issues/47760)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[docs] Update MUI X dependencies to v9.0.0 ([#&#8203;48231](https://github.com/mui/material-ui/issues/48231)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[docs] Update MUI X roadmap section ([#&#8203;48316](https://github.com/mui/material-ui/issues/48316)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[docs] Update WCAG links and version from 2.1 to 2.2 ([#&#8203;48379](https://github.com/mui/material-ui/issues/48379)) [@&#8203;mj12albert](https://github.com/mj12albert)
- \[docs] Use `React.useId()` for demo IDs ([#&#8203;48300](https://github.com/mui/material-ui/issues/48300)) [@&#8203;Janpot](https://github.com/Janpot)

##### Core

- \[blog] Introducing Material UI and MUI X v9 ([#&#8203;48157](https://github.com/mui/material-ui/issues/48157)) [@&#8203;joserodolfofreitas](https://github.com/joserodolfofreitas)
- \[code-infra] bundle size check internal core docs ([#&#8203;48390](https://github.com/mui/material-ui/issues/48390)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Deduplicate vale script ([#&#8203;48385](https://github.com/mui/material-ui/issues/48385)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[code-infra] Fix type shadowing ([#&#8203;48389](https://github.com/mui/material-ui/issues/48389)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Migrate to vite from webpack for e2e tests ([#&#8203;48248](https://github.com/mui/material-ui/issues/48248)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[code-infra] Remove a few ts-ignore comments ([#&#8203;43265](https://github.com/mui/material-ui/issues/43265)) [@&#8203;Janpot](https://github.com/Janpot)
- \[code-infra] Remove no longer needed `eslint-import-resolver-webpack` package ([#&#8203;48207](https://github.com/mui/material-ui/issues/48207)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[code-infra] Remove references to [@&#8203;mui/base](https://github.com/mui/base) and [@&#8203;mui/joy](https://github.com/mui/joy) ([#&#8203;48358](https://github.com/mui/material-ui/issues/48358)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[code-infra] Use vale rules from code-infra package ([#&#8203;48173](https://github.com/mui/material-ui/issues/48173)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[core] Remove next.mui.com links ([#&#8203;48240](https://github.com/mui/material-ui/issues/48240)) [@&#8203;mnajdova](https://github.com/mnajdova)
- \[core-docs] Use type-only imports for type-only references ([#&#8203;48386](https://github.com/mui/material-ui/issues/48386)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[docs-infra] Add x-chat to MuiProductId type and product switcher ([#&#8203;48209](https://github.com/mui/material-ui/issues/48209)) [@&#8203;hasdfa](https://github.com/hasdfa)
- \[docs-infra] Fix duplicate JSDoc in proptypes generation ([#&#8203;48304](https://github.com/mui/material-ui/issues/48304)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Fix duplicate JSDoc in proptypes generation for merged declarations ([#&#8203;48296](https://github.com/mui/material-ui/issues/48296)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Fix import of cjs react-simple-code-editor in esm ([#&#8203;48349](https://github.com/mui/material-ui/issues/48349)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Fix tab index on Base UI tab ([#&#8203;48345](https://github.com/mui/material-ui/issues/48345)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Migrate docs app container/frame components ([#&#8203;48182](https://github.com/mui/material-ui/issues/48182)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Migrate MarkdownDocs component to docs package ([#&#8203;48227](https://github.com/mui/material-ui/issues/48227)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Re-apply changes from previous revert ([#&#8203;48243](https://github.com/mui/material-ui/issues/48243)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Remove infra around the i18n setup ([#&#8203;48360](https://github.com/mui/material-ui/issues/48360)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Rename package to [@&#8203;mui/internal-api-docs-builder](https://github.com/mui/internal-api-docs-builder) ([#&#8203;48230](https://github.com/mui/material-ui/issues/48230)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Revert JSDoc in proptypes generation for merged declarations ([#&#8203;48301](https://github.com/mui/material-ui/issues/48301)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Revert Migrate docs app container/frame components ([#&#8203;48239](https://github.com/mui/material-ui/issues/48239)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[docs-infra] Revert Migrate MarkdownDocs component to docs package ([#&#8203;48238](https://github.com/mui/material-ui/issues/48238)) [@&#8203;brijeshb42](https://github.com/brijeshb42)
- \[internal] Add missing #host-reference ([#&#8203;48226](https://github.com/mui/material-ui/issues/48226)) [@&#8203;silviuaavram](https://github.com/silviuaavram)
- \[internal] Move changelog and update security page for post v9 release ([#&#8203;48298](https://github.com/mui/material-ui/issues/48298)) [@&#8203;siriwatknp](https://github.com/siriwatknp)
- \[internal] Remove outdated .woff files ([#&#8203;48398](https://github.com/mui/material-ui/issues/48398)) [@&#8203;oliviertassinari](https://github.com/oliviertassinari)
- \[test] Fix autocomplete test description ([#&#8203;48395](https://github.com/mui/material-ui/issues/48395)) [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)

All contributors of this release in alphabetical order: [@&#8203;ayushshukla1807](https://github.com/ayushshukla1807), [@&#8203;brijeshb42](https://github.com/brijeshb42), [@&#8203;chudesno](https://github.com/chudesno), [@&#8203;franco-dias](https://github.com/franco-dias), [@&#8203;hasdfa](https://github.com/hasdfa), [@&#8203;imazizbohra](https://github.com/imazizbohra), [@&#8203;Janpot](https://github.com/Janpot), [@&#8203;JCQuintas](https://github.com/JCQuintas), [@&#8203;joserodolfofreitas](https://github.com/joserodolfofreitas), [@&#8203;LukasTy](https://github.com/LukasTy), [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje), [@&#8203;mj12albert](https://github.com/mj12albert), [@&#8203;mnajdova](https://github.com/mnajdova), [@&#8203;Mr-Quin](https://github.com/Mr-Quin), [@&#8203;nitzan-treg](https://github.com/nitzan-treg), [@&#8203;oliviertassinari](https://github.com/oliviertassinari), [@&#8203;pavan-sh](https://github.com/pavan-sh), [@&#8203;sai6855](https://github.com/sai6855), [@&#8203;sandeshdamkondwar](https://github.com/sandeshdamkondwar), [@&#8203;SAY-5](https://github.com/SAY-5), [@&#8203;silviuaavram](https://github.com/silviuaavram), [@&#8203;siriwatknp](https://github.com/siriwatknp), [@&#8203;starboyvarun](https://github.com/starboyvarun), [@&#8203;tomups](https://github.com/tomups), [@&#8203;ZeeshanTamboli](https://github.com/ZeeshanTamboli)

</details>

<details>
<summary>mui/mui-x (@&#8203;mui/x-charts)</summary>

### [`v9.11.1`](https://github.com/mui/mui-x/blob/HEAD/CHANGELOG.md#9111)

[Compare Source](https://github.com/mui/mui-x/compare/v9.11.0...v9.11.1)

*Aug 6, 2026*

We'd like to extend a big thank you to the 2 contributors who made this release possible. Here are some highlights ✨:

- 🐛 Fix the empty `@mui/x-charts-vendor` package published in v9.11.0

The following team members contributed to this release:
[@&#8203;JCQuintas](https://github.com/JCQuintas), [@&#8203;rita-codes](https://github.com/rita-codes)

##### Charts

##### `@mui/x-charts@9.11.1`

- \[charts] Fix empty `@mui/x-charts-vendor` published package ([#&#8203;23310](https://github.com/mui/mui-x/issues/23310)) [@&#8203;JCQuintas](https://github.com/JCQuintas)

##### `@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")

Same changes as in `@mui/x-charts@9.11.1`.

##### `@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")

Same changes as in `@mui/x-charts-pro@9.11.1`.

##### `@mui/x-charts-vendor@9.11.1`

- \[charts] Fix empty `@mui/x-charts-vendor` published package ([#&#8203;23310](https://github.com/mui/mui-x/issues/23310)) [@&#8203;JCQuintas](https://github.com/JCQuintas)

##### Scheduler

##### `@mui/x-scheduler@9.0.0-beta.9`

- \[scheduler] Show the range validation errors on the End date and End time fields ([#&#8203;23291](https://github.com/mui/mui-x/issues/23291)) [@&#8203;rita-codes](https://github.com/rita-codes)

##### `@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")

Same changes as in `@mui/x-scheduler@9.0.0-beta.9`.

### [`v9.11.0`](https://github.com/mui/mui-x/blob/HEAD/CHANGELOG.md#9110)

[Compare Source](https://github.com/mui/mui-x/compare/v9.10.1...v9.11.0)

*Aug 6, 2026*

We'd like to extend a big thank you to the 14 contributors who made this release possible. Here are some highlights ✨:

- ✨ Add `addItems()` and `getItemSelection()` API methods to Tree View

Special thanks go out to these community members for their valuable contributions:
[@&#8203;12joan](https://github.com/12joan), [@&#8203;Anexus5919](https://github.com/Anexus5919), [@&#8203;kevincorizi-sbt](https://github.com/kevincorizi-sbt), [@&#8203;mixelburg](https://github.com/mixelburg), [@&#8203;mustafajw07](https://github.com/mustafajw07), [@&#8203;strazto](https://github.com/strazto)

The following team members contributed to this release:
[@&#8203;flaviendelangle](https://github.com/flaviendelangle), [@&#8203;hasdfa](https://github.com/hasdfa), [@&#8203;JCQuintas](https://github.com/JCQuintas), [@&#8203;LukasTy](https://github.com/LukasTy), [@&#8203;MBilalShafi](https://github.com/MBilalShafi), [@&#8203;michelengelen](https://github.com/michelengelen), [@&#8203;noraleonte](https://github.com/noraleonte), [@&#8203;rita-codes](https://github.com/rita-codes)

##### Data Grid

##### `@mui/x-data-grid@9.11.0`

- \[DataGrid] Fix `updateRows` stripping class prototypes from rows in datasource mode ([#&#8203;22288](https://github.com/mui/mui-x/issues/22288)) [@&#8203;mixelburg](https://github.com/mixelburg)
- \[DataGrid] Do not re-fetch data when an `Activity` becomes visible ([#&#8203;22603](https://github.com/mui/mui-x/issues/22603)) [@&#8203;12joan](https://github.com/12joan)
- \[DataGrid] Fix toolbar button stealing focus when a sibling's disabled state changes ([#&#8203;23204](https://github.com/mui/mui-x/issues/23204)) [@&#8203;MBilalShafi](https://github.com/MBilalShafi)

##### `@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")

Same changes as in `@mui/x-data-grid@9.11.0`.

##### `@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")

Same changes as in `@mui/x-data-grid-pro@9.11.0`.

##### Date and Time Pickers

##### `@mui/x-date-pickers@9.11.0`

- \[pickers] Fix day shift when editing dates predating timezone standardization ([#&#8203;23296](https://github.com/mui/mui-x/issues/23296)) [@&#8203;JCQuintas](https://github.com/JCQuintas)

##### `@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")

Same changes as in `@mui/x-date-pickers@9.11.0`, plus:

- \[DateRangePicker] Fix disabled filler cells showing the range highlight ([#&#8203;23293](https://github.com/mui/mui-x/issues/23293)) [@&#8203;JCQuintas](https://github.com/JCQuintas)

##### Charts

##### `@mui/x-charts@9.11.0`

- \[charts] Activate the focused item with `Enter`/`Space` ([#&#8203;23218](https://github.com/mui/mui-x/issues/23218)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Extract the axis click payload builders ([#&#8203;23215](https://github.com/mui/mui-x/issues/23215)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Fix `GestureManager` event listener leak on chart unmount ([#&#8203;23283](https://github.com/mui/mui-x/issues/23283)) [@&#8203;kevincorizi-sbt](https://github.com/kevincorizi-sbt)
- \[charts] Fix `slotProps.legend.position` and `direction` in `RadarChart` ([#&#8203;23254](https://github.com/mui/mui-x/issues/23254)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Fix axis clicks being discarded on slight pointer movement ([#&#8203;23244](https://github.com/mui/mui-x/issues/23244)) [@&#8203;noraleonte](https://github.com/noraleonte)
- \[charts] Fix image export of charts sized by their parent element ([#&#8203;23255](https://github.com/mui/mui-x/issues/23255)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Forward `experimentalFeatures` on `RadarChart` and `Heatmap` ([#&#8203;23216](https://github.com/mui/mui-x/issues/23216)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Hide focus indicator when the chart loses focus ([#&#8203;23213](https://github.com/mui/mui-x/issues/23213)) [@&#8203;JCQuintas](https://github.com/JCQuintas)

##### `@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")

Same changes as in `@mui/x-charts@9.11.0`.

##### `@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")

Same changes as in `@mui/x-charts-pro@9.11.0`, plus:

- \[charts-premium] Fix `RangeBar` type override ([#&#8203;23217](https://github.com/mui/mui-x/issues/23217)) [@&#8203;JCQuintas](https://github.com/JCQuintas)

##### Tree View

##### `@mui/x-tree-view@9.11.0`

- \[tree view] Add `addItems()` API method ([#&#8203;23159](https://github.com/mui/mui-x/issues/23159)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[tree view] Add `getItemSelection` API method ([#&#8203;23257](https://github.com/mui/mui-x/issues/23257)) [@&#8203;noraleonte](https://github.com/noraleonte)
- \[tree view] Ignore `keepExistingSelection` when `multiSelect` is `false` ([#&#8203;23242](https://github.com/mui/mui-x/issues/23242)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[tree view] Prevent duplicate ids in multi-select arrow navigation ([#&#8203;23006](https://github.com/mui/mui-x/issues/23006)) [@&#8203;Anexus5919](https://github.com/Anexus5919)

##### `@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")

Same changes as in `@mui/x-tree-view@9.11.0`, plus:

- \[tree view] Discard superseded lazy-loading responses ([#&#8203;23005](https://github.com/mui/mui-x/issues/23005)) [@&#8203;Anexus5919](https…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope: backdrop This is the name of the generic UI component, not the React module! scope: modal Changes related to the modal. scope: transitions Changes related to the transitions. type: bug It doesn't behave as expected.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Backdrop] Stuck open at 0% opacity and blocks all clicks on the page due to react-transition-group bug

2 participants