{"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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"}