Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@mui/codemod

mui31.9kMIT7.1.1

Codemod scripts for Material UI.

react, react-component, mui, codemod, jscodeshift

readme

@mui/codemod

Codemod scripts for Material UI, Base UI, MUI System, Joy UI.

npm version npm downloads

This repository contains a collection of codemod scripts based for use with jscodeshift that help update the APIs. Some of the codemods also run postcss plugins to update CSS files.

Setup & run

npx @mui/codemod <codemod> <paths...>

Applies a `@mui/codemod` to the specified paths

Positionals:
  codemod  The name of the codemod                                [string]
  paths    Paths forwarded to `jscodeshift`                       [string]

Options:
  --version  Show version number                                 [boolean]
  --help     Show help                                           [boolean]
  --dry      dry run (no changes are made to files)
                                                [boolean] [default: false]
  --parser   which parser for jscodeshift to use.
                                                [string] [default: 'tsx']
  --print    print transformed files to stdout, useful for development
                                                [boolean] [default: false]
  --jscodeshift                                  [string] [default: false]

Examples:
  npx @mui/codemod@latest v4.0.0/theme-spacing-api src
  npx @mui/codemod@latest v5.0.0/component-rename-prop src --
  --component=Grid --from=prop --to=newProp
  npx @mui/codemod@latest v5.0.0/preset-safe src --parser=flow

package name

Use this flag if you have a custom package name that reexports Material UI components. For example:

npx @mui/codemod@latest --packageName="@org/ui"

The snippet above will look for @org/ui instead of @mui/material in the codemod.

jscodeshift options

To pass more options directly to jscodeshift, use --jscodeshift="...". For example:

npx @mui/codemod@latest --jscodeshift="--run-in-band --verbose=2"

See all available options here.

Recast Options

Options to recast's printer can be provided through jscodeshift's printOptions command line argument

npx @mui/codemod@latest <transform> <path> --jscodeshift="--printOptions='{\"quote\":\"double\"}'"

Included scripts

Deprecations

npx @mui/codemod@latest deprecations/all <path>

all

A combination of all deprecations.

accordion-props

 <Accordion
-  TransitionComponent={CustomTransition}
-  TransitionProps={{ unmountOnExit: true }}
+  slots={{ transition: CustomTransition }}
+  slotProps={{ transition: { unmountOnExit: true } }}
 />
npx @mui/codemod@latest deprecations/accordion-props <path>

accordion-summary-classes

JS transforms:

 import { accordionSummaryClasses } from '@mui/material/AccordionSummary';

 MuiAccordionSummary: {
   styleOverrides: {
     root: {
-      [`& .${accordionSummaryClasses.contentGutters}`]: {
+      [`&.${accordionSummaryClasses.gutters} .${accordionSummaryClasses.content}`]: {
         color: 'red',
       },
     },
   },
 },
 MuiAccordionSummary: {
   styleOverrides: {
     root: {
-      '& .MuiAccordionSummary-contentGutters': {
+      '&.MuiAccordionSummary-gutters .MuiAccordionSummary-content': {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiAccordionSummary-root .MuiAccordionSummary-contentGutters
+.MuiAccordionSummary-root.MuiAccordionSummary-gutters .MuiAccordionSummary-content
npx @mui/codemod@latest deprecations/accordion-summary-classes <path>

alert-classes

JS transforms:

 import { alertClasses } from '@mui/material/PaginationItem';

 MuiPaginationItem: {
   styleOverrides: {
     root: {
-      [`&.${alertClasses.standardSuccess}`]: {
+      [`&.${alertClasses.standard}.${alertClasses.colorSuccess}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.standardInfo}`]: {
+      [`&.${alertClasses.standard}.${alertClasses.colorInfo}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.standardWarning}`]: {
+      [`&.${alertClasses.standard}.${alertClasses.colorWarning}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.standardError}`]: {
+      [`&.${alertClasses.standard}.${alertClasses.colorError}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.outlinedSuccess}`]: {
+      [`&.${alertClasses.outlined}.${alertClasses.colorSuccess}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.outlinedInfo}`]: {
+      [`&.${alertClasses.outlined}.${alertClasses.colorInfo}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.outlinedWarning}`]: {
+      [`&.${alertClasses.outlined}.${alertClasses.colorWarning}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.outlinedError}`]: {
+      [`&.${alertClasses.outlined}.${alertClasses.colorError}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.filledSuccess}`]: {
+      [`&.${alertClasses.filled}.${alertClasses.colorSuccess}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.filledInfo}`]: {
+      [`&.${alertClasses.filled}.${alertClasses.colorInfo}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.filledWarning}`]: {
+      [`&.${alertClasses.filled}.${alertClasses.colorWarning}`]: {
         color: 'red',
       },
-      [`&.${alertClasses.filledError}`]: {
+      [`&.${alertClasses.filled}.${alertClasses.colorError}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiAlert-standardSuccess
+.MuiAlert-standard.MuiAlert-colorSuccess
-.MuiAlert-standardInfo
+.MuiAlert-standard.MuiAlert-colorInfo
-.MuiAlert-standardWarning
+.MuiAlert-standard.MuiAlert-colorWarning
-.MuiAlert-standardError
+.MuiAlert-standard.MuiAlert-colorError
-.MuiAlert-outlinedSuccess
+.MuiAlert-outlined.MuiAlert-colorSuccess
-.MuiAlert-outlinedInfo
+.MuiAlert-outlined.MuiAlert-colorInfo
-.MuiAlert-outlinedWarning
+.MuiAlert-outlined.MuiAlert-colorWarning
-.MuiAlert-outlinedError
+.MuiAlert-outlined.MuiAlert-colorError
-.MuiAlert-filledSuccess
+.MuiAlert-filled.MuiAlert-colorSuccess
-.MuiAlert-filledInfo
+.MuiAlert-filled.MuiAlert-colorInfo
-.MuiAlert-filledWarning
+.MuiAlert-filled.MuiAlert-colorWarning
-.MuiAlert-filledError
+.MuiAlert-filled.MuiAlert-colorError
npx @mui/codemod@latest deprecations/alert-classes <path>

alert-props

 <Alert
-  components={{ CloseButton: CustomButton }}
-  componentsProps={{ closeButton: { testid: 'test-id' } }}
+  slots={{ closeButton: CustomButton }}
+  slotProps={{ closeButton: { testid: 'test-id' } }}
 />
 MuiAlert: {
   defaultProps: {
-    components: { CloseButton: CustomButton }
-    componentsProps: { closeButton: { testid: 'test-id' }}
+    slots: { closeButton: CustomButton },
+    slotProps: { closeButton: { testid: 'test-id' } },
   },
 },
npx @mui/codemod@latest deprecations/alert-props <path>

autocomplete-props

 <Autocomplete
-  ChipProps={{ height: 10 }}
-  PaperComponent={CustomPaper}
-  PopperComponent={CustomPopper}
-  ListboxComponent={CustomListbox}
-  ListboxProps={{ height: 12 }}
-  componentsProps={{
-    clearIndicator: { width: 10 },
-    paper: { width: 12 },
-    popper: { width: 14 },
-    popupIndicator: { width: 16 },
-  }}
+  slots={{
+    paper: CustomPaper,
+    popper: CustomPopper
+  }}
+  slotProps={{
+    chip: { height: 10 },
+    listbox: {
+        component: CustomListbox,
+        ...{ height: 12 },
+    },
+    clearIndicator: { width: 10 },
+    paper: { width: 12 },
+    popper: { width: 14 },
+    popupIndicator: { width: 16 },
+  }}
 />
 MuiAutocomplete: {
   defaultProps: {
-    ChipProps: { height: 10 },
-    PaperComponent: CustomPaper,
-    PopperComponent: CustomPopper,
-    ListboxComponent: CustomListbox,
-    ListboxProps: { height: 12 },
-    componentsProps: {
-       clearIndicator: { width: 10 },
-       paper: { width: 12 },
-       popper: { width: 14 },
-       popupIndicator: { width: 16 },
-     }
+    slots: {
+      paper: CustomPaper,
+      popper: CustomPopper,
+    },
+    slotProps: {
+      chip: { height: 10 },
+      listbox: {
+        component: CustomListbox,
+        ...{ height: 12 },
+      },
+      clearIndicator: { width: 10 },
+      paper: { width: 12 },
+      popper: { width: 14 },
+      popupIndicator: { width: 16 },
+    },
   },
 },
npx @mui/codemod@latest deprecations/autocomplete-props <path>

avatar-group-props

 <AvatarGroup
-  componentsProps={{
-    additionalAvatar: { color: 'red' },
+  slotProps={{
+    surplus: { color: 'red' },
   }}
 />
 <AvatarGroup
   slotProps={{
-    additionalAvatar: { color: 'red' },
+    surplus: { color: 'red' },
   }}
 />
 MuiAvatarGroup: {
   defaultProps: {
-    componentsProps: {
-      additionalAvatar: { color: 'red' },
+    slotProps: {
+      surplus: { color: 'red' },
     },
   },
 },
 MuiAvatarGroup: {
   defaultProps: {
     slotProps: {
-      additionalAvatar: { color: 'red' },
+      surplus: { color: 'red' },
     },
   },
 },
npx @mui/codemod@latest deprecations/avatar-group-props <path>

avatar-props

 <Avatar
-  imgProps={{
-    onError: () => {},
-    onLoad: () => {},
+  slotProps={{
+    img: {
+      onError: () => {},
+      onLoad: () => {},
+    },
   }}
 />
npx @mui/codemod@latest deprecations/avatar-props <path>

backdrop-props

 <Backdrop
-  components={{ Root: CustomRoot }}
-  componentsProps={{ root: { testid: 'test-id' } }}
+  slots={{ root: CustomRoot }}
+  slotProps={{ root: { testid: 'test-id' } }}
 />
 MuiBackdrop: {
   defaultProps: {
-    components: { Root: CustomRoot }
-    componentsProps: { root: { testid: 'root-id' } }
+    slots: { root: CustomRoot },
+    slotProps: { root: { testid: 'root-id' } },
  },
 },
 <Backdrop
-  TransitionComponent={CustomTransition}
+  slots={{ transition: CustomTransition }}
 />
npx @mui/codemod@latest deprecations/backdrop-props <path>

badge-props

 <Badge
-  components={{ Root: CustomRoot }}
-  componentsProps={{ root: { testid: 'test-id' } }}
+  slots={{ root: CustomRoot }}
+  slotProps={{ root: { testid: 'test-id' } }}
 />
 MuiBadge: {
   defaultProps: {
-    components: { Root: CustomRoot }
-    componentsProps: { root: { testid: 'test-id' }}
+    slots: { root: CustomRoot },
+    slotProps: { root: { testid: 'test-id' } },
  },
 },
npx @mui/codemod@latest deprecations/badge-props <path>

button-classes

JS transforms:

 import { buttonClasses } from '@mui/material/Button';

 MuiButton: {
   styleOverrides: {
     root: {
-      [`&.${buttonClasses.textInherit}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.colorInherit}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.textPrimary}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.colorPrimary}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.textSecondary}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.colorSecondary}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.textSuccess}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.colorSuccess}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.textError}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.colorError}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.textInfo}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.colorInfo}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.textWarning}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.colorWarning}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedInherit}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.colorInherit}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedPrimary}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.colorPrimary}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedSecondary}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.colorSecondary}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedSuccess}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.colorSuccess}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedError}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.colorError}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedInfo}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.colorInfo}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedWarning}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.colorWarning}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedInherit}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.colorInherit}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedPrimary}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.colorPrimary}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedSecondary}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.colorSecondary}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedSuccess}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.colorSuccess}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedError}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.colorError}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedInfo}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.colorInfo}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedWarning}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.colorWarning}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedSizeSmall}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.sizeSmall}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedSizeMedium}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.sizeMedium}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.containedSizeLarge}`]: {
+      [`&.${buttonClasses.contained}.${buttonClasses.sizeLarge}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.textSizeSmall}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.sizeSmall}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.textSizeMedium}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.sizeMedium}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.textSizeLarge}`]: {
+      [`&.${buttonClasses.text}.${buttonClasses.sizeLarge}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedSizeSmall}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.sizeSmall}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedSizeMedium}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.sizeMedium}`]: {
         color: 'red',
       },
-      [`&.${buttonClasses.outlinedSizeLarge}`]: {
+      [`&.${buttonClasses.outlined}.${buttonClasses.sizeLarge}`]: {
         color: 'red',
       },
-      [`& .${buttonClasses.iconSizeSmall}`]: {
+      [`&.${buttonClasses.sizeSmall} > .${buttonClasses.icon}`]: {
         color: 'red',
       },
-      [`& .${buttonClasses.iconSizeMedium}`]: {
+      [`&.${buttonClasses.sizeMedium} > .${buttonClasses.icon}`]: {
         color: 'red',
       },
-      [`& .${buttonClasses.iconSizeLarge}`]: {
+      [`&.${buttonClasses.sizeLarge} > .${buttonClasses.icon}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiButton-textInherit
+.MuiButton-text.MuiButton-colorInherit
-.MuiButton-textPrimary
+.MuiButton-text.MuiButton-colorPrimary
-.MuiButton-textSecondary
+.MuiButton-text.MuiButton-colorSecondary
-.MuiButton-textSuccess
+.MuiButton-text.MuiButton-colorSuccess
-.MuiButton-textError
+.MuiButton-text.MuiButton-colorError
-.MuiButton-textInfo
+.MuiButton-text.MuiButton-colorInfo
-.MuiButton-textWarning
+.MuiButton-text.MuiButton-colorWarning
-.MuiButton-outlinedInherit
+.MuiButton-outlined.MuiButton-colorInherit
-.MuiButton-outlinedPrimary
+.MuiButton-outlined.MuiButton-colorPrimary
-.MuiButton-outlinedSecondary
+.MuiButton-outlined.MuiButton-colorSecondary
-.MuiButton-outlinedSuccess
+.MuiButton-outlined.MuiButton-colorSuccess
-.MuiButton-outlinedError
+.MuiButton-outlined.MuiButton-colorError
-.MuiButton-outlinedInfo
+.MuiButton-outlined.MuiButton-colorInfo
-.MuiButton-outlinedWarning
+.MuiButton-outlined.MuiButton-colorWarning
-.MuiButton-containedInherit
+.MuiButton-contained.MuiButton-colorInherit
-.MuiButton-containedPrimary
+.MuiButton-contained.MuiButton-colorPrimary
-.MuiButton-containedSecondary
+.MuiButton-contained.MuiButton-colorSecondary
-.MuiButton-containedSuccess
+.MuiButton-contained.MuiButton-colorSuccess
-.MuiButton-containedError
+.MuiButton-contained.MuiButton-colorError
-.MuiButton-containedInfo
+.MuiButton-contained.MuiButton-colorInfo
-.MuiButton-containedWarning
+.MuiButton-contained.MuiButton-colorWarning
-.MuiButton-textSizeSmall
+.MuiButton-text.MuiButton-sizeSmall
-.MuiButton-textSizeMedium
+.MuiButton-text.MuiButton-sizeMedium
-.MuiButton-textSizeLarge
+.MuiButton-text.MuiButton-sizeLarge
-.MuiButton-outlinedSizeSmall
+.MuiButton-outlined.MuiButton-sizeSmall
-.MuiButton-outlinedSizeMedium
+.MuiButton-outlined.MuiButton-sizeMedium
-.MuiButton-outlinedSizeLarge
+.MuiButton-outlined.MuiButton-sizeLarge
-.MuiButton-containedSizeSmall
+.MuiButton-contained.MuiButton-sizeSmall
-.MuiButton-containedSizeMedium
+.MuiButton-contained.MuiButton-sizeMedium
-.MuiButton-containedSizeLarge
+.MuiButton-contained.MuiButton-sizeLarge
-.MuiButton-root .MuiButton-iconSizeSmall
+.MuiButton-root.MuiButton-sizeSmall > .MuiButton-icon
-.MuiButton-root .MuiButton-iconSizeMedium
+.MuiButton-root.MuiButton-sizeMedium > .MuiButton-icon
-.MuiButton-root .MuiButton-iconSizeLarge
+.MuiButton-root.MuiButton-sizeLarge > .MuiButton-icon
npx @mui/codemod@latest deprecations/button-classes <path>

