UNPKG

@nex-ui/react

Version:

🎉 A beautiful, modern, and reliable React component library.

44 lines (40 loc) • 1.64 kB
'use strict'; var utils = require('@nex-ui/utils'); var dom = require('./dom.cjs'); function _getOffsetParent(element) { // istanbul ignore if if (!dom.isHTMLElement(element)) { return null; } return element.offsetParent; } /** * A positioned ancestor might be: * - a containing block for absolutely-positioned elements * - an element with a different effective zoom value (that is, the product of all zoom scales of its parents) from this element * - td, th, table in case the element itself is static positioned. * * https://drafts.csswg.org/cssom-view/#dom-htmlelement-offsetparent */ const getOffsetParent = (element)=>{ const win = utils.ownerWindow(element); if (dom.isSVGElement(element)) { // SVG element hasn't offsetParent, find the nearest Element let svgOffsetParent = element.parentElement; while(svgOffsetParent && !dom.isRootElement(svgOffsetParent)){ if (dom.isElement(svgOffsetParent) && !dom.isStaticPositioned(svgOffsetParent)) { return svgOffsetParent; } svgOffsetParent = svgOffsetParent.parentElement; } return win; } let offsetParent = _getOffsetParent(element); while(offsetParent && dom.isTableElement(offsetParent) && dom.isStaticPositioned(offsetParent)){ offsetParent = _getOffsetParent(offsetParent); } if (offsetParent && dom.isRootElement(offsetParent) && dom.isStaticPositioned(offsetParent) && !dom.isContainingBlock(offsetParent)) { return win; } return offsetParent || win; }; exports.getOffsetParent = getOffsetParent;