{"version":3,"file":"stackingOrder.js","sources":["../../src/Splitter/utils/stackingOrder.ts"],"sourcesContent":["// Forked from NPM stacking-order@2.0.0\n// Background at https://github.com/Rich-Harris/stacking-order/issues/3\n\nimport { assert } from './assert'\n\n/**\n * Determine which of two nodes appears in front of the other —\n * if `a` is in front, returns 1, otherwise returns -1\n * @param {HTMLElement} a\n * @param {HTMLElement} b\n */\nexport function compare(a: HTMLElement, b: HTMLElement): number {\n if (a === b)\n throw new Error('Cannot compare node with itself')\n\n const ancestors = {\n a: getAncestors(a),\n b: getAncestors(b),\n }\n\n let common_ancestor\n\n // remove shared ancestors\n while (ancestors.a.at(-1) === ancestors.b.at(-1)) {\n a = ancestors.a.pop() as HTMLElement\n b = ancestors.b.pop() as HTMLElement\n\n common_ancestor = a\n }\n\n assert(common_ancestor)\n\n const z_indexes = {\n a: getZIndex(findStackingContext(ancestors.a)),\n b: getZIndex(findStackingContext(ancestors.b)),\n }\n\n if (z_indexes.a === z_indexes.b) {\n const children = common_ancestor.childNodes\n\n const furthest_ancestors = {\n a: ancestors.a.at(-1),\n b: ancestors.b.at(-1),\n }\n\n let i = children.length\n while (i--) {\n const child = children[i]\n if (child === furthest_ancestors.a)\n return 1\n if (child === furthest_ancestors.b)\n return -1\n }\n }\n\n return Math.sign(z_indexes.a - z_indexes.b)\n}\n\nconst props\n = /\\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\\b/\n\n/** @param {HTMLElement} node */\nfunction isFlexItem(node: HTMLElement) {\n const display = getComputedStyle(getParent(node)).display\n return display === 'flex' || display === 'inline-flex'\n}\n\n/** @param {HTMLElement} node */\nfunction createsStackingContext(node: HTMLElement) {\n const style = getComputedStyle(node)\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n if (style.position === 'fixed')\n return true\n // Forked to fix upstream bug https://github.com/Rich-Harris/stacking-order/issues/3\n // if (\n // (style.zIndex !== \"auto\" && style.position !== \"static\") ||\n // isFlexItem(node)\n // )\n if (\n style.zIndex !== 'auto'\n && (style.position !== 'static' || isFlexItem(node))\n ) {\n return true\n }\n if (+style.opacity < 1)\n return true\n if ('transform' in style && style.transform !== 'none')\n return true\n if ('webkitTransform' in style && style.webkitTransform !== 'none')\n return true\n if ('mixBlendMode' in style && style.mixBlendMode !== 'normal')\n return true\n if ('filter' in style && style.filter !== 'none')\n return true\n if ('webkitFilter' in style && style.webkitFilter !== 'none')\n return true\n if ('isolation' in style && style.isolation === 'isolate')\n return true\n if (props.test(style.willChange))\n return true\n // @ts-expect-error non-standard styling https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow-scrolling\n if (style.webkitOverflowScrolling === 'touch')\n return true\n\n return false\n}\n\n/** @param {HTMLElement[]} nodes */\nfunction findStackingContext(nodes: HTMLElement[]) {\n let i = nodes.length\n\n while (i--) {\n const node = nodes[i]\n assert(node)\n if (createsStackingContext(node))\n return node\n }\n\n return null\n}\n\n/** @param {HTMLElement} node */\nfunction getZIndex(node: HTMLElement | null) {\n return (node && Number(getComputedStyle(node).zIndex)) || 0\n}\n\n/** @param {HTMLElement} node */\nfunction getAncestors(node: HTMLElement) {\n const ancestors = []\n\n while (node) {\n ancestors.push(node)\n node = getParent(node)\n }\n\n return ancestors // [ node, ... , , document ]\n}\n\n/** @param {HTMLElement} node */\nfunction getParent(node: HTMLElement) {\n // @ts-expect-error host should exist\n return (node.parentNode instanceof DocumentFragment && node.parentNode?.host) || node.parentNode\n}\n"],"names":[],"mappings":"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"}