UNPKG

@qvant/qui-max

Version:

A Vue 3 Design system for Web.

49 lines (48 loc) 2.06 kB
import getWindow from "./getWindow.js"; import getNodeName from "./getNodeName.js"; import getComputedStyle from "./getComputedStyle.js"; import { isHTMLElement, isShadowRoot } from "./instanceOf.js"; import isTableElement from "./isTableElement.js"; import getParentNode from "./getParentNode.js"; function getTrueOffsetParent(element) { if (!isHTMLElement(element) || getComputedStyle(element).position === "fixed") { return null; } return element.offsetParent; } function getContainingBlock(element) { var isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") !== -1; var isIE = navigator.userAgent.indexOf("Trident") !== -1; if (isIE && isHTMLElement(element)) { var elementCss = getComputedStyle(element); if (elementCss.position === "fixed") { return null; } } var currentNode = getParentNode(element); if (isShadowRoot(currentNode)) { currentNode = currentNode.host; } while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) { var css = getComputedStyle(currentNode); if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") { return currentNode; } else { currentNode = currentNode.parentNode; } } return null; } function getOffsetParent(element) { var window = getWindow(element); var offsetParent = getTrueOffsetParent(element); while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === "static") { offsetParent = getTrueOffsetParent(offsetParent); } if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle(offsetParent).position === "static")) { return window; } return offsetParent || getContainingBlock(element) || window; } export { getOffsetParent as default }; //# sourceMappingURL=getOffsetParent.js.map