/** * Returns a debounced version of fn that delays invocation until after * `delay` ms have elapsed since the last call. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function debounce void>(fn: T, delay: number): T { let timer: ReturnType; return ((...args: Parameters) => { clearTimeout(timer); timer = setTimeout(() => fn(...args), delay); }) as T; }