// components/switch.tsx import clsx from 'clsx'; import type { HTMLAttributes, ReactNode } from 'react'; import { useCallback, useState } from 'react'; import * as styles from './index.css'; export type SwitchProps = Omit, 'onChange'> & { checked?: boolean; onChange?: (checked: boolean) => void; children?: ReactNode; disabled?: boolean; }; export const Switch = ({ checked: checkedProp = false, onChange: onChangeProp, children, className, disabled, ...otherProps }: SwitchProps) => { const [checkedState, setCheckedState] = useState(checkedProp); const checked = onChangeProp ? checkedProp : checkedState; const onChange = useCallback( (event: React.ChangeEvent) => { if (disabled) { return; } const newChecked = event.target.checked; if (onChangeProp) onChangeProp(newChecked); else setCheckedState(newChecked); }, [disabled, onChangeProp] ); return ( ); };