diff --git a/docs/pages/experiments/material-ui/icon-button.tsx b/docs/pages/experiments/material-ui/icon-button.tsx new file mode 100644 index 00000000000000..dc010f388cfaa0 --- /dev/null +++ b/docs/pages/experiments/material-ui/icon-button.tsx @@ -0,0 +1,87 @@ +import * as React from 'react'; +import { + Experimental_CssVarsProvider as CssVarsProvider, + useColorScheme, +} from '@mui/material/styles'; +import CssBaseline from '@mui/material/CssBaseline'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Container from '@mui/material/Container'; +import Moon from '@mui/icons-material/DarkMode'; +import Sun from '@mui/icons-material/LightMode'; +import IconButton from '@mui/material/IconButton'; +import InsertEmoticonIcon from '@mui/icons-material/InsertEmoticon'; +import AddShoppingCartIcon from '@mui/icons-material/AddShoppingCart'; +import AlarmIcon from '@mui/icons-material/Alarm'; +import ExitToAppIcon from '@mui/icons-material/ExitToApp'; + +const ColorSchemePicker = () => { + const { mode, setMode } = useColorScheme(); + const [mounted, setMounted] = React.useState(false); + React.useEffect(() => { + setMounted(true); + }, []); + if (!mounted) { + return null; + } + + return ( + + ); +}; + +export default function CssVarsTemplate() { + return ( + + + + + + + div': { + placeSelf: 'center', + }, + }} + > + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/packages/mui-material/src/IconButton/IconButton.js b/packages/mui-material/src/IconButton/IconButton.js index eab5a06af6c44e..ee0022d2db05b5 100644 --- a/packages/mui-material/src/IconButton/IconButton.js +++ b/packages/mui-material/src/IconButton/IconButton.js @@ -47,13 +47,15 @@ const IconButtonRoot = styled(ButtonBase, { padding: 8, borderRadius: '50%', overflow: 'visible', // Explicitly set the default value to solve a bug on IE11. - color: theme.palette.action.active, + color: (theme.vars || theme).palette.action.active, transition: theme.transitions.create('background-color', { duration: theme.transitions.duration.shortest, }), ...(!ownerState.disableRipple && { '&:hover': { - backgroundColor: alpha(theme.palette.action.active, theme.palette.action.hoverOpacity), + backgroundColor: theme.vars + ? `rgba(${theme.vars.palette.action.active} / ${theme.vars.palette.action.hoverOpacity})` + : alpha(theme.palette.action.active, theme.palette.action.hoverOpacity), // Reset on touch devices, it doesn't add specificity '@media (hover: none)': { backgroundColor: 'transparent', @@ -73,13 +75,14 @@ const IconButtonRoot = styled(ButtonBase, { }), ...(ownerState.color !== 'inherit' && ownerState.color !== 'default' && { - color: theme.palette[ownerState.color].main, + color: (theme.vars || theme).palette[ownerState.color].main, ...(!ownerState.disableRipple && { '&:hover': { - backgroundColor: alpha( - theme.palette[ownerState.color].main, - theme.palette.action.hoverOpacity, - ), + backgroundColor: theme.vars + ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${ + theme.vars.palette.action.hoverOpacity + })` + : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity), // Reset on touch devices, it doesn't add specificity '@media (hover: none)': { backgroundColor: 'transparent', @@ -97,7 +100,7 @@ const IconButtonRoot = styled(ButtonBase, { }), [`&.${iconButtonClasses.disabled}`]: { backgroundColor: 'transparent', - color: theme.palette.action.disabled, + color: (theme.vars || theme).palette.action.disabled, }, }), );