diff options
Diffstat (limited to 'popperjs/package/lib/dom-utils/getParentNode.js.flow')
-rw-r--r-- | popperjs/package/lib/dom-utils/getParentNode.js.flow | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/popperjs/package/lib/dom-utils/getParentNode.js.flow b/popperjs/package/lib/dom-utils/getParentNode.js.flow new file mode 100644 index 0000000..c2c379b --- /dev/null +++ b/popperjs/package/lib/dom-utils/getParentNode.js.flow @@ -0,0 +1,21 @@ +// @flow +import getNodeName from './getNodeName'; +import getDocumentElement from './getDocumentElement'; +import { isShadowRoot } from './instanceOf'; + +export default function getParentNode(element: Node | ShadowRoot): Node { + if (getNodeName(element) === 'html') { + return element; + } + + return ( + // this is a quicker (but less type safe) way to save quite some bytes from the bundle + // $FlowFixMe[incompatible-return] + // $FlowFixMe[prop-missing] + element.assignedSlot || // step into the shadow DOM of the parent of a slotted node + element.parentNode || // DOM Element detected + (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected + // $FlowFixMe[incompatible-call]: HTMLElement is a Node + getDocumentElement(element) // fallback + ); +} |