Sample Code
"use client";
import React from 'react';
import { Box, RadioGroup, FormControlLabel } from '@mui/material';
import { styled } from '@mui/material/styles';
import Radio, { RadioProps } from '@mui/material/Radio';
const BpIcon = styled('span')(({ theme }) => ({
borderRadius: '50%',
width: 21,
height: 21,
boxShadow:
theme.palette.mode === 'dark'
? '0 0 0 1px {theme.palette.grey[200]}'
: 'inset 0 0 0 1px {theme.palette.grey[300]}',
backgroundColor: 'transparent',
'.Mui-focusVisible &': {
outline:
theme.palette.mode === 'dark'
? '0px auto {theme.palette.grey[200]}'
: '0px auto {theme.palette.grey[300]}',
outlineOffset: 2,
},
'input:hover ~ &': {
backgroundColor: theme.palette.primary,
},
'input:disabled ~ &': {
boxShadow: 'none',
background: theme.palette.grey[100],
},
}));
const BpCheckedIcon = styled(BpIcon)(({ theme }) => ({
boxShadow: 'none',
'&:before': {
display: 'block',
width: 21,
height: 21,
backgroundImage:
theme.palette.mode === 'dark'
? 'radial-gradient({theme.palette.background.paper},{theme.palette.background.paper} 28%,transparent 32%)'
: 'radial-gradient(#fff,#fff 28%,transparent 32%)',
content: '""',
},
}));
function CustomRadio(props: RadioProps) {
return (
<Radio
disableRipple
color="default"
checkedIcon={
<BpCheckedIcon
sx={{
backgroundColor: props.color ? '{props.color}.main' : 'primary.main',
}}
/>
}
icon={<BpIcon />}
inputProps={{ 'aria-label': 'Checkbox demo' }}
{...props}
/>
);
}
<Box
sx={{
textAlign: 'center',
}}>
<RadioGroup row aria-label='position' name='position' defaultValue='top'>
<FormControlLabel
value='top'
control={<CustomRadio />}
label='Top'
labelPlacement='top'
/>
<FormControlLabel
value='start'
control={<CustomRadio />}
label='Start'
labelPlacement='start'
/>
<FormControlLabel
value='bottom'
control={<CustomRadio />}
label='Bottom'
labelPlacement='bottom'
/>
<FormControlLabel value='end' control={<CustomRadio />} label='End' />
</RadioGroup>
</Box>