/** * Debounce function for handling rapid state changes * @param func - Function to debounce * @param delay - Delay in milliseconds */ export function debounce any>(func: T, delay: number): (...args: Parameters) => void { let timeoutId: ReturnType return (...args: Parameters) => { clearTimeout(timeoutId) timeoutId = setTimeout(() => func(...args), delay) } } /** * Throttle function for rate-limiting function calls * @param func - Function to throttle * @param limit - Minimum time between calls */ export function throttle any>(func: T, limit: number): (...args: Parameters) => void { let lastRun = 0 return (...args: Parameters) => { const now = Date.now() if (now - lastRun >= limit) { func(...args) lastRun = now } } } /** * Sleep utility for simulating delays * @param ms - Milliseconds to sleep */ export function sleep(ms: number): Promise { return new Promise((resolve) => setTimeout(resolve, ms)) } /** * Simulate loading state * @param duration - Duration of loading state */ export async function simulateLoading(duration = 500): Promise { return sleep(duration) }