button-group-classes

JS transforms:

 import { buttonGroupClasses } from '@mui/material/ButtonGroup';

 MuiButtonGroup: {
   styleOverrides: {
     root: {
-      [`& .${buttonGroupClasses.groupedHorizontal}`]: {
+      [`&.${buttonGroupClasses.horizontal} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedVertical}`]: {
+      [`&.${buttonGroupClasses.vertical} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedText}`]: {
+      [`&.${buttonGroupClasses.text} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedTextHorizontal}`]: {
+      [`&.${buttonGroupClasses.text}.${buttonGroupClasses.horizontal} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedTextVertical}`]: {
+      [`&.${buttonGroupClasses.text}.${buttonGroupClasses.vertical} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedTextPrimary}`]: {
+      [`&.${buttonGroupClasses.text}.${buttonGroupClasses.colorPrimary} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedTextSecondary}`]: {
+      [`&.${buttonGroupClasses.text}.${buttonGroupClasses.colorSecondary} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedOutlined}`]: {
+      [`&.${buttonGroupClasses.outlined} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedOutlinedHorizontal}`]: {
+      [`&.${buttonGroupClasses.outlined}.${buttonGroupClasses.horizontal} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedOutlinedVertical}`]: {
+      [`&.${buttonGroupClasses.outlined}.${buttonGroupClasses.vertical} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedOutlinedPrimary}`]: {
+      [`&.${buttonGroupClasses.outlined}.${buttonGroupClasses.colorPrimary} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedOutlinedSecondary}`]: {
+      [`&.${buttonGroupClasses.outlined}.${buttonGroupClasses.colorSecondary} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedContained}`]: {
+      [`&.${buttonGroupClasses.contained} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedContainedHorizontal}`]: {
+      [`&.${buttonGroupClasses.contained}.${buttonGroupClasses.horizontal} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedContainedVertical}`]: {
+      [`&.${buttonGroupClasses.contained}.${buttonGroupClasses.vertical} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedContainedPrimary}`]: {
+      [`&.${buttonGroupClasses.contained}.${buttonGroupClasses.colorPrimary} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
-      [`& .${buttonGroupClasses.groupedContainedSecondary}`]: {
+      [`&.${buttonGroupClasses.contained}.${buttonGroupClasses.colorSecondary} > .${buttonGroupClasses.grouped}`]: {
          color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiButtonGroup-root .MuiButtonGroup-groupedHorizontal
+.MuiButtonGroup-root.MuiButtonGroup-horizontal > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedVertical
+.MuiButtonGroup-root.MuiButtonGroup-vertical > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedText
+.MuiButtonGroup-root.MuiButtonGroup-text > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedTextHorizontal
+.MuiButtonGroup-root.MuiButtonGroup-text.MuiButtonGroup-horizontal > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedTextVertical
+.MuiButtonGroup-root.MuiButtonGroup-text.MuiButtonGroup-vertical > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedTextPrimary
+.MuiButtonGroup-root.MuiButtonGroup-text.MuiButtonGroup-colorPrimary > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedTextSecondary
+.MuiButtonGroup-root.MuiButtonGroup-text.MuiButtonGroup-colorSecondary > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedOutlined
+.MuiButtonGroup-root.MuiButtonGroup-outlined > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedOutlinedHorizontal
+.MuiButtonGroup-root.MuiButtonGroup-outlined.MuiButtonGroup-horizontal > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedOutlinedVertical
+.MuiButtonGroup-root.MuiButtonGroup-outlined.MuiButtonGroup-vertical > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedOutlinedPrimary
+.MuiButtonGroup-root.MuiButtonGroup-outlined.MuiButtonGroup-colorPrimary > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedOutlinedSecondary
+.MuiButtonGroup-root.MuiButtonGroup-outlined.MuiButtonGroup-colorSecondary > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedContained
+.MuiButtonGroup-root.MuiButtonGroup-contained > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedContainedHorizontal
+.MuiButtonGroup-root.MuiButtonGroup-contained.MuiButtonGroup-horizontal > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedContainedVertical
+.MuiButtonGroup-root.MuiButtonGroup-contained.MuiButtonGroup-vertical > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedContainedPrimary
+.MuiButtonGroup-root.MuiButtonGroup-contained.MuiButtonGroup-colorPrimary > .MuiButtonGroup-grouped
-.MuiButtonGroup-root .MuiButtonGroup-groupedContainedSecondary
+.MuiButtonGroup-root.MuiButtonGroup-contained.MuiButtonGroup-colorSecondary > .MuiButtonGroup-grouped
npx @mui/codemod@latest deprecations/button-group-classes <path>

chip-classes

JS transforms:

 import { chipClasses } from '@mui/material/Chip';

  MuiChip: {
   styleOverrides: {
     root: {
-      [`&.${chipClasses.clickableColorPrimary}`]: {
+      [`&.${chipClasses.clickable}.${chipClasses.colorPrimary}`]: {
         color: 'red',
       },
-      [`&.${chipClasses.clickableColorSecondary}`]: {
+      [`&.${chipClasses.clickable}.${chipClasses.colorSecondary}`]: {
         color: 'red',
       },
-      [`&.${chipClasses.deletableColorPrimary}`]: {
+      [`&.${chipClasses.deletable}.${chipClasses.colorPrimary}`]: {
         color: 'red',
       },
-      [`&.${chipClasses.deletableColorSecondary}`]: {
+      [`&.${chipClasses.deletable}.${chipClasses.colorSecondary}`]: {
         color: 'red',
       },
-      [`&.${chipClasses.outlinedPrimary}`]: {
+      [`&.${chipClasses.outlined}.${chipClasses.colorPrimary}`]: {
         color: 'red',
       },
-      [`&.${chipClasses.outlinedSecondary}`]: {
+      [`&.${chipClasses.outlined}.${chipClasses.colorSecondary}`]: {
         color: 'red',
       },
-      [`&.${chipClasses.filledPrimary}`]: {
+      [`&.${chipClasses.filled}.${chipClasses.colorPrimary}`]: {
         color: 'red',
       },
-      [`&.${chipClasses.filledSecondary}`]: {
+      [`&.${chipClasses.filled}.${chipClasses.colorSecondary}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.avatarSmall}`]: {
+      [`&.${chipClasses.sizeSmall} > .${chipClasses.avatar}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.avatarMedium}`]: {
+      [`&.${chipClasses.sizeMedium} > .${chipClasses.avatar}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.avatarColorPrimary}`]: {
+      [`&.${chipClasses.colorPrimary} > .${chipClasses.avatar}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.avatarColorSecondary}`]: {
+      [`&.${chipClasses.colorSecondary} > .${chipClasses.avatar}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.iconSmall}`]: {
+      [`&.${chipClasses.sizeSmall} > .${chipClasses.icon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.iconMedium}`]: {
+      [`&.${chipClasses.sizeMedium} > .${chipClasses.icon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.iconColorPrimary}`]: {
+      [`&.${chipClasses.colorPrimary} > .${chipClasses.icon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.iconColorSecondary}`]: {
+      [`&.${chipClasses.colorSecondary} > .${chipClasses.icon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.labelSmall}`]: {
+      [`&.${chipClasses.sizeSmall} > .${chipClasses.label}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.labelMedium}`]: {
+      [`&.${chipClasses.sizeMedium} > .${chipClasses.label}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.deleteIconSmall}`]: {
+      [`&.${chipClasses.sizeSmall} > .${chipClasses.deleteIcon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.deleteIconMedium}`]: {
+      [`&.${chipClasses.sizeMedium} > .${chipClasses.deleteIcon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.deleteIconColorPrimary}`]: {
+      [`&.${chipClasses.colorPrimary} > .${chipClasses.deleteIcon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.deleteIconColorSecondary}`]: {
+      [`&.${chipClasses.colorSecondary} > .${chipClasses.deleteIcon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.deleteIconOutlinedColorPrimary}`]: {
+      [`&.${chipClasses.outlined}.${chipClasses.colorPrimary} > .${chipClasses.deleteIcon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.deleteIconOutlinedColorSecondary}`]: {
+      [`&.${chipClasses.outlined}.${chipClasses.colorSecondary} > .${chipClasses.deleteIcon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.deleteIconFilledColorPrimary}`]: {
+      [`&.${chipClasses.filled}.${chipClasses.colorPrimary} > .${chipClasses.deleteIcon}`]: {
         color: 'red',
       },
-      [`& .${chipClasses.deleteIconFilledColorSecondary}`]: {
+      [`&.${chipClasses.filled}.${chipClasses.colorSecondary} > .${chipClasses.deleteIcon}`]: {
         color: 'red',
       },
     },
   },
  },

CSS transforms:

-.MuiChip-clickableColorPrimary
+.MuiChip-clickable.MuiChip-colorPrimary
-.MuiChip-clickableColorSecondary
+.MuiChip-clickable.MuiChip-colorSecondary
-.MuiChip-deletableColorPrimary
+.MuiChip-deletable.MuiChip-colorPrimary
-.MuiChip-deletableColorSecondary
+.MuiChip-deletable.MuiChip-colorSecondary
-.MuiChip-outlinedPrimary
+.MuiChip-outlined.MuiChip-colorPrimary
-.MuiChip-outlinedSecondary
+.MuiChip-outlined.MuiChip-colorSecondary
-.MuiChip-filledPrimary
+.MuiChip-filled.MuiChip-colorPrimary
-.MuiChip-filledSecondary
+.MuiChip-filled.MuiChip-colorSecondary
-.MuiChip-root .MuiChip-avatarSmall
+.MuiChip-root.MuiChip-sizeSmall > .MuiChip-avatar
-.MuiChip-root .MuiChip-avatarMedium
+.MuiChip-root.MuiChip-sizeMedium > .MuiChip-avatar
-.MuiChip-root .MuiChip-avatarColorPrimary
+.MuiChip-root.MuiChip-colorPrimary > .MuiChip-avatar
-.MuiChip-root .MuiChip-avatarColorSecondary
+.MuiChip-root.MuiChip-colorSecondary > .MuiChip-avatar
-.MuiChip-root .MuiChip-iconSmall
+.MuiChip-root.MuiChip-sizeSmall > .MuiChip-icon
-.MuiChip-root .MuiChip-iconMedium
+.MuiChip-root.MuiChip-sizeMedium > .MuiChip-icon
-.MuiChip-root .MuiChip-iconColorPrimary
+.MuiChip-root.MuiChip-colorPrimary > .MuiChip-icon
-.MuiChip-root .MuiChip-iconColorSecondary
+.MuiChip-root.MuiChip-colorSecondary > .MuiChip-icon
-.MuiChip-root .MuiChip-labelSmall
+.MuiChip-root.MuiChip-sizeSmall > .MuiChip-label
-.MuiChip-root .MuiChip-labelMedium
+.MuiChip-root.MuiChip-sizeMedium > .MuiChip-label
-.MuiChip-root .MuiChip-deleteIconSmall
+.MuiChip-root.MuiChip-sizeSmall > .MuiChip-deleteIcon
-.MuiChip-root .MuiChip-deleteIconMedium
+.MuiChip-root.MuiChip-sizeMedium > .MuiChip-deleteIcon
-.MuiChip-root .MuiChip-deleteIconColorPrimary
+.MuiChip-root.MuiChip-colorPrimary > .MuiChip-deleteIcon
-.MuiChip-root .MuiChip-deleteIconColorSecondary
+.MuiChip-root.MuiChip-colorSecondary > .MuiChip-deleteIcon
-.MuiChip-root .MuiChip-deleteIconOutlinedColorPrimary
+.MuiChip-root.MuiChip-outlined.MuiChip-colorPrimary > .MuiChip-deleteIcon
-.MuiChip-root .MuiChip-deleteIconOutlinedColorSecondary
+.MuiChip-root.MuiChip-outlined.MuiChip-colorSecondary > .MuiChip-deleteIcon
-.MuiChip-root .MuiChip-deleteIconFilledColorPrimary
+.MuiChip-root.MuiChip-filled.MuiChip-colorPrimary > .MuiChip-deleteIcon
-.MuiChip-root .MuiChip-deleteIconFilledColorSecondary
+.MuiChip-root.MuiChip-filled.MuiChip-colorSecondary > .MuiChip-deleteIcon
npx @mui/codemod@latest deprecations/chip-classes <path>

circular-progress-classes

JS transforms:

 import { circularProgressClasses } from '@mui/material/CircularProgress';

 MuiCircularProgress: {
   styleOverrides: {
     root: {
-      [`& .${circularProgressClasses.circleDeterminate}`]: {
+      [`&.${circularProgressClasses.determinate} > .${circularProgressClasses.circle}`]: {
         color: 'red',
       },
-      [`& .${circularProgressClasses.circleIndeterminate}`]: {
+      [`&.${circularProgressClasses.indeterminate} > .${circularProgressClasses.circle}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiCircularProgress-circleDeterminate
+.MuiCircularProgress-determinate > .MuiCircularProgress-circle
-.MuiCircularProgress-circleIndeterminate
+.MuiCircularProgress-indeterminate > .MuiCircularProgress-circle
npx @mui/codemod@latest deprecations/circular-progress-classes <path>

divider-props

 <Divider
-  light
+  sx={{ opacity: 0.6 }}
 />
npx @mui/codemod@latest deprecations/divider-props <path>

dialog-classes

JS transforms:

 import { dialogClasses } from '@mui/material/Dialog';

 MuiDialog: {
   styleOverrides: {
     root: {
-      [`& .${dialogClasses.paperScrollBody}`]: {
+      [`& .${dialogClasses.scrollBody} > .${dialogClasses.paper}`]: {
         color: 'red',
       },
-      [`& .${dialogClasses.paperScrollPaper}`]: {
+      [`& .${dialogClasses.scrollPaper} > .${dialogClasses.paper}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiDialog-root .MuiDialog-paperScrollBody
+.MuiDialog-root .MuiDialog-scrollBody > .MuiDialog-paper
-.MuiDialog-root .MuiDialog-paperScrollPaper
+.MuiDialog-root .MuiDialog-scrollPaper > .MuiDialog-paper
npx @mui/codemod@latest deprecations/dialog-classes <path>

drawer-classes

JS transforms:

 import { drawerClasses } from '@mui/material/Drawer';

 MuiDrawer: {
   styleOverrides: {
     root: {
-      [`.${drawerClasses.paperAnchorBottom}`]: {
+      [`&.${drawerClasses.anchorBottom} > .${drawerClasses.paper}`]: {
         color: 'red',
       },
-      [`.${drawerClasses.paperAnchorLeft}`]: {
+      [`&.${drawerClasses.anchorLeft} > .${drawerClasses.paper}`]: {
         color: 'red',
       },
-      [`.${drawerClasses.paperAnchorRight}`]: {
+      [`&.${drawerClasses.anchorRight} > .${drawerClasses.paper}`]: {
         color: 'red',
       },
-      [`.${drawerClasses.paperAnchorTop}`]: {
+      [`&.${drawerClasses.anchorTop} > .${drawerClasses.paper}`]: {
         color: 'red',
       },
-      [`.${drawerClasses.paperAnchorDockedBottom}`]: {
+      [`&.${drawerClasses.docked}.${drawerClasses.anchorBottom} > .${drawerClasses.paper}`]: {
         color: 'red',
       },
-      [`.${drawerClasses.paperAnchorDockedLeft}`]: {
+      [`&.${drawerClasses.docked}.${drawerClasses.anchorLeft} > .${drawerClasses.paper}`]: {
         color: 'red',
       },
-      [`.${drawerClasses.paperAnchorDockedRight}`]: {
+      [`&.${drawerClasses.docked}.${drawerClasses.anchorRight} > .${drawerClasses.paper}`]: {
         color: 'red',
       },
-      [`.${drawerClasses.paperAnchorDockedTop}`]: {
+      [`&.${drawerClasses.docked}.${drawerClasses.anchorTop} > .${drawerClasses.paper}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiDrawer-paperAnchorBottom
+.MuiDrawer-anchorBottom > .MuiDrawer-paper
-.MuiDrawer-paperAnchorLeft
+.MuiDrawer-anchorLeft > .MuiDrawer-paper
-.MuiDrawer-paperAnchorRight
+.MuiDrawer-anchorRight > .MuiDrawer-paper
-.MuiDrawer-paperAnchorTop
+.MuiDrawer-anchorTop > .MuiDrawer-paper
-.MuiDrawer-paperAnchorDockedBottom
+.MuiDrawer-docked.MuiDrawer-anchorBottom > .MuiDrawer-paper
-.MuiDrawer-paperAnchorDockedLeft
+.MuiDrawer-docked.MuiDrawer-anchorLeft > .MuiDrawer-paper
-.MuiDrawer-paperAnchorDockedRight
+.MuiDrawer-docked.MuiDrawer-anchorRight > .MuiDrawer-paper
-.MuiDrawer-paperAnchorDockedTop
+.MuiDrawer-docked.MuiDrawer-anchorTop > .MuiDrawer-paper
npx @mui/codemod@latest deprecations/drawer-classes <path>

filled-input-props

 <FilledInput
-  components={{ Input: CustomInput, Root: CustomRoot }}
-  componentsProps={{ input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }}
+  slots={{ input: CustomInput, root: CustomRoot }}
+  slotProps={{ input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }}
 />
 MuiFilledInput: {
   defaultProps: {
-    components: { Input: CustomInput, Root: CustomRoot }
-    componentsProps: { input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }
+    slots: { input: CustomInput, root: CustomRoot },
+    slotProps: { input: { id: 'test-input-id' }, root: { id: 'test-root-id' } },
   },
 },
npx @mui/codemod@latest deprecations/filled-input-props <path>

form-control-label-props

 <FormControlLabel
-  componentsProps={{ typography: typographyProps }}
+  slotProps={{ typography: typographyProps }}
 />
 MuiFormControlLabel: {
   defaultProps: {
-    componentsProps={{ typography: typographyProps }}
+    slotProps={{ typography: typographyProps }}
   },
 },
npx @mui/codemod@latest deprecations/form-control-label-props <path>

list-item-props

 <ListItem
-  components={{ Root: CustomRoot }}
-  componentsProps={{ root: { testid: 'test-id' } }}
+  slots={{ root: CustomRoot }}
+  slotProps={{ root: { testid: 'test-id' } }}
 />
 MuiListItem: {
   defaultProps: {
-    components: { Root: CustomRoot }
-    componentsProps: { root: { testid: 'test-id' }}
+    slots: { root: CustomRoot },
+    slotProps: { root: { testid: 'test-id' } },
  },
 },
npx @mui/codemod@latest deprecations/list-item-props <path>

list-item-text-props

 <ListItemText
-  primaryTypographyProps={primaryTypographyProps}
+  slotProps={{ primary: primaryTypographyProps }}
-  secondaryTypographyProps={secondaryTypographyProps}
+  slotProps={{ secondary: secondaryTypographyProps }}
 />
 MuiListItemText: {
   defaultProps: {
-  primaryTypographyProps:primaryTypographyProps
+  slotProps:{ primary: primaryTypographyProps }
-  secondaryTypographyProps:secondaryTypographyProps
+  slotProps:{ secondary: secondaryTypographyProps }
  },
 },
npx @mui/codemod@latest deprecations/list-item-text-props <path>

image-list-item-bar-classes

JS transforms:

 import { imageListItemBarClasses } from '@mui/material/ImageListItemBar';

 MuiImageListItemBar: {
   styleOverrides: {
     root: {
-      [`& .${imageListItemBarClasses.titleWrapBelow}`]: {
+      [`&.${imageListItemBarClasses.positionBelow} > .${imageListItemBarClasses.titleWrap}`]: {
         color: 'red',
       },
-      [`& .${imageListItemBarClasses.titleWrapActionPosLeft}`]: {
+      [`&.${imageListItemBarClasses.actionPositionLeft} > .${imageListItemBarClasses.titleWrap}`]: {
         color: 'red',
       },
-      [`& .${imageListItemBarClasses.titleWrapActionPosRight}`]: {
+      [`&.${imageListItemBarClasses.actionPositionRight} > .${imageListItemBarClasses.titleWrap}`]: {
         color: 'red',
       },
-      [`& .${imageListItemBarClasses.actionIconActionPosLeft}`]: {
+      [`&.${imageListItemBarClasses.actionPositionLeft} > .${imageListItemBarClasses.actionIcon}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

- .MuiImageListItemBar-titleWrapBelow
+.MuiImageListItemBar-positionBelow > .MuiImageListItemBar-titleWrap
- .MuiImageListItemBar-titleWrapActionPosLeft
+.MuiImageListItemBar-actionPositionLeft > .MuiImageListItemBar-titleWrap
- .MuiImageListItemBar-titleWrapActionPosRight
+.MuiImageListItemBar-actionPositionRight > .MuiImageListItemBar-titleWrap
- .MuiImageListItemBar-actionIconActionPosLeft
+.MuiImageListItemBar-actionPositionLeft > .MuiImageListItemBar-actionIcon
npx @mui/codemod@latest deprecations/image-list-item-bar-classes <path>

input-base-props

 <InputBase
-  components={{ Input: CustomInput, Root: CustomRoot }}
-  componentsProps={{ input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }}
+  slots={{ input: CustomInput, root: CustomRoot }}
+  slotProps={{ input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }}
 />
 MuiInputBase: {
   defaultProps: {
-    components: { Input: CustomInput, Root: CustomRoot }
-    componentsProps: { input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }
+    slots: { input: CustomInput, root: CustomRoot },
+    slotProps: { input: { id: 'test-input-id' }, root: { id: 'test-root-id' } },
   },
 },
npx @mui/codemod@latest deprecations/input-base-props <path>

input-base-classes

JS transforms:

 import { inputBaseClasses } from '@mui/material/InputBase';

 MuiInputBase: {
   styleOverrides: {
     root: {
-      [`& .${inputBaseClasses.inputSizeSmall}`]: {
+      [`&.${inputBaseClasses.sizeSmall} > .${inputBaseClasses.input}`]: {
         color: 'red',
       },
-      [`& .${inputBaseClasses.inputMultiline}`]: {
+      [`&.${inputBaseClasses.multiline} > .${inputBaseClasses.input}`]: {
         color: 'red',
       },
-      [`& .${inputBaseClasses.inputAdornedStart}`]: {
+      [`&.${inputBaseClasses.adornedStart} > .${inputBaseClasses.input}`]: {
         color: 'red',
       },
-      [`& .${inputBaseClasses.inputAdornedEnd}`]: {
+      [`&.${inputBaseClasses.adornedEnd} > .${inputBaseClasses.input}`]: {
         color: 'red',
       },
-      [`& .${inputBaseClasses.inputHiddenLabel}`]: {
+      [`&.${inputBaseClasses.hiddenLabel} > .${inputBaseClasses.input}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiInputBase-root .MuiInputBase-inputSizeSmall
+.MuiInputBase-root.MuiInputBase-sizeSmall > .MuiInputBase-input
-.MuiInputBase-root .MuiInputBase-inputMultiline
+.MuiInputBase-root.MuiInputBase-multiline > .MuiInputBase-input
-.MuiInputBase-root .MuiInputBase-inputAdornedStart
+.MuiInputBase-root.MuiInputBase-adornedStart > .MuiInputBase-input
-.MuiInputBase-root .MuiInputBase-inputAdornedEnd
+.MuiInputBase-root.MuiInputBase-adornedEnd > .MuiInputBase-input
-.MuiInputBase-root .MuiInputBase-inputHiddenLabel
+.MuiInputBase-root.MuiInputBase-hiddenLabel > .MuiInputBase-input
npx @mui/codemod@latest deprecations/input-base-classes <path>

input-props

 <Input
-  components={{ Input: CustomInput, Root: CustomRoot }}
-  componentsProps={{ input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }}
+  slots={{ input: CustomInput, root: CustomRoot }}
+  slotProps={{ input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }}
 />
 MuiInput: {
   defaultProps: {
-    components: { Input: CustomInput, Root: CustomRoot }
-    componentsProps: { input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }
+    slots: { input: CustomInput, root: CustomRoot },
+    slotProps: { input: { id: 'test-input-id' }, root: { id: 'test-root-id' } },
   },
 },
npx @mui/codemod@latest deprecations/input-props <path>

linear-progress-classes

JS transforms:

 import { linearProgressClasses } from '@mui/material/LinearProgress';

 MuiLinearProgress: {
   styleOverrides: {
     root: {
-      [`&.${linearProgressClasses.bar1Buffer}`]: {},
+      [`&.${linearProgressClasses.buffer} > .${linearProgressClasses.bar1}`]: {},
-      [`&.${linearProgressClasses.bar1Determinate}`]: {},
+      [`&.${linearProgressClasses.determinate} > .${linearProgressClasses.bar1}`]: {},
-      [`&.${linearProgressClasses.bar1Indeterminate}`]: {},
+      [`&.${linearProgressClasses.indeterminate} > .${linearProgressClasses.bar1}`]: {},
-      [`&.${linearProgressClasses.bar2Buffer}`]: {},
+      [`&.${linearProgressClasses.buffer} > .${linearProgressClasses.bar2}`]: {},
-      [`&.${linearProgressClasses.bar2Indeterminate}`]: {},
+      [`&.${linearProgressClasses.indeterminate} > .${linearProgressClasses.bar2}`]: {},
-      [`&.${linearProgressClasses.barColorPrimary}`]: {},
+      [`&.${linearProgressClasses.colorPrimary} > .${linearProgressClasses.bar}`]: {},
-      [`&.${linearProgressClasses.barColorSecondary}`]: {},
+      [`&.${linearProgressClasses.colorSecondary} > .${linearProgressClasses.bar}`]: {},
-      [`&.${linearProgressClasses.dashedColorPrimary}`]: {},
+      [`&.${linearProgressClasses.colorPrimary} > .${linearProgressClasses.dashed}`]: {},
-      [`&.${linearProgressClasses.dashedColorSecondary}`]: {},
+      [`&.${linearProgressClasses.colorSecondary} > .${linearProgressClasses.dashed}`]: {},
     },
   },
  }

CSS transforms:

-.MuiLinearProgress-bar1Buffer
+.MuiLinearProgress-buffer > .MuiLinearProgress-bar1
-.MuiLinearProgress-bar1Determinate
+.MuiLinearProgress-determinate > .MuiLinearProgress-bar1
-.MuiLinearProgress-bar1Indeterminate
+.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar1
-.MuiLinearProgress-bar2Buffer
+.MuiLinearProgress-buffer > .MuiLinearProgress-bar2
-.MuiLinearProgress-bar2Indeterminate
+.MuiLinearProgress-indeterminate > .MuiLinearProgress-bar2
-.MuiLinearProgress-barColorPrimary
+.MuiLinearProgress-colorPrimary > .MuiLinearProgress-bar
-.MuiLinearProgress-barColorSecondary
+.MuiLinearProgress-colorSecondary > .MuiLinearProgress-bar
-.MuiLinearProgress-dashedColorPrimary
+.MuiLinearProgress-colorPrimary > .MuiLinearProgress-dashed
-.MuiLinearProgress-dashedColorSecondary
+.MuiLinearProgress-colorSecondary > .MuiLinearProgress-dashed
npx @mui/codemod@latest deprecations/linear-progress-classes <path>
 <Modal
-  components={{ Root: CustomRoot, Backdrop: CustomBackdrop }}
-  componentsProps={{ root: { testid: 'root-id' }, backdrop: { testid: 'backdrop-id' } }}
+  slots={{ root: CustomRoot, backdrop: CustomBackdrop }}
+  slotProps={{ root: { testid: 'root-id' }, backdrop: { testid: 'backdrop-id' } }}
 />
 MuiModal: {
   defaultProps: {
-    components: { Root: CustomRoot, Backdrop: CustomBackdrop }
-    componentsProps: { root: { testid: 'root-id' }, backdrop: { testid: 'backdrop-id' }}
+    slots: { root: CustomRoot, backdrop: CustomBackdrop },
+    slotProps: { root: { testid: 'root-id' }, backdrop: { testid: 'backdrop-id' } },
  },
 },
npx @mui/codemod@latest deprecations/modal-props <path>

mobile-stepper-props

 <MobileStepper
-  LinearProgressProps={{ color: 'primary' }}
+  slotProps={{ progress: { color: 'primary' } }}
 />
npx @mui/codemod@latest deprecations/mobile-stepper-props <path>

pagination-item-classes

JS transforms:

 import { paginationItemClasses } from '@mui/material/PaginationItem';

 MuiPaginationItem: {
   styleOverrides: {
     root: {
-      [`&.${paginationItemClasses.textPrimary}`]: {
+      [`&.${paginationItemClasses.text}.${paginationItemClasses.colorPrimary}`]: {
         color: 'red',
       },
-      [`&.${paginationItemClasses.textSecondary}`]: {
+      [`&.${paginationItemClasses.text}.${paginationItemClasses.colorSecondary}`]: {
         color: 'red',
       },
-      [`&.${paginationItemClasses.outlinedPrimary}`]: {
+      [`&.${paginationItemClasses.outlined}.${paginationItemClasses.colorPrimary}`]: {
         color: 'red',
       },
-      [`&.${paginationItemClasses.outlinedSecondary}`]: {
+      [`&.${paginationItemClasses.outlined}.${paginationItemClasses.colorSecondary}`]: {
         color: 'red',
       },
-      '&.MuiPaginationItem-textPrimary': {
+      '&.MuiPaginationItem-text.MuiPaginationItem-colorPrimary': {
         color: 'red',
       },
-      '&.MuiPaginationItem-textSecondary': {
+      '&.MuiPaginationItem-text.MuiPaginationItem-colorSecondary': {
         color: 'red',
       },
-      '&.MuiPaginationItem-outlinedPrimary': {
+      '&.MuiPaginationItem-outlined.MuiPaginationItem-colorPrimary': {
         color: 'red',
       },
-      '&.MuiPaginationItem-outlinedSecondary': {
+      '&.MuiPaginationItem-outlined.MuiPaginationItem-colorSecondary': {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiPaginationItem-textPrimary
+.MuiPaginationItem-text.MuiPaginationItem-primary
-.MuiPaginationItem-textSecondary
+.MuiPaginationItem-text.MuiPaginationItem-secondary
-.MuiPaginationItem-outlinedPrimary
+.MuiPaginationItem-outlined.MuiPaginationItem-primary
-.MuiPaginationItem-outlinedSecondary
+.MuiPaginationItem-outlined.MuiPaginationItem-secondary
npx @mui/codemod@latest deprecations/pagination-item-classes <path>

pagination-item-props

 <PaginationItem
-  components={{ first: FirstIcon, last: LastIcon, next: NextIcon, previous: PreviousIcons }}
+  slots={{ first: FirstIcon, last: LastIcon, next: NextIcon, previous: PreviousIcons }}
 />
 MuiPaginationItem: {
   defaultProps: {
-    components: { first: FirstIcon, last: LastIcon, next: NextIcon, previous: PreviousIcons }
+    slots: { first: FirstIcon, last: LastIcon, next: NextIcon, previous: PreviousIcons }
  },
 },
npx @mui/codemod@latest deprecations/pagination-item-props <path>

popper-props

 <Popper
-  components={{ Root: CustomRoot }}
-  componentsProps={{ root: { testid: 'test-id' } }}
+  slots={{ root: CustomRoot }}
+  slotProps={{ root: { testid: 'test-id' } }}
 />
 MuiPopper: {
   defaultProps: {
-    components: { Root: CustomRoot }
-    componentsProps: { root: { testid: 'test-id' }}
+    slots: { root: CustomRoot },
+    slotProps: { root: { testid: 'test-id' } },
  },
 },
npx @mui/codemod@latest deprecations/popper-props <path>

outlined-input-props

 <OutlinedInput
-  components={{ Input: CustomInput, Root: CustomRoot }}
-  componentsProps={{ input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }}
+  slots={{ input: CustomInput, root: CustomRoot }}
+  slotProps={{ input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }}
 />
 MuiOutlinedInput: {
   defaultProps: {
-    components: { Input: CustomInput, Root: CustomRoot }
-    componentsProps: { input: { id: 'test-input-id' }, root: { id: 'test-root-id' } }
+    slots: { input: CustomInput, root: CustomRoot },
+    slotProps: { input: { id: 'test-input-id' }, root: { id: 'test-root-id' } },
   },
 },
npx @mui/codemod@latest deprecations/outlined-input-props <path>

rating-props

 <Rating
-  IconContainerComponent={CustomContainer}
+  slots={{
+    icon: { component: CustomContainer }
+  }}
 />
npx @mui/codemod deprecations/rating-props <path>

select-classes

JS transforms:

 import { selectClasses } from '@mui/material/Select';

 MuiSelect: {
   styleOverrides: {
     root: {
-      [`& .${selectClasses.iconFilled}`]: {
+      [`& .${selectClasses.filled} ~ .${selectClasses.icon}`]: {
         color: 'red',
       },
-      [`& .${selectClasses.iconOutlined}`]: {
+      [`& .${selectClasses.outlined} ~ .${selectClasses.icon}`]: {
         color: 'red',
       },
-      [`& .${selectClasses.iconStandard}`]: {
+      [`& .${selectClasses.standard} ~ .${selectClasses.icon}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

- .MuiSelect-iconFilled
+ .MuiSelect-filled ~ .MuiSelect-icon
- .MuiSelect-iconOutlined
+ .MuiSelect-outlined ~ .MuiSelect-icon
- .MuiSelect-iconStandard
+ .MuiSelect-standard ~ .MuiSelect-icon
npx @mui/codemod@latest deprecations/select-classes <path>

slider-props

 <Slider
-  components={{ Track: CustomTrack }}
-  componentsProps={{ track: { testid: 'test-id' } }}
+  slots={{ track: CustomTrack }}
+  slotProps={{ track: { testid: 'test-id' } }}
 />
 MuiSlider: {
   defaultProps: {
-    components: { Track: CustomTrack }
-    componentsProps: { track: { testid: 'test-id' }}
+    slots: { track: CustomTrack },
+    slotProps: { track: { testid: 'test-id' } },
  },
 },
npx @mui/codemod@latest deprecations/slider-props <path>

snackbar-props

 <Snackbar
-    ClickAwayListenerProps={CustomClickAwayListenerProps}
-    ContentProps={CustomContentProps}
-    TransitionComponent={CustomTransition}
-    TransitionProps={CustomTransitionProps}
+    slots={{ transition: CustomTransition }}
+    slotProps={{
+        clickAwayListener: CustomClickAwayListenerProps,
+        content: CustomContentProps,
+        transition: CustomTransitionProps
+    }}
 />
npx @mui/codemod deprecations/snackbar-props <path>

slider-classes

JS transforms:

 import { sliderClasses } from '@mui/material/Slider';

 MuiSlider: {
   styleOverrides: {
     root: {
-      [`& .${sliderClasses.thumbSizeSmall}`]: {
+      [`&.${sliderClasses.sizeSmall} > .${sliderClasses.thumb}`]: {
         color: 'red',
       },
-      [`& .${sliderClasses.thumbSizeMedium}`]: {
+      [`&.${sliderClasses.sizeMedium} > .${sliderClasses.thumb}`]: {
         color: 'red',
       },
-      [`& .${sliderClasses.thumbColorPrimary}`]: {
+      [`&.${sliderClasses.colorPrimary} > .${sliderClasses.thumb}`]: {
         color: 'red',
       },
-      [`& .${sliderClasses.thumbColorSecondary}`]: {
+      [`&.${sliderClasses.colorSecondary} > .${sliderClasses.thumb}`]: {
         color: 'red',
       },
-      [`& .${sliderClasses.thumbColorError}`]: {
+      [`&.${sliderClasses.colorError} > .${sliderClasses.thumb}`]: {
         color: 'red',
       },
-      [`& .${sliderClasses.thumbColorInfo}`]: {
+      [`&.${sliderClasses.colorInfo} > .${sliderClasses.thumb}`]: {
         color: 'red',
       },
-      [`& .${sliderClasses.thumbColorSuccess}`]: {
+      [`&.${sliderClasses.colorSuccess} > .${sliderClasses.thumb}`]: {
         color: 'red',
       },
-      [`& .${sliderClasses.thumbColorWarning}`]: {
+      [`&.${sliderClasses.colorWarning} > .${sliderClasses.thumb}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiSlider-root .MuiSlider-thumbSizeSmall
+.MuiSlider-root.MuiSlider-sizeSmall > .MuiSlider-thumb
-.MuiSlider-root .MuiSlider-thumbSizeMedium
+.MuiSlider-root.MuiSlider-sizeMedium > .MuiSlider-thumb
-.MuiSlider-root .MuiSlider-thumbColorPrimary
+.MuiSlider-root.MuiSlider-colorPrimary > .MuiSlider-thumb
-.MuiSlider-root .MuiSlider-thumbColorSecondary
+.MuiSlider-root.MuiSlider-colorSecondary > .MuiSlider-thumb
-.MuiSlider-root .MuiSlider-thumbColorError
+.MuiSlider-root.MuiSlider-colorError > .MuiSlider-thumb
-.MuiSlider-root .MuiSlider-thumbColorInfo
+.MuiSlider-root.MuiSlider-colorInfo > .MuiSlider-thumb
-.MuiSlider-root .MuiSlider-thumbColorSuccess
+.MuiSlider-root.MuiSlider-colorSuccess > .MuiSlider-thumb
-.MuiSlider-root .MuiSlider-thumbColorWarning
+.MuiSlider-root.MuiSlider-colorWarning > .MuiSlider-thumb
npx @mui/codemod@latest deprecations/slider-classes <path>

tooltip-props

 <Tooltip
-  components={{ Arrow: CustomArrow }}
-  componentsProps={{ arrow: { testid: 'test-id' } }}
-  PopperComponent={CustomPopperComponent}
-  TransitionComponent={CustomTransitionComponent}
-  PopperProps={CustomPopperProps}
-  TransitionProps={CustomTransitionProps}
+  slots={{
+    arrow: CustomArrow,
+    popper: CustomPopperComponent,
+    transition: CustomTransitionComponent,
+  }}
+  slotProps={{
+    arrow: { testid: 'test-id' },
+    popper: CustomPopperProps,
+    transition: CustomTransitionProps,
+  }}
 />
 MuiTooltip: {
   defaultProps: {
-    PopperComponent: CustomPopperComponent,
-    TransitionComponent: CustomTransitionComponent,
-    PopperProps: CustomPopperProps,
-    TransitionProps: CustomTransitionProps,
-    components: { Arrow: CustomArrow }
+    slots: {
+      arrow: CustomArrow,
+      popper: CustomPopperComponent,
+      transition: CustomTransitionComponent,
+    },
-    componentsProps: { arrow: { testid: 'test-id' }}
+    slotProps: {
+      arrow: { testid: 'test-id' },
+      popper: CustomPopperProps,
+      transition: CustomTransitionProps,
+    },
   },
 },
npx @mui/codemod@latest deprecations/tooltip-props <path>

step-connector-classes

JS transforms:

 import { stepConnectorClasses } from '@mui/material/StepConnector';

 MuiStepConnector: {
   styleOverrides: {
     root: {
-      [`& .${stepConnectorClasses.lineHorizontal}`]: {
+      [`&.${stepConnectorClasses.horizontal} > .${stepConnectorClasses.line}`]: {
         color: 'red',
       },
-      [`& .${stepConnectorClasses.lineVertical}`]: {
+      [`&.${stepConnectorClasses.vertical} > .${stepConnectorClasses.line}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiStepConnector-lineHorizontal
+.MuiStepConnector-horizontal > .MuiStepConnector-line
-.MuiStepConnector-lineVertical
+.MuiStepConnector-vertical > .MuiStepConnector-line
npx @mui/codemod deprecations/step-connector-classes <path>

step-content-props

 <StepContent
-  TransitionComponent={CustomTransition}
-  TransitionProps={{ unmountOnExit: true }}
+  slots={{ transition: CustomTransition }}
+  slotProps={{ transition: { unmountOnExit: true } }}
 />
npx @mui/codemod@latest deprecations/step-content-props <path>

step-label-props

 <StepLabel
-  componentsProps={{ label: labelProps }}
+  slotProps={{ label: labelProps }}
-  StepIconComponent={StepIconComponent}
+  slots={{ stepIcon: StepIconComponent }}
-  StepIconProps={StepIconProps}
+  slotProps={{ stepIcon: StepIconProps }}
 />
 MuiStepLabel: {
   defaultProps: {
-  componentsProps:{ label: labelProps }
+  slotProps:{ label: labelProps }
-  StepIconComponent:StepIconComponent
+  slots:{ stepIcon: StepIconComponent }
-  StepIconProps:StepIconProps
+  slotProps:{ stepIcon: StepIconProps }
  },
 },
npx @mui/codemod@latest deprecations/step-label-props <path>

text-field-props

 <TextField
-  InputProps={CustomInputProps}
-  inputProps={CustomHtmlInputProps}
-  SelectProps={CustomSelectProps}
-  InputLabelProps={CustomInputLabelProps}
-  FormHelperTextProps={CustomFormHelperProps}
+  slotProps={{
+    input: CustomInputProps,
+    htmlInput: CustomHtmlInputProps,
+    select: CustomSelectProps,
+    inputLabel: CustomInputLabelProps,
+    formHelper: CustomFormHelperProps,
+  }}
 />
npx @mui/codemod@latest deprecations/text-field-props <path>

toggle-button-group-classes

JS transforms:

 import { toggleButtonGroupClasses } from '@mui/material/ToggleButtonGroup';

 MuiToggleButtonGroup: {
   styleOverrides: {
     root: {
-      [`& .${toggleButtonGroupClasses.groupedHorizontal}`]: {
+      [`&.${toggleButtonGroupClasses.horizontal} > .${toggleButtonGroupClasses.grouped}`]: {
         color: 'red',
       },
-      [`& .${toggleButtonGroupClasses.groupedVertical}`]: {
+      [`&.${toggleButtonGroupClasses.vertical} > .${toggleButtonGroupClasses.grouped}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiToggleButtonGroup-root .MuiToggleButtonGroup-groupedHorizontal
+.MuiToggleButtonGroup-root.MuiToggleButtonGroup-horizontal > .MuiToggleButtonGroup-grouped
-.MuiToggleButtonGroup-root .MuiToggleButtonGroup-groupedVertical
+.MuiToggleButtonGroup-root.MuiToggleButtonGroup-vertical > .MuiToggleButtonGroup-grouped
npx @mui/codemod@latest deprecations/toggle-button-group-classes <path>

tab-classes

JS transforms:

 import { tabClasses } from '@mui/material/Tab';

 MuiTab: {
   styleOverrides: {
     root: {
-      [`& .${tabClasses.iconWrapper}`]: {
+      [`& .${tabClasses.icon}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiTab-iconWrapper
+.MuiTab-icon
npx @mui/codemod@latest deprecations/tab-classes <path>

table-sort-label-classes

JS transforms:

 import { tableSortLabelClasses } from '@mui/material/TableSortLabel';

 MuiTableSortLabel: {
   styleOverrides: {
     root: {
-      [`& .${tableSortLabelClasses.iconDirectionDesc}`]: {
+      [`&.${tableSortLabelClasses.directionDesc} > .${tableSortLabelClasses.icon}`]: {
         color: 'red',
       },
-      [`& .${tableSortLabelClasses.iconDirectionAsc}`]: {
+      [`&.${tableSortLabelClasses.directionAsc} > .${tableSortLabelClasses.icon}`]: {
         color: 'red',
       },
     },
   },
 },

CSS transforms:

-.MuiTableSortLabel-iconDirectionDesc
+.MuiTableSortLabel-directionDesc > .MuiTableSortLabel-icon
-.MuiTableSortLabel-iconDirectionAsc
+.MuiTableSortLabel-directionAsc > .MuiTableSortLabel-icon
npx @mui/codemod@latest deprecations/table-sort-label-classes <path>

typography-props

 <Typography
-  paragraph
+  sx={{ marginBottom: '16px' }}
 />
 <Typography
-  paragraph={isTypographyParagraph}
+  sx={isTypographyParagraph ? { marginBottom: '16px' } : undefined}
 />
 MuiTypography: {
   defaultProps: {
-    paragraph: true
+    sx: { marginBottom: '16px' },
   },
 },
npx @mui/codemod@latest deprecations/typography-props <path>

v7.0.0

grid-props

npx @mui/codemod v7.0.0/grid-props <path>

Updates the usage of the @mui/material/Grid, @mui/system/Grid, and @mui/joy/Grid components to their updated APIs.

 <Grid
-   xs={12}
-   sm={6}
-   xsOffset={2}
-   smOffset={3}
+   size={{ xs: 12, sm: 6 }}
+   offset={{ xs: 2, sm: 3 }}
 />

You can provide the theme breakpoints via options, for example, --jscodeshift='--muiBreakpoints=mobile,desktop', to use your custom breakpoints in the transformation.

npx @mui/codemod v7.0.0/grid-props <path> --jscodeshift='--muiBreakpoints=mobile,desktop'
- <Grid mobile={12} mobileOffset={2} desktop={6} desktopOffset={4} >
+ <Grid size={{ mobile: 12, desktop: 6 }} offset={{ mobile: 2, desktop: 4 }} >

lab-removed-components

npx @mui/codemod v7.0.0/lab-removed-components <path>

Update the import of the following components and hook moved from @mui/lab to @mui/material:

  • Alert
  • AlertTitle
  • Autocomplete
  • AvatarGroup
  • Pagination
  • PaginationItem
  • Rating
  • Skeleton
  • SpeedDial
  • SpeedDialAction
  • SpeedDialIcon
  • ToggleButton
  • ToggleButtonGroup
  • usePagination

It updates named imports from top-level @mui/lab:

- import { Alert } from '@mui/lab';
+ import { Alert } from '@mui/material';

As well as default and named imports from component-level files:

- import Alert, { alertClasses } from '@mui/lab/Alert';
+ import Alert, { alertClasses } from '@mui/material/Alert';

input-label-size-normal-medium

Updates the InputLabel's size value from normal to medium.

-<InputLabel size="normal">Label</InputLabel>
+<InputLabel size="medium">Label</InputLabel>
npx @mui/codemod v7.0.0/input-label-size-normal-medium <path>

You can find more details about this breaking change in the migration guide.

v6.0.0

sx-prop

npx @mui/codemod@latest v6.0.0/sx-prop <path>

Update the usage of the sx prop to be compatible with @pigment-css/react.

 <Box
-  sx={{
-    backgroundColor: (theme) =>
-      theme.palette.mode === 'light' ? theme.palette.grey[100] : theme.palette.grey[900],
-  }}
+  sx={theme => ({
+    backgroundColor: theme.palette.grey[900],
+    ...theme.applyStyles("light", {
+      backgroundColor: theme.palette.grey[100]
+    })
+  })}
 />

system-props

npx @mui/codemod@latest v6.0.0/system-props <path>

Remove system props and add them to the sx prop.

-<Box ml="2px" py={1} color="primary.main" />
+<Box sx={{ ml: '2px', py: 1, color: 'primary.main' }} />

theme-v6

npx @mui/codemod@latest v6.0.0/theme-v6 <path>

Update the theme creation from @mui/system@v5 to be compatible with @pigment-css/react.

  • replace palette mode conditional with theme.applyStyles()
  • replace ownerState with variants
  • move theme variants to the root slot

`diff createTheme({ components: { MuiButton: {

  • variants: [
  • {
  • props: { color: 'primary' },
  • style: {
  • color: 'red',
  • },
  • },
  • ], styleOverrides: {
  • root: ({ theme, ownerState }) => ({
  • root: ({ theme }) => ({ ...ownerState.variant === 'contained' && { backgroundColor: alpha(theme.palette.primary.main, 0.8), ...theme.palette.mode === 'dark' && {
     backgroundColor: alpha(theme.palette.primary.light, 0.9),
    } },
  • variants: [
  • {
  • prop: { variant: 'contained' },
  • style: {
  • backgroundColor: alpha(theme.palette.primary.main, 0.8),
  • },
  • },
  • {
  • prop: { variant: 'contained' },
  • style: {
  • ...theme.applyStyles('dark', {
  • backgroundColor: alpha(theme.palette.primary.light, 0.9),
  • })
  • },
  • },
  • {
  • prop: { co

changelog

Versions

7.1.1

May 30, 2025

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

@mui/material@7.1.1

  • [Autocomplete] Fix label shrink issue when renderValue is used with empty array in multiple mode (#46047) @ZeeshanTamboli
  • [Autocomplete] Prevent renderValue from being skipped when value is 0 (#46145) @LakshitAgarwal
  • [Autocomplete] Add note in JSDoc for non-TextField components in renderInput (#46141) @khllbnomrn
  • [Chip] Add slots and slotProps (#46098) @sai6855
  • [Menu] Remove depreacted MenuListProps from demos (#46144) @sai6855
  • [TablePaginationActions] Export TablePaginationActions as new component (#46149) @sai6855
  • [SnackbarContent] Fix square prop not working (#46196) @0210shivam
  • [SnackbarContent] Fix error when theme value is CSS variable (#46198) @0210shivam

@mui/codemod@7.1.1

  • Add package name option (#45977) @siriwatknp

@mui/system@7.1.1

  • Skip styled component from being transformed (#46129) @siriwatknp
  • Update the type for borderRadius (#46154) @codiini

@mui/styled-engine@7.1.1

  • Fix variant props callback type to spread ownerState (#46187) @siriwatknp

@mui/stylis-plugin-rtl@7.1.1

  • Fix RTL does not work with CSS layer with a new package (#46230) @siriwatknp

Docs

  • [Dialog] Remove deprecated TransitionComponent from demo (#46185) @sai6855
  • [Grid] Remove direction column and column-reverse from the demo (#46127) @0210shivam
  • [Grid] Update grid migration guide (#46057) @sai6855
  • [templates] Fix rendering of logos in dark mode (#46221) @sai6855
  • [ToggleButtonGroup] Add spacing demo (#46058) @sai6855
  • Fix typo in dark mode docs (#46229) @ZeeshanTamboli
  • Clarify Next.js + Tailwind CSS v3 integration requirements (#46176) @chaitanyasharma1011
  • Fix GridLegacy docs order (#46135) @oliviertassinari
  • Update upgrade guide for resolution of react-is (#46002) @siriwatknp
  • Remove oudated scaffoldhub ad (#46090) @oliviertassinari
  • Show how to target global state classes with CSS Modules (#45992) @RubemMazzetto

Core

  • [code-infra] Add plugin to check for index file access (#46178) @Janpot
  • [code-infra] Bump eslint to v9 (#46222) @brijeshb42
  • [code-infra] Move packages to mui/mui-public (#46155) @Janpot
  • [code-infra] Move chai to peerDep (#46227) @JCQuintas
  • [code-infra] Avoid loading barrel file during type checking (#46177) @Janpot
  • [code-infra] Remove unnecessary ref from HighlightedCode component (#46151) @ZeeshanTamboli
  • [code-infra] Import mocha type instead of global (#46108) @JCQuintas
  • [code-infra] Dependabot also create branches (795a481) @oliviertassinari
  • [code-infra] Avoid running continuous release on forks (#46103) @Janpot
  • [code-infra] Remove checkout job altogether (#46100) @Janpot
  • [code-infra] Remove required checkout workflows in circleci (#46099) @Janpot
  • Run pnpm docs:sync-team (c8f1da5) @oliviertassinari
  • Upgrade MUI X packages to v8 (#45990) @KenanYusuf
  • Minor detail to reduce confusion (4c64b72) @oliviertassinari
  • Update security.md (#45839) @DiegoAndai
  • Apply yml convention, blank line only at top level (f273220) @oliviertassinari
  • Add comment that lab should be in alpha (#45999) @oliviertassinari

All contributors of this release in alphabetical order: @0210shivam, @brijeshb42, @chaitanyasharma1011, @codiini, @DiegoAndai, @Janpot, @JCQuintas, @KenanYusuf, @khllbnomrn, @LakshitAgarwal, @oliviertassinari, @RubemMazzetto, @sai6855, @siriwatknp, @ZeeshanTamboli

7.1.0

May 6, 2025

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

  • 🎉 Material UI now works with Tailwind CSS v4! Check out the setup guide.

@mui/material@7.1.0

  • [InputBase] Text cursor jumps several lines up when inserting text fragment with new line at the end (#45246) @yermartee
  • [OutlinedInput] Add missing notchedOutline slot (#45917) @siriwatknp
  • [Snackbar] Skip default onClickAway behavior when defaultMuiPrevented is provided (#45629) @sai6855
  • [Avatar] Fix img slot types and add missing slots (#45483) @siriwatknp
  • [Badge] Replace useSlotProps with useSlot hook (#45871) @sai6855
  • [BottomNavigationAction] Add slots and slotProps (#45776) @sai6855
  • [CardActionArea] Add slots and slotProps (#45866) @sai6855
  • [useMediaQuery] Add warning and docs for using useMediaQuery('print') (#44790) @good-jinu
  • Remove unnecessary clsx usages (#46084) @sai6855
  • Corrected generic type definition in SelectChangeEvent (#45941) @SuyashShukla0007
  • Fix theme object changes between renders (#45863) @siriwatknp

@mui/material-nextjs@7.1.0

  • Add option to enable CSS layers for pages router (#45596) @siriwatknp
  • Do not wrap @layer order rules in App Router (#45864) @Nayeem-XTREME

@mui/system@7.1.0

  • Fix @mui/system types organization (#45860) @Janpot

@mui/styled-engine@7.1.0

  • Infer ownerState from props in styled (#46083) @siriwatknp
  • Fix style overrides variants type (#45478) @siriwatknp

Docs

  • [Avatar] Add avatar upload demo (#45986) @Demianeen
  • [Dialog] Remove deprecated props usage in demos (#45923) @sai6855
  • [Menu] Update paper slot JSDoc default from Paper to PopoverPaper (#45722) @andreachiera
  • [examples] Remove create-react-app usages (#45426) @CodeLeom
  • Add AccordionSummary to the v5 breaking change migration (#45947) @siriwatknp
  • Update CSS variable usage in migration guide for Pigment CSS (#46033) @sai6855
  • Fix docs API dark mode color (#46086) @alexfauquette
  • Add a guide for extending Material UI classes in Tailwind CSS (#46039) @siriwatknp
  • Add InitColorSchemeScript docs and API (#45927) @siriwatknp
  • Add Tailwind CSS v4 integration guide (#45906) @siriwatknp
  • Fix 301 links to the system v6 (#45931) @oliviertassinari
  • Add notification for MUI X v8 announcement (#45942) @joserodolfofreitas
  • Fix som 301 redirections (ae84b35) @oliviertassinari
  • Fix some 301 redirections (057384e) @oliviertassinari
  • Fix logo is not centered on small screens (#45920) @crabsim
  • Fix line break typo (a2a62d5) @oliviertassinari
  • Fix markdown typo in templates.md (#45914) @scyzoryck
  • Add Next.js App Router guide for custom classnames (#45852) @siriwatknp

Core

  • [code-infra] Give a stable name to dev tool app (3889ded) @oliviertassinari
  • [code-infra] Normalize author package in org (8135638) @oliviertassinari
  • [code-infra] Correct some manually curated .d.ts files (#46054) @Janpot
  • [code-infra] Align deps versions (#46048) @Janpot
  • [code-infra] Fix dynamic import in imports resolver (#46046) @Janpot
  • [code-infra] Eliminate @mui/utils deep imports (#46004) @Janpot
  • [code-infra] Expand renovate.json for react types (#45935) @Janpot
  • [code-infra] Make Argos upload script reusable (#45883) @Janpot
  • [code-infra] Disallow redundant window prefixes for globals (#45880) @Janpot
  • [code-infra] Remove type generation of modern build (#45912) @Janpot
  • [code-infra] Clean up bundle size checker (#45622) @Janpot
  • [code-infra] Fix StrictMode effects not being called twice in React 19 tests (#45812) @bernardobelchior
  • [code-infra] Convert @mui/utils to typescript (#45671) @Janpot
  • [docs-infra] Improve export into sandbox package.json (#46044) @oliviertassinari
  • [docs-infra] Update feedback Node.js to v22 (#46064) @oliviertassinari
  • [docs-infra] Normalize netlify.toml in org (b101d5c) @oliviertassinari
  • [docs-infra] Uniformize Vale between repositories (0f79796) @oliviertassinari
  • [docs-infra] Fix Vale no longer working (#46029) @oliviertassinari
  • [docs-infra] Remove demo styling switch (#45926) @Janpot
  • [docs-infra] StackBlitz WebContainer demos (#45924) @Janpot
  • [docs-infra] Fix feedback management (#45872) @alexfauquette
  • [test] Replace playwright with @playwright/test (#45998) @ZeeshanTamboli
  • Fix internal version duplication (#46051) @oliviertassinari
  • Avoid the need for @mui/material/themeCssVarsAugmentation (#46053) @Janpot
  • Add security label to dependabot PRs (0a5c027) @oliviertassinari
  • Remove unecessary versions (#46034) @oliviertassinari
  • Remove redundant overrides resolver (#45970) @romgrk
  • Fix duplicate branch reference (#45915) @oliviertassinari
  • Fix outdated <link rel="shortcut icon" (#45916) @oliviertassinari
  • Fix redirection chains (#45930) @oliviertassinari
  • Run pnpm docs:sync-team (beee09f) @oliviertassinari
  • Add pkg.pr.new publishing (#42984) @Aslemammad
  • Remove @mui/base from the master branch (#45857) @mnajdova

All contributors of this release in alphabetical order: @alexfauquette, @andreachiera, @Aslemammad, @bernardobelchior, @CodeLeom, @crabsim, @Demianeen, @good-jinu, @Janpot, @joserodolfofreitas, @mnajdova, @Nayeem-XTREME, @oliviertassinari, @renovate[bot], @romgrk, @sai6855, @scyzoryck, @siriwatknp, @SuyashShukla0007, @yermartee, @ZeeshanTamboli

7.0.2

Apr 9, 2025

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

@mui/material@7.0.2

  • [Autocomplete] Add ability to render custom single value (#45387) @ZeeshanTamboli
  • [Autocomplete] Prevent shrink animation in controlled Autocomplete when initial value is provided (#45734) @imadx
  • [AvatarGroup] Fix spacing prop ignoring value 0 (#45799) @Kartik-Murthy
  • [Dialog] Deprecate composed classes (#45418) @sai6855

@mui/material-nextjs@7.0.2

  • Fix nonce issues (#45794) @Janpot
  • Add warnings to nextjs router integration (#45778) @Janpot

@mui/styled-engine@7.0.2

  • Added caching to StyledEngineProvider to improve performance for running tests with Jest (#45846) @siriwatknp

Core

  • [blog] Improve upvote video (0646444) @oliviertassinari
  • [code-infra] Remove webpack aliases (#45841) @Janpot
  • [code-infra] Remove .tsbuildinfo from build folder (#45727) @Janpot
  • [code-infra] Stabilize theme viewer screenshot tests (#45768) @Janpot
  • [code-infra] Remove modern bundles (#45808) @Janpot
  • Update buildTypes script to optionally remove css imports (#45835) @brijeshb42
  • Allow repo to be accepted as an argument for releaseTag (#45801) @brijeshb42
  • Update scripts to support base-ui (#45784) @brijeshb42
  • Sync scorecards.yml across codebase (4de5076) @oliviertassinari
  • Remove baseUrl and skipLibCheck (#45806) @Janpot
  • [docs-infra] Fix redirect styles pages (#45848) @siriwatknp
  • [docs-infra] Remove false-positive Vale rules (#45843) @oliviertassinari
  • [docs-infra] Make sure Next.js can find package.json through its aliases (#45840) @Janpot
  • [docs-infra] Fix Next.js brand name coverage (6915f8d) @oliviertassinari
  • [docs-infra] Fix layout shift between MIT and commercial pages (#45760) @oliviertassinari
  • [docs-infra] Non breaking space for ESM (#45758) @oliviertassinari
  • [support-infra] Remove dead 'workflow_call:' (#45736) @oliviertassinari
  • [utils] Support cleanup callbacks in useForkRef (#45621) @DiegoAndai

Docs

  • Fix pigment vite integration example (#44746) @brijeshb42
  • Update migration instructions and codemod references for deprecated APIs (#45793) @sai6855
  • Add TanStack Router routing example (#44930) @vetledv
  • Fix layout shifting in icons page (#45779) @sai6855
  • Fix migration instructions (#45762) @oliviertassinari
  • Fix wrong TypeScript support version (#45761) @oliviertassinari
  • Fix link to mui-joy/src/styles/components.d.ts (#45763) @oliviertassinari
  • Fix 301 link (ae94c40) @oliviertassinari
  • Fix 301 links (abd8f63) @oliviertassinari
  • Fix 301 redirection (c7658de) @oliviertassinari
  • [nextjs] Migrate from deprecated "legacyBehavior" prop (#44871) @oliviertassinari
  • [nextjs] Document CSP for Next.js Pages Router (#45798) @Grohden

All contributors of this release in alphabetical order: @brijeshb42, @DiegoAndai, @Grohden, @imadx, @Janpot, @Kartik-Murthy, @oliviertassinari, @renovate[bot], @sai6855, @siriwatknp, @vetledv, @ZeeshanTamboli

7.0.1

Mar 28, 2025

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

@mui/material@7.0.1

  • Export ThemeProviderProps (#45701) @aarongarciah
  • [Fab] Fix default variant text color when using CSS vars (#45714) @aarongarciah
  • Remove mention of v7 in deprecation messages (#45708) @DiegoAndai
  • [Popover] Allow null in anchorEl function return type (#45045) @eduter
  • Fix missing CSSProperties/MixinOptions types (#45706) @Janpot

@mui/icons-material@7.0.1

  • [code-infra] Fix icon-material type resolution under moduleResolution: "node" (#45704) @Janpot
  • Bring back individual icon dts (#45711) @Janpot

Core

  • Improve the release instructions (#45688) @mnajdova

Docs

  • Fix Masonry and Toolpad dark mode demos (#45721) @siriwatknp
  • Update v7 related copy (#45716) @aarongarciah
  • Avoid unwanted undefined in page title (#45718) @aarongarciah
  • Fix joy templates error (#45715) @siriwatknp
  • Rename GitHub icon import (#45709) @micttyoid
  • Fix Safari issue in dark mode (#45696) @mnajdova
  • Fix Grid, GridLegacy, Stack, Badge, Select, Autocomplete demos CSS variables (#45693) @DiegoAndai
  • Add "Material UI v7 is here" to the notifications (#45694) @DiegoAndai
  • Fix Breadcrumbs, List, Divider, and Typography dark mode demos (#45692) @siriwatknp
  • Fix Material Icons page in dark mode (#45691) @mnajdova

All contributors of this release in alphabetical order: @aarongarciah, @DiegoAndai, @eduter, @Janpot, @micttyoid, @mnajdova, @siriwatknp

7.0.0

Mar 26, 2025

🎉 We're happy to announce the stable release of v7.

@mui/material@7.0.0

  • [Autocomplete] Fix when onHighlightChange is called (#45438) @ZeeshanTamboli
  • [Tabs] Fix modifier keys + Left/Right Arrow key from being consumed by tab navigation (#45345) @mushfiqbh
  • Update minimum TypeScript support to 4.9 (#45535) @siriwatknp

@mui/system@7.0.0

  • [system] Fix palette mode does not change when not using CSS vars (#45660) @siriwatknp

@mui/lab@7.0.0-beta.9

  • [lab] Remove @mui/base dependency (#45602) @mnajdova

Docs

  • [docs] Fix unnecessary redirects for v7 (#45677) @Janpot
  • [docs] Fix new React project link, CRA deprecated (#45362) @oliviertassinari
  • [docs] Prepare the v7 upgrade guide for stable release (#45624) @DiegoAndai
  • [docs] Fix grammatical errors in support.md (#45631) @letianpailove
  • [docs] Update nextjs font optimization guide (#45600) @IshfaqAhmedProg
  • [docs] Deprecate Toolpad Studio (#45613) @Janpot
  • [docs] Sync the mode from page to demos #45661 @siriwatknp

Core

  • [blog] v7 stable release (#45623) @DiegoAndai
  • [code-infra] Disable flaky masonry screenshot (#45678) @Janpot
  • [code-infra] Migrate regression tests to vite (#44964) @Janpot
  • [code-infra] Update rollup (#45666) @Janpot
  • [code-infra] Support React.ComponentType in proptypes generation (#45664) @Janpot
  • [code-infra] Ensure translations.json is present in all @mui/docs package builds (#45626) @LukasTy
  • [code-infra] Improve Argos script debuggability (#45619) @Janpot
  • [code-infra] Reconfigure react-remove-properties babel plugin (#45218) @Janpot
  • [core] Prepare master for v7 stable (#45674) @DiegoAndai
  • [core] Improve instructions on changing domain (#45637) @mnajdova
  • [core] Deprecate ponyfillGlobal (#45606) @Janpot
  • [docs-infra] Restructure docs theme context to CSS variables (#45386) @siriwatknp
  • [styles] Remove code & docs (#45633) @mnajdova

All contributors of this release in alphabetical order: @DiegoAndai, @IshfaqAhmedProg, @Janpot, @letianpailove, @LukasTy, @mnajdova, @mushfiqbh, @oliviertassinari, @siriwatknp, @ZeeshanTamboli

7.0.0-rc.0

Mar 18, 2025

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

@mui/material@7.0.0-rc.0

  • [StepLabel] Add missing root slot (#45603) @sai6855
  • [Switch] Add slots and slotProps (#45595) @siriwatknp
  • [utils] Add merging function to mergeSlotProps utility (#45543) @siriwatknp

Core

  • [blog] Clarify the difference between the two Pro plans (#45266) @oliviertassinari
  • [code-infra] Allow specifying a custom error formatter module for error minifcation (#45291) @Janpot
  • [code-infra] Make getVersionEnvVariables reusable for other repos (#45562) @Janpot
  • [code-infra] Update peer dependency of @mui/utils in @mui/docs (#45561) @Janpot
  • Add StackBlitz template to issue template (#45504) @Janpot

All contributors of this release in alphabetical order: @Janpot, @oliviertassinari, @sai6855, @siriwatknp

7.0.0-beta.4

Mar 13, 2025

A big thanks to the 10 contributors who made this release possible. This release contains bug fixes 🐛 and improvements to the new package layout 🏗️.

@mui/material@7.0.0-beta.4

  • [Accordion] Add missing root slot (#45532) @sai6855
  • [AccordionSummary] Add slots and slotProps (#45559) @sai6855
  • [ListItemText] Add missing root slot (#45540) @sai6855
  • [SpeedDial] Add missing root slot (#45541) @sai6855
  • [Tooltip] Allow auto placement on tooltip (#45399) @Jtaks
  • [useScrollTrigger] Do nothing if target is null (#45441) @vipierozan99
  • [TextareaAutosize] Fix ResizeObserver causing infinite selectionchange loop (#45351) @mj12albert
  • Fix negative input for CSS variables spacing array (#45550) @siriwatknp
  • Add missing deprecations in deprecations-all file (#45505) @sai6855
  • Rename some @mui/material/styles/createTypography exports (#45558) @Janpot

@mui/icons-material@7.0.0-beta.4

  • Remove unused icon names from the download script (#45453) @yermartee

@mui/system@7.0.0-beta.4

  • Prevent nested non-vars theme inheritance (#45545) @siriwatknp
  • Disable theme recalculation as default behavior (#45405) @siriwatknp
  • Fix package layout inconsistencies (#45491) @DiegoAndai

@mui/styled-engine@7.0.0-beta.4

  • Add enableCssLayer prop to StyledEngineProvider (#45428) @siriwatknp

@mui/types@7.3.0

  • [code-infra] Fix type resolution for @mui/types (#45513) @Janpot

@mui/utils@7.0.0-beta.4

  • Fix package layout inconsistencies (#45491) @DiegoAndai
  • Use correct iri-reference homepage format (#45472) @dahiro

Docs

  • [Backdrop] Fix component name in migration guide (#45506) @sai6855
  • [TextField] Add HTML input section to TextField page (#45439) @siriwatknp

Core

  • [code-infra] Convert a few docs modules to ts (#45548) @Janpot
  • [code-infra] Remove more CJS modules from the docs (#45557) @Janpot
  • [code-infra] Remove nested imports from theme augmentation (#45514) @Janpot
  • [docs-infra] Add @ts-ignore to avoid type checking for MUI X (#45555) @siriwatknp
  • [blog] Fix author end-of-year updates (#45533) @oliviertassinari

All contributors of this release in alphabetical order: @dahiro, @DiegoAndai, @Janpot, @Jtaks, @mj12albert, @oliviertassinari, @sai6855, @siriwatknp, @vipierozan99, @yermartee

7.0.0-beta.3

Mar 5, 2025

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

@mui/material@7.0.0-beta.3

  • Fix moduleResolution:node for icons (#45444) @Janpot
  • [ThemeProvider] Add storageManager prop to ThemeProvider (#45136) @siriwatknp
  • [Radio] Fix inputProps not forwarded (#45471) @siriwatknp

@mui/codemod@7.0.0-beta.3

  • [codemod] Fix codemods not found (#45473) @DiegoAndai

All contributors of this release in alphabetical order: @DiegoAndai, @Janpot, @siriwatknp

7.0.0-beta.2

Feb 27, 2025

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

Core

  • [code-infra] Add package.json export (#45433) @Janpot
  • [blog] React 19 migration for MUI X (#45348) @arminmeh

All contributors of this release in alphabetical order: @arminmeh, @Janpot

7.0.0-beta.1

Feb 27, 2025

This release fixes incorrect build output from the previous release (beta.0).

Core

  • [code-infra] Fix build:types script omitting folders with a dot in their name (#45422) @Janpot
  • [release] Fix versions (#45420) @mj12albert

All contributors of this release in alphabetical order: @Janpot, @mj12albert

7.0.0-beta.0

Feb 26, 2025

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

@mui/material@7.0.0-beta.0

  • [Modal][Dialog] Remove deprecated onBackdropClick (#45395) @DiegoAndai
  • [Grid] Improve Grid2 upgrade experience (#45304) @DiegoAndai
  • [Grid] Rename to GridLegacy (#45363) @DiegoAndai
  • [Grid2] Rename to Grid (#45381) @DiegoAndai
  • Remove SvgIcon data-testid in production (#45333) @Janpot
  • Allow nested theme creation with vars (#45335) @siriwatknp
  • [Rating] Deprecate *Props and complete slots, slotProps (#45295) @harry-whorlow
  • [Slider] Fix css class selector in migration guide (#45402) @sai6855
  • [Slider] Fix spacings in .md files (#45388) @sai6855
  • [styles] Remove deprecated exports (#45397) @DiegoAndai
  • [Menu] Deprecate *Props and complete slots, slotProps (#44913) @siriwatknp
  • [StepButton] Remove StepIconButton type (#45396) @DiegoAndai

Docs

  • [Autocomplete] Remove unnecessary renderTags prop from Sizes demo (#45401) @ZeeshanTamboli
  • Add overriding-component-structure doc to Material UI (#45186) @siriwatknp
  • Fix typo in slider docs (#45390) @sai6855
  • Fix Context Menu selection lost on Safari (#44903) @NooBat

Core

  • [code-infra] Fix types for @mui/styled-engine (#45413) @Janpot
  • [docs-infra] Fix theme toggle call (#45400) @siriwatknp
  • [docs-infra] Add color-scheme to document in iframe demos (#45406) @KenanYusuf
  • [docs-infra] Revert to use deprecated CssVarsProvider for MUI X (#45371) @siriwatknp
  • [docs-infra] Fix dark mode flicker for API pages (#45354) @siriwatknp
  • [examples] Remove unnecessary comma in Material UI Vite JS example (#45370) @ZeeshanTamboli
  • [test] Remove unused renderTags prop and fix key warning in Autocomplete regression test (#45410) @ZeeshanTamboli

All contributors of this release in alphabetical order: @DiegoAndai, @harry-whorlow, @Janpot, @KenanYusuf, @NooBat, @sai6855, @siriwatknp, @ZeeshanTamboli

7.0.0-alpha.2

Feb 18, 2025

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

@mui/material@7.0.0-alpha.2

  • [Autocomplete] Remove legacy aria-owns attribute for combobox (#45302) @ZeeshanTamboli
  • [Button] Apply id only if loading indicator is present (#45296) @aarongarciah
  • [Hidden] Remove deprecated Hidden component (#45283) @DiegoAndai
  • [InputBase] Deprecate composed classes (#45234) @sai6855
  • [InputLabel] Changed size prop value from normal to medium (#45235) @perkrlsn
  • Fix slotProps.transition types (#45214) @siriwatknp

Docs

  • Fix broken links to MUI X docs (#45145) @mapache-salvaje
  • Add migration guide for package layout changes (#45222) @Janpot
  • [icons] Fix typo in material-icons.md (#45334) @a-s-russo

Core

  • Disallow access to esm/modern barrel files (#45332) @Janpot
  • [code-infra] Update elliptic (#45311) @Janpot
  • Update release guide to specify package bumping rules (#45294) @DiegoAndai

All contributors of this release in alphabetical order: @a-s-russo, @aarongarciah, @DiegoAndai, @Janpot, @mapache-salvaje, @perkrlsn, @sai6855, @siriwatknp, @ZeeshanTamboli

7.0.0-alpha.1

Feb 11, 2025

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

@mui/material@7.0.0-alpha.1

  • [Checkbox] Add slots and slotProps (#44974) @sai6855
  • [LinearProgress][CircularProgress] Add variant overrides for module augumentation (#45163) @kingflamez
  • [Drawer] Deprecate *Props and complete slots, slotProps (#44960) @siriwatknp
  • Fix wrong slotProps of DetailsHTMLAttributes types (#45215) @siriwatknp
  • [MobileStepper] deprecate LinearProgressProps and complete slots, slotProps (#45033) @siriwatknp
  • [Radio] Add slots and slotProps (#44972) @sai6855
  • [Radio] Remove empty line (#45184) @sai6855
  • [Slider] Deprecate composed classes (#45201) @sai6855
  • [Snackbar] Fix generated proptypes (#45156) @siriwatknp
  • [SpeedDialAction] Add slots and slotProps (#45065) @sai6855
  • [SwitchBase] Fix spreading of handlers in getSlotProps (#45197) @sai6855
  • [Tabs] Deprecate *Props and complete slots, slotProps (#45012) @siriwatknp
  • [TextField] Remove deprecated props from documentation (#45199) @sai6855

@mui/icons-material@7.0.0-alpha.1

  • Change icon source URL and add overrides (#45020) @siriwatknp

@mui/lab@7.0.0-beta.1

  • Remove components which were moved from lab to material (#45232) @DiegoAndai

Docs

  • [Autocomplete] Improve Google Maps search example (#44708) @oliviertassinari
  • [Dialog] Removes deprecated PaperProps from docs (#45195) @sai6855
  • [Menu] Add Grouped Menu demo (#45241) @noobDev31
  • [material] Add disableInteractive on colorTool grid Tooltips (#37800) @Janpot
  • [blog] Consistent Base UI terminology (#45264) @oliviertassinari
  • A quick first step to update docs for Tailwind v4 (#45147) @oliviertassinari
  • Fix element.ref accessing warning on docs (#45155) @DiegoAndai
  • Mention Toolpad as experimental (#45273) @prakhargupta1
  • [joy-ui] Update "Set up providers" section of integration with Material UI (#45183) @mateuseap

Core

  • Update branch switch tags (#45198) @DiegoAndai
  • Fix double redirection to Base UI (#45146) @oliviertassinari
  • Fix corepack and pnpm installation in CircleCI (#45185) @mj12albert
  • Fix typo on Netlify script (#45278) @maximevtush
  • [code-infra] Fix testing library resolution with custom react (#44061) @Janpot
  • [code-infra] Update package layout for better ESM support (#43264) @Janpot
  • Update @typescript-eslint/* packages and remove deprecated eslint-config-airbnb-typescript package (#45245) @ZeeshanTamboli
  • [docs] Restore utility component docs from MUI Base to Material UI (#45213) @mapache-salvaje
  • [docs] Sync active sponsors (#45204) @oliviertassinari
  • [docs] Fix links in CONTRIBUTING.md (#45202) @bernardobelchior
  • [docs-infra] Point to MUI X next docs (#45207) @cherniavskii
  • [test] Fix React 18 tests (#45161) @DiegoAndai

All contributors of this release in alphabetical order: @bernardobelchior, @cherniavskii, @DiegoAndai, @Janpot, @kingflamez, @mapache-salvaje, @mateuseap, @maximevtush, @mj12albert, @noobDev31, @oliviertassinari, @prakhargupta1, @sai6855, @siriwatknp, @ZeeshanTamboli

7.0.0-alpha.0

Jan 31, 2025

A big thanks to the 9 contributors who made this release possible. This is the first alpha release of Material UI v7 🎉.

@mui/material@7.0.0-alpha.0

  • [Autocomplete] Prevent shrink animation in uncontrolled Autocomplete when default value is set (#44873) @ZeeshanTamboli
  • [Popover] Deprecate *Props and complete slots, slotProps (#45035) @siriwatknp
  • [Slider] Fix arrow keys past the end for Slider with custom marks (#45050) @joshkel
  • [SwitchBase] Deprecate inputProps and complete slots, slotProps (#45076) @siriwatknp
  • [TextareaAutosize] Temporarily disconnect ResizeObserver to avoid loop error (#44540) @mj12albert
  • [Slider] Narrow onChange value type (#44777) @good-jinu
  • [Snackbar] Add Slots and SlotProps (#45103) @harry-whorlow

@mui/utils@7.0.0-alpha.0

  • Merge sx instead of override when using mergeSlotProps (#45062) @siriwatknp

Core

  • [code-infra] a few fixes uncovered during ESM updates (#45031) @Janpot
  • [code-infra] Remove rsc-builder (#45079) @Janpot
  • [code-infra] Remove commonjs imports in docs (#44976) @Janpot
  • [docs-infra] Move Ukraine banner to the bottom (#45135) @oliviertassinari
  • Fix MUI Base vale rule (#45140) @oliviertassinari
  • Fix missing store contributor renaming (b3d1be0) @oliviertassinari
  • Fix 404 errors (#45137) @oliviertassinari
  • Prepare libraries for first v7 alpha release (#45132) @DiegoAndai
  • Fix CHANGELOG vale failure (#45151) @DiegoAndai

Docs

  • Fix /base-ui redirect and prune links (#45083) @mj12albert
  • Add v6 to v7 migration guide (#45143) @DiegoAndai

All contributors of this release in alphabetical order: @DiegoAndai, @good-jinu, @harry-whorlow, @Janpot, @joshkel, @mj12albert, @oliviertassinari, @siriwatknp, @ZeeshanTamboli

Older versions

Changes before 7.x are listed in our changelog for older versions.