import * as React from 'react'; export function useComponentSize() { const [size, setSize] = React.useState({ height: 0, width: 0, }); const ref = React.useRef(undefined); const onResize = React.useCallback(() => { if (!ref.current) { return; } const newHeight = ref.current.offsetHeight; const newWidth = ref.current.offsetWidth; if (newHeight !== size.height || newWidth !== size.width) { setSize({ height: newHeight, width: newWidth, }); } }, [size.height, size.width]); React.useLayoutEffect(() => { if (!ref || !ref.current) { return; } const resizeObserver = new ResizeObserver(onResize); resizeObserver.observe(ref.current); return () => resizeObserver.disconnect(); }, [ref, onResize]); return { ref, ...size, }; }