Files
yaak/src-web/hooks/useContainerQuery.ts
2025-11-23 08:38:13 -08:00

31 lines
767 B
TypeScript

import type { RefObject } from 'react';
import { useLayoutEffect, useState } from 'react';
export function useContainerSize(ref: RefObject<HTMLElement | null>) {
const [size, setSize] = useState<{ width: number; height: number }>({ width: 0, height: 0 });
useLayoutEffect(() => {
const el = ref.current;
if (el) {
const observer = new ResizeObserver((entries) => {
for (const entry of entries) {
if (entry.target === el) {
setSize({ width: entry.contentRect.width, height: entry.contentRect.height });
}
}
});
observer.observe(el);
return () => {
observer.unobserve(el);
observer.disconnect();
};
}
return undefined;
}, [ref]);
return size;
}