export function debounced any>( func: T, delay: number, onLoadingChange?: (loading: boolean) => void ) { let debounceTimeout: ReturnType; return (...args: Parameters) => { if (debounceTimeout !== undefined) { clearTimeout(debounceTimeout); } onLoadingChange?.(true); debounceTimeout = setTimeout(async () => { try { await func(...args); } finally { onLoadingChange?.(false); } }, delay); }; }