Skip to content

Commit 67cb154

Browse files
authored
Merge branch 'master' into styled-engine/dedicated-cache-key
2 parents 6852119 + 2802aba commit 67cb154

414 files changed

Lines changed: 7631 additions & 2752 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.circleci/config.yml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ jobs:
133133
git add -A && git diff --exit-code --staged
134134
test_types:
135135
<<: *default-job
136-
resource_class: medium+.gen2
136+
resource_class: xlarge.gen2
137137
steps:
138138
- checkout
139139
- install-deps
@@ -146,27 +146,19 @@ jobs:
146146
- run:
147147
name: Tests TypeScript definitions
148148
command: pnpm typescript:ci
149-
environment:
150-
NODE_OPTIONS: --max-old-space-size=3072
151149
- run:
152150
name: Test module augmentation
153151
command: pnpm typescript:module-augmentation
154152
test_types_next:
155153
<<: *default-job
156-
resource_class: medium+.gen2
154+
resource_class: xlarge.gen2
157155
steps:
158156
- checkout
159157
- install-deps:
160158
typescript-version: << parameters.typescript-version >>
161159
- run:
162160
name: Tests TypeScript definitions
163161
command: pnpm typescript:ci
164-
environment:
165-
NODE_OPTIONS: --max-old-space-size=3072
166-
- run:
167-
name: Prepare files
168-
# Enable configuration that is only valid in typescript@next
169-
command: sed -i 's|// <ts@next uncomment>||g' test/moduleResolution/tsconfig.node.json
170162
- run:
171163
name: Build declaration files
172164
command: |

