import { useState, useEffect } from 'react'; /** * Hook to track whether the shift key is currently being held down * @returns boolean indicating if shift key is pressed */ export default function useShiftKey(): boolean { const [isShiftHeld, setIsShiftHeld] = useState(false); useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'Shift') { setIsShiftHeld(true); } }; const handleKeyUp = (e: KeyboardEvent) => { if (e.key === 'Shift') { setIsShiftHeld(false); } }; // Reset shift state when window loses focus const handleBlur = () => { setIsShiftHeld(false); }; window.addEventListener('keydown', handleKeyDown); window.addEventListener('keyup', handleKeyUp); window.addEventListener('blur', handleBlur); return () => { window.removeEventListener('keydown', handleKeyDown); window.removeEventListener('keyup', handleKeyUp); window.removeEventListener('blur', handleBlur); }; }, []); return isShiftHeld; }