UNPKG

@vuesax-alpha/nightly

Version:
40 lines (37 loc) 1.56 kB
import { createCoords } from '../../utils/index.mjs'; import { isHTMLElement, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll } from '../../utils/dom.mjs'; import { getBoundingClientRect } from '../utils/get-bounding-client-rect.mjs'; import { getScale } from './get-scale.mjs'; function convertOffsetParentRelativeRectToViewportRelativeRect({ rect, offsetParent, strategy }) { const isOffsetParentAnElement = isHTMLElement(offsetParent); const documentElement = getDocumentElement(offsetParent); if (offsetParent === documentElement) { return rect; } let scroll = { scrollLeft: 0, scrollTop: 0 }; let scale = createCoords(1); const offsets = createCoords(0); if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== "fixed") { if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { scroll = getNodeScroll(offsetParent); } if (isHTMLElement(offsetParent)) { const offsetRect = getBoundingClientRect(offsetParent); scale = getScale(offsetParent); offsets.x = offsetRect.x + offsetParent.clientLeft; offsets.y = offsetRect.y + offsetParent.clientTop; } } return { width: rect.width * scale.x, height: rect.height * scale.y, x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x, y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y }; } export { convertOffsetParentRelativeRectToViewportRelativeRect }; //# sourceMappingURL=convert-offset-parent-relative-rect-to-viewport-relative-rect.mjs.map