import React, { useEffect, useState } from 'react'; import styled from '@emotion/styled'; import { motion } from 'framer-motion'; type ContainerProps = { isOn: boolean; color?: string; }; const StyledContainer = styled.div` align-items: center; background-color: ${({ theme, isOn, color }) => isOn ? color ?? theme.color.blue : theme.background.quaternary}; border-radius: 10px; cursor: pointer; display: flex; height: 20px; transition: background-color 0.3s ease; width: 32px; `; const StyledCircle = styled(motion.div)` background-color: ${({ theme }) => theme.background.primary}; border-radius: 50%; height: 16px; width: 16px; `; const circleVariants = { on: { x: 14 }, off: { x: 2 }, }; export type ToggleProps = { value?: boolean; onChange?: (value: boolean) => void; color?: string; }; export const Toggle = ({ value, onChange, color }: ToggleProps) => { const [isOn, setIsOn] = useState(value ?? false); const handleChange = () => { setIsOn(!isOn); if (onChange) { onChange(!isOn); } }; useEffect(() => { if (value !== isOn) { setIsOn(value ?? false); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [value]); return ( ); };