diff --git a/docs/src/pages/components/switches/CustomizedSwitches.js b/docs/src/pages/components/switches/CustomizedSwitches.js index 1dcb8778462c5a..4502784c0e5363 100644 --- a/docs/src/pages/components/switches/CustomizedSwitches.js +++ b/docs/src/pages/components/switches/CustomizedSwitches.js @@ -6,39 +6,134 @@ import Switch from '@material-ui/core/Switch'; import Stack from '@material-ui/core/Stack'; import Typography from '@material-ui/core/Typography'; +const MaterialUISwitch = styled(Switch)({ + width: 62, + height: 34, + padding: 7, + '& .MuiSwitch-switchBase': { + margin: 1, + padding: 0, + transform: 'translateX(6px)', + '&.Mui-checked': { + color: '#fff', + transform: 'translateX(22px)', + '& .MuiSwitch-thumb:before': { + backgroundImage: `url('data:image/svg+xml;utf8,')`, + }, + '& + .MuiSwitch-track': { + opacity: 1, + backgroundColor: '#aab4be', + }, + }, + }, + '& .MuiSwitch-thumb': { + backgroundColor: '#001e3c', + width: 32, + height: 32, + '&:before': { + content: "''", + position: 'absolute', + width: '100%', + height: '100%', + left: 0, + top: 0, + backgroundRepeat: 'no-repeat', + backgroundPosition: 'center', + backgroundImage: `url('data:image/svg+xml;utf8,')`, + }, + }, + '& .MuiSwitch-track': { + opacity: 1, + backgroundColor: '#aab4be', + borderRadius: 20 / 2, + }, +}); + +const Android12Switch = styled(Switch)(({ theme }) => ({ + padding: 8, + '& .MuiSwitch-track': { + borderRadius: 22 / 2, + '&:before, &:after': { + content: '""', + position: 'absolute', + top: '50%', + transform: 'translateY(-50%)', + width: 16, + height: 16, + }, + '&:before': { + backgroundImage: `url('data:image/svg+xml;utf8,')`, + left: 12, + }, + '&:after': { + backgroundImage: `url('data:image/svg+xml;utf8,')`, + right: 12, + }, + }, + '& .MuiSwitch-thumb': { + boxShadow: 'none', + width: 16, + height: 16, + margin: 2, + }, +})); + const IOSSwitch = styled((props) => ( ))(({ theme }) => ({ width: 42, height: 26, padding: 0, - margin: theme.spacing(1), '& .MuiSwitch-switchBase': { - padding: 1, + padding: 0, + margin: 2, + transitionDuration: '300ms', '&.Mui-checked': { transform: 'translateX(16px)', - color: theme.palette.common.white, + color: '#fff', '& + .MuiSwitch-track': { - backgroundColor: '#52d869', + backgroundColor: '#65C466', opacity: 1, border: 0, }, + '&.Mui-disabled + .MuiSwitch-track': { + opacity: 0.5, + }, }, '&.Mui-focusVisible .MuiSwitch-thumb': { - color: '#52d869', + color: '#33cf4d', border: '6px solid #fff', }, + '&.Mui-disabled .MuiSwitch-thumb': { + color: + theme.palette.mode === 'light' + ? theme.palette.grey[100] + : theme.palette.grey[600], + }, + '&.Mui-disabled + .MuiSwitch-track': { + opacity: theme.palette.mode === 'light' ? 0.7 : 0.3, + }, }, '& .MuiSwitch-thumb': { - width: 24, - height: 24, + boxSizing: 'border-box', + width: 22, + height: 22, }, '& .MuiSwitch-track': { borderRadius: 26 / 2, - border: `1px solid ${theme.palette.grey[400]}`, - backgroundColor: theme.palette.grey[50], + backgroundColor: theme.palette.mode === 'light' ? '#E9E9EA' : '#39393D', opacity: 1, - transition: theme.transitions.create(['background-color', 'border-color']), + transition: theme.transitions.create(['background-color'], { + duration: 500, + }), }, })); @@ -52,7 +147,7 @@ const AntSwitch = styled(Switch)(({ theme }) => ({ color: theme.palette.grey[500], '&.Mui-checked': { transform: 'translateX(12px)', - color: theme.palette.common.white, + color: '#fff', '& + .MuiSwitch-track': { opacity: 1, backgroundColor: theme.palette.primary.main, @@ -69,14 +164,26 @@ const AntSwitch = styled(Switch)(({ theme }) => ({ border: `1px solid ${theme.palette.grey[500]}`, borderRadius: 16 / 2, opacity: 1, - backgroundColor: theme.palette.common.white, + backgroundColor: '#fff', + boxSizing: 'border-box', }, })); export default function CustomizedSwitches() { return ( - } label="iOS style" /> + } + label="Material-UI switch" + /> + } + label="Android 12" + /> + } + label="iOS style" + /> Off diff --git a/docs/src/pages/components/switches/CustomizedSwitches.tsx b/docs/src/pages/components/switches/CustomizedSwitches.tsx index 9dd13b3265d92d..c2bf6a6490ca21 100644 --- a/docs/src/pages/components/switches/CustomizedSwitches.tsx +++ b/docs/src/pages/components/switches/CustomizedSwitches.tsx @@ -6,39 +6,134 @@ import Switch, { SwitchProps } from '@material-ui/core/Switch'; import Stack from '@material-ui/core/Stack'; import Typography from '@material-ui/core/Typography'; +const MaterialUISwitch = styled(Switch)({ + width: 62, + height: 34, + padding: 7, + '& .MuiSwitch-switchBase': { + margin: 1, + padding: 0, + transform: 'translateX(6px)', + '&.Mui-checked': { + color: '#fff', + transform: 'translateX(22px)', + '& .MuiSwitch-thumb:before': { + backgroundImage: `url('data:image/svg+xml;utf8,')`, + }, + '& + .MuiSwitch-track': { + opacity: 1, + backgroundColor: '#aab4be', + }, + }, + }, + '& .MuiSwitch-thumb': { + backgroundColor: '#001e3c', + width: 32, + height: 32, + '&:before': { + content: "''", + position: 'absolute', + width: '100%', + height: '100%', + left: 0, + top: 0, + backgroundRepeat: 'no-repeat', + backgroundPosition: 'center', + backgroundImage: `url('data:image/svg+xml;utf8,')`, + }, + }, + '& .MuiSwitch-track': { + opacity: 1, + backgroundColor: '#aab4be', + borderRadius: 20 / 2, + }, +}); + +const Android12Switch = styled(Switch)(({ theme }) => ({ + padding: 8, + '& .MuiSwitch-track': { + borderRadius: 22 / 2, + '&:before, &:after': { + content: '""', + position: 'absolute', + top: '50%', + transform: 'translateY(-50%)', + width: 16, + height: 16, + }, + '&:before': { + backgroundImage: `url('data:image/svg+xml;utf8,')`, + left: 12, + }, + '&:after': { + backgroundImage: `url('data:image/svg+xml;utf8,')`, + right: 12, + }, + }, + '& .MuiSwitch-thumb': { + boxShadow: 'none', + width: 16, + height: 16, + margin: 2, + }, +})); + const IOSSwitch = styled((props: SwitchProps) => ( ))(({ theme }) => ({ width: 42, height: 26, padding: 0, - margin: theme.spacing(1), '& .MuiSwitch-switchBase': { - padding: 1, + padding: 0, + margin: 2, + transitionDuration: '300ms', '&.Mui-checked': { transform: 'translateX(16px)', - color: theme.palette.common.white, + color: '#fff', '& + .MuiSwitch-track': { - backgroundColor: '#52d869', + backgroundColor: '#65C466', opacity: 1, border: 0, }, + '&.Mui-disabled + .MuiSwitch-track': { + opacity: 0.5, + }, }, '&.Mui-focusVisible .MuiSwitch-thumb': { - color: '#52d869', + color: '#33cf4d', border: '6px solid #fff', }, + '&.Mui-disabled .MuiSwitch-thumb': { + color: + theme.palette.mode === 'light' + ? theme.palette.grey[100] + : theme.palette.grey[600], + }, + '&.Mui-disabled + .MuiSwitch-track': { + opacity: theme.palette.mode === 'light' ? 0.7 : 0.3, + }, }, '& .MuiSwitch-thumb': { - width: 24, - height: 24, + boxSizing: 'border-box', + width: 22, + height: 22, }, '& .MuiSwitch-track': { borderRadius: 26 / 2, - border: `1px solid ${theme.palette.grey[400]}`, - backgroundColor: theme.palette.grey[50], + backgroundColor: theme.palette.mode === 'light' ? '#E9E9EA' : '#39393D', opacity: 1, - transition: theme.transitions.create(['background-color', 'border-color']), + transition: theme.transitions.create(['background-color'], { + duration: 500, + }), }, })); @@ -52,7 +147,7 @@ const AntSwitch = styled(Switch)(({ theme }) => ({ color: theme.palette.grey[500], '&.Mui-checked': { transform: 'translateX(12px)', - color: theme.palette.common.white, + color: '#fff', '& + .MuiSwitch-track': { opacity: 1, backgroundColor: theme.palette.primary.main, @@ -69,14 +164,26 @@ const AntSwitch = styled(Switch)(({ theme }) => ({ border: `1px solid ${theme.palette.grey[500]}`, borderRadius: 16 / 2, opacity: 1, - backgroundColor: theme.palette.common.white, + backgroundColor: '#fff', + boxSizing: 'border-box', }, })); export default function CustomizedSwitches() { return ( - } label="iOS style" /> + } + label="Material-UI switch" + /> + } + label="Android 12" + /> + } + label="iOS style" + /> Off