import Button from '@mui/material/Button' import { pink } from '@mui/material/colors' import FormControl from '@mui/material/FormControl' import FormControlLabel from '@mui/material/FormControlLabel' import FormHelperText from '@mui/material/FormHelperText' import FormLabel from '@mui/material/FormLabel' import type { RadioProps } from '@mui/material/Radio' import Radio from '@mui/material/Radio' import RadioGroup from '@mui/material/RadioGroup' import { styled } from '@mui/material/styles' import type { ComponentMeta } from '@storybook/react' import React from 'react' export default { title: 'Components/RadioButton', component: Radio, } as ComponentMeta export function RadioButtonsGroup() { return ( Gender } label="Female" /> } label="Male" /> } label="Other" /> ) } export function RowRadioButtonsGroup() { return ( Gender } label="Female" /> } label="Male" /> } label="Other" /> } label="other" /> ) } export function ControlledRadioButtonsGroup() { const [value, setValue] = React.useState('female') const handleChange = (event: React.ChangeEvent) => { setValue((event.target as HTMLInputElement).value) } return ( Gender } label="Female" /> } label="Male" /> ) } export function RadioButtons() { const [selectedValue, setSelectedValue] = React.useState('a') const handleChange = (event: React.ChangeEvent) => { setSelectedValue(event.target.value) } return (
) } export function SizeRadioButtons() { const [selectedValue, setSelectedValue] = React.useState('a') const handleChange = (event: React.ChangeEvent) => { setSelectedValue(event.target.value) } const controlProps = (item: string) => ({ checked: selectedValue === item, onChange: handleChange, value: item, name: 'size-radio-button-demo', inputProps: { 'aria-label': item }, }) return (
) } export function ColorRadioButtons() { const [selectedValue, setSelectedValue] = React.useState('a') const handleChange = (event: React.ChangeEvent) => { setSelectedValue(event.target.value) } const controlProps = (item: string) => ({ checked: selectedValue === item, onChange: handleChange, value: item, name: 'color-radio-button-demo', inputProps: { 'aria-label': item }, }) return (
) } export function FormControlLabelPlacement() { return ( labelPlacement } label="Top" labelPlacement="top" /> } label="Start" labelPlacement="start" /> } label="Bottom" labelPlacement="bottom" /> } label="End" /> ) } export function LabelPlacement() { return ( labelPlacement } label="Top" labelPlacement="top" /> } label="Start" labelPlacement="start" /> } label="Bottom" labelPlacement="bottom" /> } label="End" /> ) } export function ErrorRadios() { const [value, setValue] = React.useState('') const [error, setError] = React.useState(false) const [helperText, setHelperText] = React.useState('Choose wisely') const handleRadioChange = (event: React.ChangeEvent) => { setValue((event.target as HTMLInputElement).value) setHelperText(' ') setError(false) } const handleSubmit = (event: React.FormEvent) => { event.preventDefault() if (value === 'best') { setHelperText('You got it!') setError(false) } else if (value === 'worst') { setHelperText('Sorry, wrong answer!') setError(true) } else { setHelperText('Please select an option.') setError(true) } } return (
Pop quiz: MUI is... } label="The best!" /> } label="The worst." /> {helperText}
) } const BpIcon = styled('span')(({ theme }) => ({ borderRadius: '50%', width: 16, height: 16, boxShadow: theme.palette.mode === 'dark' ? '0 0 0 1px rgb(16 22 26 / 40%)' : 'inset 0 0 0 1px rgba(16,22,26,.2), inset 0 -1px 0 rgba(16,22,26,.1)', backgroundColor: theme.palette.mode === 'dark' ? '#394b59' : '#f5f8fa', backgroundImage: theme.palette.mode === 'dark' ? 'linear-gradient(180deg,hsla(0,0%,100%,.05),hsla(0,0%,100%,0))' : 'linear-gradient(180deg,hsla(0,0%,100%,.8),hsla(0,0%,100%,0))', '.Mui-focusVisible &': { outline: '2px auto rgba(19,124,189,.6)', outlineOffset: 2, }, 'input:hover ~ &': { backgroundColor: theme.palette.mode === 'dark' ? '#30404d' : '#ebf1f5', }, 'input:disabled ~ &': { boxShadow: 'none', background: theme.palette.mode === 'dark' ? 'rgba(57,75,89,.5)' : 'rgba(206,217,224,.5)', }, })) const BpCheckedIcon = styled(BpIcon)({ backgroundColor: '#137cbd', backgroundImage: 'linear-gradient(180deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,0))', '&:before': { display: 'block', width: 16, height: 16, backgroundImage: 'radial-gradient(#fff,#fff 28%,transparent 32%)', content: '""', }, 'input:hover ~ &': { backgroundColor: '#106ba3', }, }) // Inspired by blueprintjs function BpRadio(props: RadioProps) { return ( } icon={} {...props} /> ) } export function CustomizedRadios() { return ( Gender } label="Female" /> } label="Male" /> } label="Other" /> } label="(Disabled option)" /> ) }