| 12345678910111213141516171819202122232425262728293031323334353637 | // @flowimport type { Rect } from '../types';import getDocumentElement from './getDocumentElement';import getComputedStyle from './getComputedStyle';import getWindowScrollBarX from './getWindowScrollBarX';import getWindowScroll from './getWindowScroll';import { max } from '../utils/math';// Gets the entire size of the scrollable document area, even extending outside// of the `<html>` and `<body>` rect bounds if horizontally scrollableexport default function getDocumentRect(element: HTMLElement): Rect {  const html = getDocumentElement(element);  const winScroll = getWindowScroll(element);  const body = element.ownerDocument?.body;  const width = max(    html.scrollWidth,    html.clientWidth,    body ? body.scrollWidth : 0,    body ? body.clientWidth : 0  );  const height = max(    html.scrollHeight,    html.clientHeight,    body ? body.scrollHeight : 0,    body ? body.clientHeight : 0  );  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);  const y = -winScroll.scrollTop;  if (getComputedStyle(body || html).direction === 'rtl') {    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;  }  return { width, height, x, y };}
 |