'use client'; import { useEffect, useRef } from 'react'; export function useResizeObserver(callback: (entry: ResizeObserverEntry) => void) { const ref = useRef(null); const frameId = useRef(0); useEffect(() => { const element = ref.current; if (!element) return; const observer = new ResizeObserver((entries) => { // Cancel previous frame to avoid stacking updates if (frameId.current) cancelAnimationFrame(frameId.current); frameId.current = requestAnimationFrame(() => { for (const entry of entries) { callback(entry); } }); }); observer.observe(element); return () => { observer.disconnect(); if (frameId.current) cancelAnimationFrame(frameId.current); }; }, [callback]); return ref; }