UNPKG

@vuesax-alpha/nightly

Version:
1 lines 9.9 kB
{"version":3,"file":"dom.mjs","sources":["../../../../../../packages/hooks/use-floating/utils/dom.ts"],"sourcesContent":["type OverflowAncestors = Array<Element | Window | VisualViewport>\n\nexport function getNodeName(node: Node | Window): string {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase()\n }\n\n return '#document'\n}\n\nexport function getWindow(node: any): typeof window {\n return node?.ownerDocument?.defaultView || window\n}\n\nexport function getDocumentElement(node: Node | Window): HTMLElement {\n return (\n (isNode(node) ? node.ownerDocument : node.document) || window.document\n )?.documentElement\n}\n\nexport function isNode(value: unknown): value is Node {\n return value instanceof Node || value instanceof getWindow(value).Node\n}\n\nexport function isElement(value: unknown): value is Element {\n return value instanceof Element || value instanceof getWindow(value).Element\n}\n\nexport function isHTMLElement(value: unknown): value is HTMLElement {\n return (\n value instanceof HTMLElement ||\n value instanceof getWindow(value).HTMLElement\n )\n}\n\nexport function isShadowRoot(value: unknown): value is ShadowRoot {\n // Browsers without `ShadowRoot` support.\n if (typeof ShadowRoot === 'undefined') {\n return false\n }\n\n return (\n value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot\n )\n}\n\nexport function isOverflowElement(element: Element): boolean {\n const { overflow, overflowX, overflowY, display } = getComputedStyle(element)\n return (\n /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) &&\n !['inline', 'contents'].includes(display)\n )\n}\n\nexport function isTableElement(element: Element): boolean {\n return ['table', 'td', 'th'].includes(getNodeName(element))\n}\n\nexport function isContainingBlock(element: Element): boolean {\n const webkit = isWebKit()\n const css = getComputedStyle(element) as any\n\n return (\n css.transform !== 'none' ||\n css.perspective !== 'none' ||\n (css.containerType ? css.containerType !== 'normal' : false) ||\n (!webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false)) ||\n (!webkit && (css.filter ? css.filter !== 'none' : false)) ||\n ['transform', 'perspective', 'filter'].some((value) =>\n (css.willChange || '').includes(value)\n ) ||\n ['paint', 'layout', 'strict', 'content'].some((value) =>\n (css.contain || '').includes(value)\n )\n )\n}\n\nexport function getContainingBlock(element: Element): HTMLElement | null {\n let currentNode: Node | null = getParentNode(element)\n\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode\n }\n\n currentNode = getParentNode(currentNode)\n }\n\n return null\n}\n\nexport function isWebKit(): boolean {\n if (typeof CSS === 'undefined' || !CSS.supports) return false\n return CSS.supports('-webkit-backdrop-filter', 'none')\n}\n\nexport function isLastTraversableNode(node: Node): boolean {\n return ['html', 'body', '#document'].includes(getNodeName(node))\n}\n\nexport function getComputedStyle(element: Element): CSSStyleDeclaration {\n return getWindow(element).getComputedStyle(element)\n}\n\nexport function getNodeScroll(element: Element | Window): {\n scrollLeft: number\n scrollTop: number\n} {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop,\n }\n }\n\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset,\n }\n}\n\nexport function getParentNode(node: Node): Node {\n if (getNodeName(node) === 'html') {\n return node\n }\n\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n (node as any).assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n (isShadowRoot(node) && node.host) ||\n // Fallback.\n getDocumentElement(node)\n\n return isShadowRoot(result) ? result.host : result\n}\n\nexport function getNearestOverflowAncestor(node: Node): HTMLElement {\n const parentNode = getParentNode(node)\n\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument\n ? node.ownerDocument.body\n : (node as Document).body\n }\n\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode\n }\n\n return getNearestOverflowAncestor(parentNode)\n}\n\nexport function getOverflowAncestors(\n node: Node,\n list: OverflowAncestors = [],\n traverseIframes = true\n): OverflowAncestors {\n const scrollableAncestor = getNearestOverflowAncestor(node)\n const isBody = scrollableAncestor === node.ownerDocument?.body\n const win = getWindow(scrollableAncestor)\n\n if (isBody) {\n return list.concat(\n win,\n win.visualViewport || [],\n isOverflowElement(scrollableAncestor) ? scrollableAncestor : [],\n win.frameElement && traverseIframes\n ? getOverflowAncestors(win.frameElement)\n : []\n )\n }\n\n return list.concat(\n scrollableAncestor,\n getOverflowAncestors(scrollableAncestor, [], traverseIframes)\n )\n}\n"],"names":[],"mappings":"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"}