.github/workflows/ci.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,6 @@ jobs:
6464
# - run: pnpm release:changelog
6565
# env:
6666
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
67-
- name: Check docs links
68-
if: ${{ matrix.os == 'ubuntu-latest' }}
69-
run: pnpm docs:link-check
7067
- name: Debug export-detail.json on when pnpm docs:build fails with EMFILE error
7168
if: failure()
7269
run: cat ./docs/.next/export-detail.json || true

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
.vscode/*
88
!.vscode/launch.json
99
!.vscode/extensions.json
10+
!.vscode/settings.json
1011
*.log
1112
/.eslintcache
1213
/.nyc_output

.vscode/extensions.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"editorconfig.editorconfig",
44
"dbaeumer.vscode-eslint",
55
"esbenp.prettier-vscode",
6-
"yoavbls.pretty-ts-errors"
6+
"yoavbls.pretty-ts-errors",
7+
"TypeScriptTeam.native-preview"
78
]
89
}

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"js/ts.experimental.useTsgo": true
3+
}

CHANGELOG.md

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,89 @@
11
# [Versions](https://mui.com/material-ui/getting-started/versions/)
22

3+
## 9.1.0
4+
5+
<!-- generated comparing v9.0.1..master -->
6+
7+
_Jun 8, 2026_
8+
9+
A big thanks to the 15 contributors who made this release possible. Here are some highlights ✨:
10+
11+
- ⚙️ Support for the [prefers-reduced-motion](https://mui.com/material-ui/transitions/#reduced-motion) setting.
12+
- ♿️ Improved support for Windows High Contrast mode with the [enhanceHighContrast](https://mui.com/material-ui/customization/palette/#windows-high-contrast-mode) theme wrapper.
13+
14+
### `@mui/material@9.1.0`
15+
16+
- [autocomplete] Enable clearing highlight when mouse leaves popup (#48354) @mj12albert
17+
- [autocomplete] Fix `freeSolo` controlled values cleared by initial `null` (#48611) @mj12albert
18+
- [autocomplete] Fix item removal when it receives focus from VoiceOver before using Backspace (#48572) @silviuaavram
19+
- [autocomplete] Fix `resetHighlightOnMouseLeave` JSdoc (#48536) @mj12albert
20+
- [autocomplete] Guard against null inputRef during unmount (#48617) @noam3127
21+
- [badge] Add `aria-hidden` to badge content and polish docs demos (#48471) @mj12albert
22+
- [badge] Use inline CSS variables for anchorOrigin/overlap positioning (#48549) @siriwatknp
23+
- [button] Fix customized flex gap styles (#48542) @mj12albert
24+
- [dialog] Fix unwanted `DialogPaper` focus ring (#48535) @mj12albert
25+
- [focus trap] Fix incorrect tab order when `tabIndex >= 1` (#48546) @mj12albert
26+
- [progress] Show runtime errors only once (#48591) @silviuaavram
27+
- [select] Allow spacebar to select elements (#48615) @silviuaavram
28+
- [select] Support typeahead when closed (#48563) @mj12albert
29+
- [step button] Choose higher contrast ripple color for dark mode focus (#48612) @silviuaavram
30+
- [stepper] Include StepConnector inside Step element (#48492) @silviuaavram
31+
- [stepper] Proper support for vertical alternativeLabel (#48485) @silviuaavram
32+
- [tabs] Fix React 18 roving tabindex and dedupe invalid-value warning (#48605) @Janpot
33+
- [theme] Add HighContrast theme enhancer (#48319) @silviuaavram
34+
- [timeline item] Fix extra ::before spacing when TimelineOppositeContent is present (#46663) @tyalau
35+
- [tooltip] Prevent stuck-open tooltip when child becomes disabled (#48606) @Janpot
36+
- [transitions] Custom `Transition` component (#48325) @mj12albert
37+
- [transitions] Support `prefers-reduced-motion` (#48357) @mj12albert
38+
39+
### `@mui/utils@9.1.0`
40+
41+
- [utils] Prevent prototype pollution in fastDeepAssign (#48580) @Janpot
42+
43+
### Docs
44+
45+
- [docs] Add function `slotProps` documentation (#48574) @mj12albert
46+
- [docs] Clarify styled-components version compatibility (#48533) @nightt5879
47+
- [docs] Fix broken URLs (#48520) @oliviertassinari
48+
- [docs] Fix invalid JSON in Zed MCP setup example (#48490) @pavan-sh
49+
- [docs] Mention release version for enhanceHighContrast (#48609) @silviuaavram
50+
- [docs] Remove outdated MUI X v8 notification (#48600) @cherniavskii
51+
- [docs] Remove redundant enhanceHighContrast information (#48632) @silviuaavram
52+
- [docs-infra] Decrease loaded bundle size on docs (#48584) @brijeshb42
53+
- [docs-infra] Drop multi-locale plumbing from API pages (#48370) @brijeshb42
54+
- [docs-infra] Fix Cookie banner heading (#48529) @oliviertassinari
55+
- [docs-infra] Infinitely cache all static assets (#48627) @brijeshb42
56+
- [docs-infra] Remove outdated noSEOadvantage entries (#48527) @oliviertassinari
57+
- [docs-infra] Restore build-only invariant throws via `NEXT_RUNTIME` guard (#48475) @Janpot
58+
- [docs-infra] Test HTML validation in broken links checker (#48088) @Janpot
59+
- [docs][icons] Fix Font Awesome Chip demo in dark mode (#48576) @siriwatknp
60+
- [docs][icons] Remove redundant font awesome demo (#48493) @ZeeshanTamboli
61+
- [docs][modal] Add nested modal guidance (#46507) @JakeSaterlay
62+
- [docs][stepper] Fix focus management in examples (#48494) @silviuaavram
63+
64+
### Core
65+
66+
- Eslint markdown (#48371) @Janpot
67+
- [agents] Fix some docs links (#48561) @silviuaavram
68+
- [blog] Copy editing improvement on v9 announcement blog posts (#48543) @joserodolfofreitas
69+
- [code-infra] Cleanup unused jss packages (#48590) @brijeshb42
70+
- [code-infra] Collapse canary workflows into nightly and nightly-cron (#48556) @Janpot
71+
- [code-infra] Convert @mui/private-theming to TypeScript (#48565) @Janpot
72+
- [code-infra] Convert @mui/styled-engine to TypeScript (#48544) @Janpot
73+
- [code-infra] Convert @mui/styled-engine-sc to TypeScript (#48577) @Janpot
74+
- [code-infra] Fix duplicate resource_class in test_regressions CI job (#48601) @LukasTy
75+
- [code-infra] Make @mui/internal-docs-utils compatible with TypeScript 6 (#48594) @Janpot
76+
- [code-infra] Migrate CircleCI jobs to Gen2 resource classes (#48593) @LukasTy
77+
- [code-infra] Parallelize visual regression screenshots (#48557) @Janpot
78+
- [code-infra] Run nightly-cron on v7.x (#48579) @Janpot
79+
- [core] Fix typescript@next typecheck (#48587) @Janpot
80+
- [pnpm] Add security settings to pnpm-workspace.yaml (#48582) @Janpot
81+
- [styled-engine-sc] Fix compatibility with Vite and Vitest (#48558) @mj12albert
82+
- [test] Add axe-core tests for mui-material (#48341) @siriwatknp
83+
- [test] Configure Tailwind CSS in the visual-regression app (#48575) @Janpot
84+
85+
All contributors of this release in alphabetical order: @brijeshb42, @cherniavskii, @JakeSaterlay, @Janpot, @joserodolfofreitas, @LukasTy, @mj12albert, @nightt5879, @noam3127, @oliviertassinari, @pavan-sh, @silviuaavram, @siriwatknp, @tyalau, @ZeeshanTamboli
86+
387
## 9.0.1
488

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

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<!-- #host-reference -->
33

44
<p align="center">
5-
<a href="https://mui.com/core/" rel="noopener" target="_blank"><img width="150" height="133" src="https://mui.com/static/logo.svg" alt="Material UI logo"></a>
5+
<a href="https://mui.com/core/" target="_blank"><img width="150" height="133" src="https://mui.com/static/logo.svg" alt="Material UI logo"></a>
66
</p>
77

88
<h1 align="center">Material UI</h1>
@@ -50,8 +50,8 @@ Use `@latest` for the latest stable release.
5050
### Diamond 💎
5151

5252
<p>
53-
<a href="https://www.doit.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank"><img height="128" width="128" src="https://mui.com/static/sponsors/doit-square.svg" alt="doit" title="Management Platform for Google Cloud and AWS" loading="lazy" /></a>
54-
<a href="https://formengine.io/lightweight-react-json-schema-form-builder-library-for-mui/?utm_source=mui&utm_medium=sponsor&utm_campaign=mui&utm_content=stop-manually&utm_term=smartway" rel="noopener sponsored" target="_blank"><img height="128" width="128" src="https://mui.com/static/sponsors/formengine-square.svg" alt="formengine" title="Build forms with MUI the smart way!" loading="lazy" /></a>
53+
<a href="https://www.doit.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="sponsored" target="_blank"><img height="128" width="128" src="https://mui.com/static/sponsors/doit-square.svg" alt="doit" title="Management Platform for Google Cloud and AWS" loading="lazy" /></a>
54+
<a href="https://formengine.io/lightweight-react-json-schema-form-builder-library-for-mui/?utm_source=mui&utm_medium=sponsor&utm_campaign=mui&utm_content=stop-manually&utm_term=smartway" rel="sponsored" target="_blank"><img height="128" width="128" src="https://mui.com/static/sponsors/formengine-square.svg" alt="formengine" title="Build forms with MUI the smart way!" loading="lazy" /></a>
5555
</p>
5656

5757
Diamond sponsors are those who have pledged $1,500/month or more to MUI.
@@ -61,26 +61,26 @@ Diamond sponsors are those who have pledged $1,500/month or more to MUI.
6161
via [Open Collective](https://opencollective.com/mui-org) or via [Patreon](https://www.patreon.com/oliviertassinari)
6262

6363
<p>
64-
<a href="https://tidelift.com/" rel="noopener sponsored" target="_blank"><img height="96" width="96" src="https://avatars.githubusercontent.com/u/30204434?s=288" alt="tidelift.com" title="Tidelift: Enterprise-ready open-source software." loading="lazy" /></a>
64+
<a href="https://tidelift.com/" rel="sponsored" target="_blank"><img height="96" width="96" src="https://avatars.githubusercontent.com/u/30204434?s=288" alt="tidelift.com" title="Tidelift: Enterprise-ready open-source software." loading="lazy" /></a>
6565
&nbsp;
66-
<a href="https://www.dialmycalls.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank"><img height="96" width="96" src="https://images.opencollective.com/dialmycalls/f5ae9ab/avatar/288.png" alt="dialmycalls.com" title="DialMyCalls: Send text messages, calls, and emails." loading="lazy" /></a>
66+
<a href="https://www.dialmycalls.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="sponsored" target="_blank"><img height="96" width="96" src="https://images.opencollective.com/dialmycalls/f5ae9ab/avatar/288.png" alt="dialmycalls.com" title="DialMyCalls: Send text messages, calls, and emails." loading="lazy" /></a>
6767
&nbsp;
6868
</p>
6969

7070
<p>
71-
<a href="https://goread.io/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank">Goread.io</a>
71+
<a href="https://goread.io/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="sponsored" target="_blank">Goread.io</a>
7272
&nbsp;
73-
<a href="https://buzzoid.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank">Buzzoid</a>
73+
<a href="https://buzzoid.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="sponsored" target="_blank">Buzzoid</a>
7474
&nbsp;
75-
<a href="https://twicsy.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank">Twicsy</a>
75+
<a href="https://twicsy.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="sponsored" target="_blank">Twicsy</a>
7676
&nbsp;
77-
<a href="https://poprey.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank">Poprey</a>
77+
<a href="https://poprey.com/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="sponsored" target="_blank">Poprey</a>
7878
&nbsp;
79-
<a href="https://www.socialwick.com/instagram/followers/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank">SocialWick</a>
79+
<a href="https://www.socialwick.com/instagram/followers/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="sponsored" target="_blank">SocialWick</a>
8080
&nbsp;
81-
<a href="https://www.follower24.de/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank">Follower24</a>
81+
<a href="https://www.follower24.de/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="sponsored" target="_blank">Follower24</a>
8282
&nbsp;
83-
<a href="https://followerfabrik.de/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="noopener sponsored" target="_blank">FollowerFabrik</a>
83+
<a href="https://followerfabrik.de/?utm_source=mui.com&utm_medium=referral&utm_content=readme" rel="sponsored" target="_blank">FollowerFabrik</a>
8484
&nbsp;
8585
</p>
8686

babel.config.mjs

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ function resolveAliasPath(relativeToBabelConf) {
2525
export default function getBabelConfig(api) {
2626
const baseConfig = getBaseConfig(api);
2727

28+
// Covers: docs prod build (NODE_ENV=production), package esm build (BABEL_ENV=stable),
29+
// package cjs build (BABEL_ENV=node). Excludes docs dev, tests, coverage.
30+
const isProductionBuild = api.env(['production', 'stable', 'node']);
31+
2832
const defaultAlias = {
2933
'@mui/material': resolveAliasPath('./packages/mui-material/src'),
3034
'@mui/internal-core-docs': resolveAliasPath('./packages-internal/core-docs/src'),
@@ -43,7 +47,7 @@ export default function getBabelConfig(api) {
4347
};
4448

4549
/** @type {babel.PluginItem[]} */
46-
const plugins = [
50+
const prodOnlyPlugins = [
4751
[
4852
'@mui/internal-babel-plugin-minify-errors',
4953
{
@@ -55,21 +59,34 @@ export default function getBabelConfig(api) {
5559
],
5660
];
5761

62+
const excludedBasePlugins = new Set([
63+
'@mui/internal-babel-plugin-display-name',
64+
// Inlining MUI_VERSION, etc only matters for shipped bundles.
65+
// Dev reads process.env at runtime without needing substitution.
66+
...(isProductionBuild ? [] : ['babel-plugin-transform-inline-environment-variables']),
67+
]);
68+
5869
const basePlugins = (baseConfig.plugins || []).filter(
5970
(/** @type {[unknown, unknown, string]} */ [, , pluginName]) =>
60-
pluginName !== '@mui/internal-babel-plugin-display-name',
71+
!excludedBasePlugins.has(pluginName),
6172
);
62-
basePlugins.push(...plugins);
73+
74+
if (isProductionBuild) {
75+
basePlugins.push(...prodOnlyPlugins);
76+
}
6377

6478
return {
6579
...baseConfig,
6680
plugins: basePlugins,
67-
overrides: [
68-
{
69-
exclude: /\.test\.(m?js|ts|tsx)$/,
70-
plugins: ['@babel/plugin-transform-react-constant-elements'],
71-
},
72-
],
81+
// `@babel/plugin-transform-react-constant-elements` hoists static JSX — prod-only optimization.
82+
overrides: isProductionBuild
83+
? [
84+
{
85+
exclude: /\.test\.(m?js|ts|tsx)$/,
86+
plugins: ['@babel/plugin-transform-react-constant-elements'],
87+
},
88+
]
89+
: [],
7390
env: {
7491
development: {
7592
plugins: [

docs/data/material/components/avatars/BadgeAvatars.js

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { styled } from '@mui/material/styles';
22
import Badge from '@mui/material/Badge';
33
import Avatar from '@mui/material/Avatar';
44
import Stack from '@mui/material/Stack';
5+
import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';
56

67
const StyledBadge = styled(Badge)(({ theme }) => ({
78
'& .MuiBadge-badge': {
@@ -46,16 +47,28 @@ export default function BadgeAvatars() {
4647
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
4748
variant="dot"
4849
>
49-
<Avatar alt="Remy Sharp" src="/static/images/avatar/1.jpg" />
50+
<Avatar alt="Remy Sharp, online" src="/static/images/avatar/1.jpg" />
5051
</StyledBadge>
5152
<Badge
5253
overlap="circular"
5354
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
54-
badgeContent={
55-
<SmallAvatar alt="Remy Sharp" src="/static/images/avatar/1.jpg" />
56-
}
55+
badgeContent={2}
56+
color="primary"
5757
>
58-
<Avatar alt="Travis Howard" src="/static/images/avatar/2.jpg" />
58+
<Avatar
59+
alt="Travis Howard, 2 unread messages"
60+
src="/static/images/avatar/2.jpg"
61+
/>
62+
</Badge>
63+
<Badge
64+
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
65+
badgeContent={<SmallAvatar alt="" src="/static/images/avatar/1.jpg" />}
66+
>
67+
<InsertDriveFileIcon
68+
color="action"
69+
fontSize="large"
70+
titleAccess="Q4 budget spreadsheet, last edited by Remy Sharp"
71+
/>
5972
</Badge>
6073
</Stack>
6174
);

docs/data/material/components/avatars/BadgeAvatars.tsx

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { styled } from '@mui/material/styles';
22
import Badge from '@mui/material/Badge';
33
import Avatar from '@mui/material/Avatar';
44
import Stack from '@mui/material/Stack';
5+
import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile';
56

67
const StyledBadge = styled(Badge)(({ theme }) => ({
78
'& .MuiBadge-badge': {
@@ -46,16 +47,28 @@ export default function BadgeAvatars() {
4647
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
4748
variant="dot"
4849
>
49-
<Avatar alt="Remy Sharp" src="/static/images/avatar/1.jpg" />
50+
<Avatar alt="Remy Sharp, online" src="/static/images/avatar/1.jpg" />
5051
</StyledBadge>
5152
<Badge
5253
overlap="circular"
5354
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
54-
badgeContent={
55-
<SmallAvatar alt="Remy Sharp" src="/static/images/avatar/1.jpg" />
56-
}
55+
badgeContent={2}
56+
color="primary"
5757
>
58-
<Avatar alt="Travis Howard" src="/static/images/avatar/2.jpg" />
58+
<Avatar
59+
alt="Travis Howard, 2 unread messages"
60+
src="/static/images/avatar/2.jpg"
61+
/>
62+
</Badge>
63+
<Badge
64+
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
65+
badgeContent={<SmallAvatar alt="" src="/static/images/avatar/1.jpg" />}
66+
>
67+
<InsertDriveFileIcon
68+
color="action"
69+
fontSize="large"
70+
titleAccess="Q4 budget spreadsheet, last edited by Remy Sharp"
71+
/>
5972
</Badge>
6073
</Stack>
6174
);

0 commit comments

Comments
 (0)