import { useEffect, useRef } from 'react'; export const useFocusTrap = (isOpen: boolean) => { const trapRef = useRef(null); useEffect(() => { if (!isOpen || !trapRef.current) return; const focusableElements = trapRef.current.querySelectorAll( 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])' ); if (focusableElements.length === 0) return; const firstElement = focusableElements[0]; const lastElement = focusableElements[focusableElements.length - 1]; const handleKeyDown = (e: KeyboardEvent) => { if (e.key !== 'Tab') return; if (e.shiftKey) { // Shift + Tab if (document.activeElement === firstElement) { e.preventDefault(); lastElement.focus(); } } else { // Tab if (document.activeElement === lastElement) { e.preventDefault(); firstElement.focus(); } } }; document.addEventListener('keydown', handleKeyDown); firstElement.focus(); return () => { document.removeEventListener('keydown', handleKeyDown); }; }, [isOpen]); return trapRef; };