@vuesax-alpha/nightly
Version:
A Component Library for Vue 3
40 lines (37 loc) • 1.57 kB
JavaScript
import { createCoords } from '../../utils/index.mjs';
import { isHTMLElement, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll } from '../../utils/dom.mjs';
import { getBoundingClientRect } from './get-bounding-client-rect.mjs';
import { getWindowScrollBarX } from './get-window-scrollbar-x.mjs';
function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
const isOffsetParentAnElement = isHTMLElement(offsetParent);
const documentElement = getDocumentElement(offsetParent);
const isFixed = strategy === "fixed";
const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
let scroll = { scrollLeft: 0, scrollTop: 0 };
const offsets = createCoords(0);
if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
scroll = getNodeScroll(offsetParent);
}
if (isOffsetParentAnElement) {
const offsetRect = getBoundingClientRect(
offsetParent,
true,
isFixed,
offsetParent
);
offsets.x = offsetRect.x + offsetParent.clientLeft;
offsets.y = offsetRect.y + offsetParent.clientTop;
} else if (documentElement) {
offsets.x = getWindowScrollBarX(documentElement);
}
}
return {
x: rect.left + scroll.scrollLeft - offsets.x,
y: rect.top + scroll.scrollTop - offsets.y,
width: rect.width,
height: rect.height
};
}
export { getRectRelativeToOffsetParent };
//# sourceMappingURL=get-rect-relative-to-offset-parent.mjs.map