import { MutableRefObject } from 'react'; export type ReactiveDomReact = { top: number; bottom: number; left: number; right: number; width: number; height: number; }; const defaultRect: ReactiveDomReact = { top: -1000, left: -1000, right: -1000, bottom: -1000, width: 0, height: 0, }; export const getRect = (ref: MutableRefObject): ReactiveDomReact => { if (!ref || !ref.current) { return defaultRect; } const rect = ref.current.getBoundingClientRect(); return { ...rect, width: rect.width || rect.right - rect.left, height: rect.height || rect.bottom - rect.top, top: rect.top + document.documentElement.scrollTop, bottom: rect.bottom + document.documentElement.scrollTop, left: rect.left + document.documentElement.scrollLeft, right: rect.right + document.documentElement.scrollLeft, }; };