/** * Custom hook for scheduling requestAnimationFrame (RAF) with automatic cancellation. * * This pattern prevents ResizeObserver loops by: * 1. Storing RAF ID in a ref (proper React pattern) * 2. Canceling any previous RAF before scheduling a new one * 3. Ensuring only the most recent update executes, preventing stale DOM operations * * This prevents "ResizeObserver loop limit exceeded" errors that occur when DOM mutations * within ResizeObserver callbacks trigger additional resize events in an infinite loop. * * @returns Object with schedule and cancel methods for RAF management * * @example * ```typescript * const rafScheduler = useRafScheduler() * * // In a ResizeObserver callback * const onResize = () => { * rafScheduler.schedule(() => { * // DOM operations that might trigger more resize events * updateLayout() * }) * } * * // Cleanup when component unmounts * useEffect(() => { * return () => rafScheduler.cancel() * }, [rafScheduler]) * ``` */ export declare const useRafScheduler: () => { schedule: (callback: () => void) => void; cancel: () => void; };