import { ChangeEvent, InputHTMLAttributes, forwardRef } from 'react'; import styled from 'styled-components'; import { spacing, Stack } from '../../spacing'; import { Text } from '../text/Text.component'; import { FocusVisibleStyle } from '../buttonv2/Buttonv2.component'; export type Props = { name: string; value: string; label?: string; checked?: boolean; disabled?: boolean; onChange?: (e: ChangeEvent) => void; } & InputHTMLAttributes; const RadioInput = styled.input` transform: scale(1.5); `; const Radio = forwardRef( ({ name, value, label, checked, disabled, onChange, ...rest }, ref) => { return ( {label && {label}} ); }, ); export { Radio }; const StyledRadio = styled.label<{ disabled?: boolean }>` ${(props) => (props.disabled ? 'opacity: 0.5;' : '')} [type='radio'] { width: 0.75rem; height: 0.75rem; color: ${(props) => props.theme.textPrimary}; vertical-align: middle; -webkit-appearance: none; -moz-appearance: none; appearance: none; background: none; border: 0; outline: 0; flex-grow: 0; border-radius: 50%; background-color: ${(props) => props.theme.backgroundLevel1}; transition: background 300ms; cursor: pointer; } [type='radio']::before { content: ''; color: transparent; display: block; width: inherit; height: inherit; border-radius: inherit; border: 0; background-color: transparent; box-shadow: inset 0 0 0 ${spacing.r1} ${(props) => props.theme.textSecondary}; } [type='radio']:checked { background-color: ${(props) => props.theme.selectedActive}; } [type='radio']:checked::before { box-shadow: none; background-image: radial-gradient( circle, ${(props) => props.theme.textPrimary} 35%, transparent 35% ); } [type='radio']:hover { ${(props) => !props.disabled && `background-color: ${props.theme.highlight};`} } [type='radio']:hover::before { ${(props) => !props.disabled && `box-shadow: inset 0 0 0 ${spacing.r1} ${props.theme.selectedActive};`} } [type='radio']:focus-visible:enabled { ${FocusVisibleStyle} } [type='radio']:checked:disabled { cursor: not-allowed; background-color: ${(props) => props.theme.selectedActive}; } [type='radio']:not(:checked):disabled { cursor: not-allowed; } `;