|
import { memo } from 'react'; |
|
import * as SwitchPrimitive from '@radix-ui/react-switch'; |
|
import { classNames } from '~/utils/classNames'; |
|
|
|
interface SwitchProps { |
|
className?: string; |
|
checked?: boolean; |
|
onCheckedChange?: (event: boolean) => void; |
|
} |
|
|
|
export const Switch = memo(({ className, onCheckedChange, checked }: SwitchProps) => { |
|
return ( |
|
<SwitchPrimitive.Root |
|
className={classNames( |
|
'relative h-6 w-11 cursor-pointer rounded-full bg-bolt-elements-button-primary-background', |
|
'transition-colors duration-200 ease-in-out', |
|
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2', |
|
'disabled:cursor-not-allowed disabled:opacity-50', |
|
'data-[state=checked]:bg-bolt-elements-item-contentAccent', |
|
className, |
|
)} |
|
checked={checked} |
|
onCheckedChange={(e) => onCheckedChange?.(e)} |
|
> |
|
<SwitchPrimitive.Thumb |
|
className={classNames( |
|
'block h-5 w-5 rounded-full bg-white', |
|
'shadow-lg shadow-black/20', |
|
'transition-transform duration-200 ease-in-out', |
|
'translate-x-0.5', |
|
'data-[state=checked]:translate-x-[1.375rem]', |
|
'will-change-transform', |
|
)} |
|
/> |
|
</SwitchPrimitive.Root> |
|
); |
|
}); |
|
|