import { useEffect } from 'react'; export function useClickOutside(ref, handler: { in?: (evt: MouseEvent) => void; out?: (evt: MouseEvent) => void }) { useEffect(() => { const listener = (event) => { if (!ref.current || ref.current.contains(event.target)) { handler.in && handler.in(event); } else { handler.out && handler.out(event); } }; document.addEventListener('mousedown', listener); document.addEventListener('touchstart', listener); return () => { document.removeEventListener('mousedown', listener); document.removeEventListener('touchstart', listener); }; }, [ref, handler]); }