Skip to content

Commit ecae658

Browse files
resolve conflict
2 parents d75ae8c + acd452a commit ecae658

110 files changed

Lines changed: 2094 additions & 452 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.

CHANGELOG.md

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

3+
## 9.0.0-alpha.3
4+
5+
<!-- generated comparing v9.0.0-alpha.2..master -->
6+
7+
_Mar 12, 2026_
8+
9+
A big thanks to the 10 contributors who made this release possible. Here are some highlights ✨:
10+
11+
- 📖 A new [Menubar](https://mui.com/material-ui/react-menubar/) component page integrated with [Base UI](https://base-ui.com/react/components/menubar)
12+
- ♿️ Improved the Roving TabIndex keyboard navigation for the Stepper, Tabs and MenuList components.
13+
14+
### `@mui/material@9.0.0-alpha.3`
15+
16+
- [autocomplete] Add `root` slot (#47852) @GerardasB
17+
- [autocomplete] Fix popup reopening on window focus regain with openOnFocus (#47790) @aman44444
18+
- [autocomplete] Support full slots for clearIndicator and popupIndicator (#47891) @silviuaavram
19+
- [material-ui] Partially revert "[material-ui] Clean up duplicated CSS rules (#47838)" (#47927) @sai6855
20+
- [stepper][menulist][tabs] Improve accessibility (#47687) @silviuaavram
21+
22+
### Docs
23+
24+
- [docs][codemod] Add v7 migration docs for deprecated Autocomplete APIs and Autocomplete codemod (#47945) @ZeeshanTamboli
25+
- [docs] Update faq about vendor chunks (#47747) @Janpot
26+
- [docs] Use direct palette vars in Tailwind v4 snippet (#47940) @Ahmad-Alaziz
27+
- [docs][menubar] Add Menubar component page (#47616) @siriwatknp
28+
29+
### Core
30+
31+
- [core] Fix the release prepare steps (#47951) @silviuaavram
32+
- [core] Remove Joy UI code and docs (#47939) @mnajdova
33+
- [code-infra] Add previously missed export of themeCssVarsAugmentation (#47918) @brijeshb42
34+
- [docs-infra] Import font module for nextjs transpilation (#47935) @brijeshb42
35+
- [docs-infra] Migrate simpler modules from docs to mui-docs (#47897) @brijeshb42
36+
- [test] Fix detached anchorEl elements in tests (#47929) @Janpot
37+
38+
All contributors of this release in alphabetical order: @Ahmad-Alaziz, @aman44444, @brijeshb42, @GerardasB, @Janpot, @mnajdova, @sai6855, @silviuaavram, @siriwatknp, @ZeeshanTamboli
39+
340
## 9.0.0-alpha.2
441

542
<!-- generated comparing v9.0.0-alpha.1..master -->

docs/data/material/components/steppers/HorizontalNonLinearStepper.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,17 @@ export default function HorizontalNonLinearStepper() {
6464
<Stepper nonLinear activeStep={activeStep}>
6565
{steps.map((label, index) => (
6666
<Step key={label} completed={completed[index]}>
67-
<StepButton color="inherit" onClick={handleStep(index)}>
67+
<StepButton
68+
aria-controls="stepper-content"
69+
color="inherit"
70+
onClick={handleStep(index)}
71+
>
6872
{label}
6973
</StepButton>
7074
</Step>
7175
))}
7276
</Stepper>
73-
<div>
77+
<div id="stepper-content">
7478
{allStepsCompleted() ? (
7579
<React.Fragment>
7680
<Typography sx={{ mt: 2, mb: 1 }}>

docs/data/material/components/steppers/HorizontalNonLinearStepper.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,17 @@ export default function HorizontalNonLinearStepper() {
6666
<Stepper nonLinear activeStep={activeStep}>
6767
{steps.map((label, index) => (
6868
<Step key={label} completed={completed[index]}>
69-
<StepButton color="inherit" onClick={handleStep(index)}>
69+
<StepButton
70+
aria-controls="stepper-content"
71+
color="inherit"
72+
onClick={handleStep(index)}
73+
>
7074
{label}
7175
</StepButton>
7276
</Step>
7377
))}
7478
</Stepper>
75-
<div>
79+
<div id="stepper-content">
7680
{allStepsCompleted() ? (
7781
<React.Fragment>
7882
<Typography sx={{ mt: 2, mb: 1 }}>

docs/data/material/components/steppers/steppers.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ The use of the `StepButton` here demonstrates clickable step labels, as well as
7272
flag. However because steps can be accessed in a non-linear fashion, it's up to your own implementation to
7373
determine when all steps are completed (or even if they need to be completed).
7474

75+
Actionable steps mean that they control the content update of a section. From an accessibility standpoint, this means that each `StepButton` requires an `aria-controls` attribute pointing at the content section element.
76+
7577
{{"demo": "HorizontalNonLinearStepper.js"}}
7678

7779
### Alternative label

docs/data/material/integrations/tailwindcss/tailwindcss-v4.md

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -184,48 +184,48 @@ If you want to use Material UI theme tokens in your Tailwind CSS classes, copy
184184
--breakpoint-2xl: 120rem; /* 1920px */
185185

186186
/* Material UI theme colors */
187-
--color-primary: rgb(var(--mui-palette-primary-mainChannel));
188-
--color-primary-light: rgb(var(--mui-palette-primary-lightChannel));
189-
--color-primary-dark: rgb(var(--mui-palette-primary-darkChannel));
190-
--color-primary-contrast: rgb(var(--mui-palette-primary-contrastTextChannel));
187+
--color-primary: var(--mui-palette-primary-main);
188+
--color-primary-light: var(--mui-palette-primary-light);
189+
--color-primary-dark: var(--mui-palette-primary-dark);
190+
--color-primary-contrast: var(--mui-palette-primary-contrastText);
191191

192-
--color-secondary: rgb(var(--mui-palette-secondary-mainChannel));
193-
--color-secondary-light: rgb(var(--mui-palette-secondary-lightChannel));
194-
--color-secondary-dark: rgb(var(--mui-palette-secondary-darkChannel));
195-
--color-secondary-contrast: rgb(var(--mui-palette-secondary-contrastTextChannel));
192+
--color-secondary: var(--mui-palette-secondary-main);
193+
--color-secondary-light: var(--mui-palette-secondary-light);
194+
--color-secondary-dark: var(--mui-palette-secondary-dark);
195+
--color-secondary-contrast: var(--mui-palette-secondary-contrastText);
196196

197197
/* Material UI status colors */
198-
--color-info: rgb(var(--mui-palette-info-mainChannel));
199-
--color-info-light: rgb(var(--mui-palette-info-lightChannel));
200-
--color-info-dark: rgb(var(--mui-palette-info-darkChannel));
201-
--color-info-contrast: rgb(var(--mui-palette-info-contrastTextChannel));
202-
203-
--color-error: rgb(var(--mui-palette-error-mainChannel));
204-
--color-error-light: rgb(var(--mui-palette-error-lightChannel));
205-
--color-error-dark: rgb(var(--mui-palette-error-darkChannel));
206-
--color-error-contrast: rgb(var(--mui-palette-error-contrastTextChannel));
207-
208-
--color-success: rgb(var(--mui-palette-success-mainChannel));
209-
--color-success-light: rgb(var(--mui-palette-success-lightChannel));
210-
--color-success-dark: rgb(var(--mui-palette-success-darkChannel));
211-
--color-success-contrast: rgb(var(--mui-palette-success-contrastTextChannel));
212-
213-
--color-warning: rgb(var(--mui-palette-warning-mainChannel));
214-
--color-warning-light: rgb(var(--mui-palette-warning-lightChannel));
215-
--color-warning-dark: rgb(var(--mui-palette-warning-darkChannel));
216-
--color-warning-contrast: rgb(var(--mui-palette-warning-contrastTextChannel));
198+
--color-info: var(--mui-palette-info-main);
199+
--color-info-light: var(--mui-palette-info-light);
200+
--color-info-dark: var(--mui-palette-info-dark);
201+
--color-info-contrast: var(--mui-palette-info-contrastText);
202+
203+
--color-error: var(--mui-palette-error-main);
204+
--color-error-light: var(--mui-palette-error-light);
205+
--color-error-dark: var(--mui-palette-error-dark);
206+
--color-error-contrast: var(--mui-palette-error-contrastText);
207+
208+
--color-success: var(--mui-palette-success-main);
209+
--color-success-light: var(--mui-palette-success-light);
210+
--color-success-dark: var(--mui-palette-success-dark);
211+
--color-success-contrast: var(--mui-palette-success-contrastText);
212+
213+
--color-warning: var(--mui-palette-warning-main);
214+
--color-warning-light: var(--mui-palette-warning-light);
215+
--color-warning-dark: var(--mui-palette-warning-dark);
216+
--color-warning-contrast: var(--mui-palette-warning-contrastText);
217217

218218
/* Material UI text & common colors */
219-
--color-text-primary: rgb(var(--mui-palette-text-primaryChannel));
220-
--color-text-secondary: rgb(var(--mui-palette-text-secondaryChannel));
219+
--color-text-primary: var(--mui-palette-text-primary);
220+
--color-text-secondary: var(--mui-palette-text-secondary);
221221
--color-text-disabled: var(--mui-palette-text-disabled);
222222
--color-common-background: var(--mui-palette-common-background);
223223
--color-common-onBackground: var(--mui-palette-common-onBackground);
224224
--color-divider: var(--mui-palette-divider);
225225

226226
/* Material UI background colors */
227-
--color-background-default: rgb(var(--mui-palette-background-defaultChannel));
228-
--color-background-paper: rgb(var(--mui-palette-background-paperChannel));
227+
--color-background-default: var(--mui-palette-background-default);
228+
--color-background-paper: var(--mui-palette-background-paper);
229229

230230
/* Material UI action colors */
231231
--color-action-active: var(--mui-palette-action-active);
@@ -455,7 +455,7 @@ If you want to use Material UI theme tokens in your Tailwind CSS classes, copy
455455
Then you can start using the new classes—for example:
456456

457457
- The class `typography-h1` produces `font: var(--mui-font-h1);`
458-
- The class `text-primary` produces `color: rgb(var(--mui-palette-primary-mainChannel));`
458+
- The class `text-primary` produces `color: var(--mui-palette-primary-main);`
459459

460460
So when you add these classes to an element…
461461

@@ -472,14 +472,14 @@ So when you add these classes to an element…
472472
letter-spacing: -0.01562em;
473473
}
474474
.text-primary {
475-
color: rgb(var(--mui-palette-primary-mainChannel));
475+
color: var(--mui-palette-primary-main);
476476
}
477477
}
478478
```
479479

480480
### Playground
481481

482-
Visit the [Tailwind CSS Playground](https://play.tailwindcss.com/f1ZIr0qSNG) to explore the classes from Material UI theme tokens.
482+
Visit the [Tailwind CSS Playground](https://play.tailwindcss.com/mh7Ym0mGff) to explore the classes from Material UI theme tokens.
483483

484484
## Troubleshooting
485485

docs/data/material/migration/upgrade-to-v9/upgrade-to-v9.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,46 @@ This also fixes an issue where props like `color` were consumed by the Grid inst
118118
</Grid>
119119
```
120120

121+
### TablePagination numbers are formatted by default
122+
123+
Pagination numbers in `TablePagination` are now formatted using `Intl.NumberFormat` according to the locale.
124+
For example, `103177` is displayed as `103,177` in `en-US` or `103.177` in `de-DE`.
125+
126+
To opt out of number formatting, provide a custom `labelDisplayedRows` function:
127+
128+
```jsx
129+
<TablePagination
130+
labelDisplayedRows={({ from, to, count }) =>
131+
`${from}${to} of ${count !== -1 ? count : `more than ${to}`}`
132+
}
133+
/>
134+
```
135+
136+
Or when using a locale:
137+
138+
```jsx
139+
import { enUS } from '@mui/material/locale';
140+
141+
const theme = createTheme(
142+
{
143+
palette: {
144+
primary: { main: '#1976d2' },
145+
},
146+
},
147+
enUS,
148+
{
149+
components: {
150+
MuiTablePagination: {
151+
defaultProps: {
152+
labelDisplayedRows: ({ from, to, count }) =>
153+
`${from}${to} of ${count !== -1 ? count : `more than ${to}`}`,
154+
},
155+
},
156+
},
157+
},
158+
);
159+
```
160+
121161
### Theme
122162

123163
`MuiTouchRipple` has been removed from the theme `components` types (`ComponentsProps`, `ComponentsOverrides`, and `ComponentsVariants`).
@@ -147,3 +187,42 @@ If you were using `MuiTouchRipple` in your theme, remove it and use global CSS w
147187
### JSDOM support
148188

149189
v9 removes all usage of `process.env.NODE_ENV === 'test'`. The `NODE_ENV` variable will exclusively be used for for tree-shaking. Our libraries have been updated to auto-detect DOM environments that don't support layout such as [JSDOM](https://github.com/jsdom/jsdom) and [happy-dom](https://github.com/capricorn86/happy-dom) through user agent sniffing.
190+
191+
### Stepper, Step and StepButton
192+
193+
The `Stepper` and `Step` markups have changed to improve their semantics:
194+
195+
- `Stepper` returns a `<ol>` element instead of `<div>`.
196+
- `Step` returns a `<li>` element instead of `<div>`.
197+
198+
The `Stepper` component now supports keyboard navigation when used with `StepButton` descendants. The navigation is implemented as a roving tabindex, supporting Arrow Keys as well as Home and End. Only one `StepButton` is focusable at a time, by having `tabindex="0"`, while the rest all have `tabindex="-1"`. Once selection is changed by Arrow Keys or Home / End, the `tabindex` value is also updated.
199+
200+
The markup for a `Stepper` with `StepButton` descendants has changed further to reflect this behavior. These changes apply on top of the tag changes described above.
201+
202+
The `Stepper` has:
203+
204+
- The `role` of `tablist`.
205+
- The `aria-orientation` added. The value is either `horizontal` or `vertical` depending on the `orientation` prop.
206+
207+
The `StepButton` has:
208+
209+
- The `role` of `tab`.
210+
- The `aria-current` changed to `aria-selected`. The value is `true` when step is selected, and `false` otherwise.
211+
- The `aria-setsize` added. The value is the total number of steps.
212+
- The `aria-posinset` added. The value is the index of the step inside the list, 1-based.
213+
214+
### Tabs
215+
216+
The `tabindex` attribute for each tab will be changed on Arrow Key or Home / End navigation. Previously, we only moved the focus on keyboard navigation. Now, we move the focus and also add the `tabindex="0"` to the focused element. The previously focused element will have its `tabindex` updated to `-1` in order to keep only one focusable `Tab` at a time.
217+
218+
Selecting a `Tab` will update the focus and `tabindex` as before.
219+
220+
### Menu and MenuList
221+
222+
The `tabindex` attribute for each menu item will be changed on Arrow Key, Home / End or Character Key navigation. Previously, we only moved the focus on keyboard navigation. Now, we move the focus and also add the `tabindex="0"` to the focused element. The previously focused element will have its `tabindex` updated to `-1` in order to keep only one focusable `MenuItem` at a time.
223+
224+
This change also applies to the `Menu` since it uses `MenuList`.
225+
226+
Selecting a `MenuItem` will update the focus and `tabindex` as before.
227+
228+
The `autoFocus` prop in `MenuList` does not set `tabindex="0"` on the `List` component anymore. It will always stay as `-1`.

docs/pages/material-ui/api/step.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"spread": true,
5555
"themeDefaultProps": true,
5656
"muiName": "MuiStep",
57-
"forwardsRefTo": "HTMLDivElement",
57+
"forwardsRefTo": "HTMLLIElement",
5858
"filename": "/packages/mui-material/src/Step/Step.js",
5959
"inheritance": null,
6060
"demos": "<ul><li><a href=\"/material-ui/react-stepper/\">Stepper</a></li></ul>",

docs/pages/material-ui/api/stepper.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
"spread": true,
6060
"themeDefaultProps": true,
6161
"muiName": "MuiStepper",
62-
"forwardsRefTo": "HTMLDivElement",
62+
"forwardsRefTo": "HTMLOListElement",
6363
"filename": "/packages/mui-material/src/Stepper/Stepper.js",
6464
"inheritance": null,
6565
"demos": "<ul><li><a href=\"/material-ui/react-stepper/\">Stepper</a></li></ul>",

docs/pages/material-ui/api/table-pagination.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
},
2828
"labelDisplayedRows": {
2929
"type": { "name": "func" },
30-
"default": "function defaultLabelDisplayedRows({ from, to, count }) {\n return `${from}–${to} of ${count !== -1 ? count : `more than ${to}`}`;\n}"
30+
"default": "function defaultLabelDisplayedRows({ from, to, count }) {\n return `${formatNumber(from)}–${formatNumber(to)} of ${count !== -1 ? formatNumber(count) : `more than ${formatNumber(to)}`}`;\n}"
3131
},
3232
"labelRowsPerPage": { "type": { "name": "node" }, "default": "'Rows per page:'" },
3333
"nextIconButtonProps": {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@mui/monorepo",
3-
"version": "9.0.0-alpha.1",
3+
"version": "9.0.0-alpha.3",
44
"private": true,
55
"scripts": {
66
"preinstall": "npx only-allow pnpm",

0 commit comments

Comments
 (0)