import { useCallback, useEffect, useRef, useState } from 'react'; export const useCloseOnEscape = (onRequestClose: () => void, ignore_inputs = false) => { const onEscape = useCallback( (event) => { if (event.key !== 'Escape') return; if ( ignore_inputs && (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') ) return; onRequestClose(); }, [ignore_inputs, onRequestClose], ); useEffect(() => { window.addEventListener('keyup', onEscape); return () => { window.removeEventListener('keyup', onEscape); }; }, [onEscape]); }; export const useDelayedReady = (setReady: (val: boolean) => void, delay: number = 500) => { useEffect(() => { const timer = setTimeout(() => setReady(true), delay); return () => { if (timer) clearTimeout(timer); }; }, [delay, setReady]); };