Focus management determines whether keyboard users can operate your modal.
Requirements:
Move focus into modal when opened
Trap focus inside modal (Tab cycles within)
Return focus to trigger when closed
Implementation:
useEffect(() => {
const previousFocus = document.activeElement;
modalRef.current.focus(); // Requires tabIndex="-1" on modal
return () => previousFocus?.focus();
}, []);
Focus trap: On Tab at last element, move to first. On Shift+Tab at first, move to last.
Libraries: focus-trap-react handles edge cases.