export const timeouts: { [key: string]: number } = {}; const callbacks: Record void> = {}; export function debounceWrap(name: string, callback: Function, timeout = 50) { clearTimeout(timeouts[name]); timeouts[name] = setTimeout(callback, timeout); return () => { clearTimeout(timeouts[name]); }; } export async function debounce(name: string, timeout = 150) { if (callbacks[name]) { callbacks[name](false); } return new Promise((resolve) => { callbacks[name] = resolve; return debounceWrap( name, () => { if (callbacks[name]) { callbacks[name](true); delete callbacks[name]; } }, timeout, ); }); }