export function getOffset(element: HTMLElement): { top: number; left: number } { const rect = element.getBoundingClientRect(); return { top: rect.top + window.scrollY - document.documentElement.clientTop, left: rect.left + window.scrollX - document.documentElement.clientLeft, }; } export function isVisible(element: HTMLElement): boolean { return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); } export function getOuterWidth(element: HTMLElement): number { const style = getComputedStyle(element); return element.getBoundingClientRect().width + parseFloat(style.marginLeft) + parseFloat(style.marginRight); } export function getClearedHeight(element: HTMLElement): number { let height = element.getBoundingClientRect().height; for (const child of element.children) { height = Math.max(height, child.getBoundingClientRect().height); } return height; }