import styled, { type AnyStyledComponent } from 'styled-components'; import { Root, Thumb } from '@radix-ui/react-switch'; type ElementProps = { checked: boolean; onCheckedChange: (checked: boolean) => void; disabled?: boolean; required?: boolean; name?: string; value?: string; }; type StyleProps = { className?: string; }; export const Switch = ({ checked, className, disabled, name, onCheckedChange, required, value, }: ElementProps & StyleProps) => ( ); const Styled: Record = {}; Styled.Root = styled(Root)` --switch-width: 2.625em; --switch-height: 1.5em; --switch-backgroundColor: var(--color-layer-0); --switch-thumb-backgroundColor: var(--color-layer-6); --switch-active-backgroundColor: var(--color-accent); --switch-active-thumb-backgroundColor: var(--color-white); position: relative; width: var(--switch-width); height: var(--switch-height); background-color: var(--switch-backgroundColor); border-radius: 100vmax; transition: none; -webkit-tap-highlight-color: var(--color-layer-0); &:disabled { opacity: 0.75; } &[data-state='checked'] { background-color: var(--switch-active-backgroundColor); } `; Styled.Thumb = styled(Thumb)` width: calc(var(--switch-width) / 2); height: calc(var(--switch-height) - 0.1875em); display: block; background-color: var(--switch-thumb-backgroundColor); border-radius: 50%; transform: translateX(0.125em); will-change: transform; transition: transform 100ms; &[data-state='checked'] { transform: translateX(calc((var(--switch-width) / 2) - 0.125em)); background-color: var(--switch-active-thumb-backgroundColor); } `;