{"version":3,"file":"8b96ed1e.js","sources":["../dist/esm/dom-utils/getWindowScroll.js","../dist/esm/dom-utils/getWindowScrollBarX.js","../dist/esm/dom-utils/isScrollParent.js","../dist/esm/dom-utils/getScrollParent.js","../dist/esm/dom-utils/listScrollParents.js","../dist/esm/dom-utils/getViewportRect.js","../dist/esm/dom-utils/getDocumentRect.js","../dist/esm/utils/rectToClientRect.js","../dist/esm/dom-utils/getClippingRect.js","../dist/esm/utils/getVariation.js","../dist/esm/utils/computeOffsets.js","../dist/esm/utils/detectOverflow.js"],"sourcesContent":["import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}"],"names":["getWindowScroll","node","win","getWindow","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","element","getBoundingClientRect","getDocumentElement","left","isScrollParent","_getComputedStyle","getComputedStyle","overflow","overflowX","overflowY","test","getScrollParent","indexOf","getNodeName","ownerDocument","body","isHTMLElement","getParentNode","listScrollParents","list","_element$ownerDocumen","scrollParent","isBody","target","concat","visualViewport","updatedList","getViewportRect","strategy","html","width","clientWidth","height","clientHeight","x","y","layoutViewport","isLayoutViewport","offsetLeft","offsetTop","getDocumentRect","winScroll","max","scrollWidth","scrollHeight","direction","rectToClientRect","rect","Object","assign","top","right","bottom","getInnerBoundingClientRect","clientTop","clientLeft","getClientRectFromMixedType","clippingParent","viewport","isElement","getClippingParents","clippingParents","canEscapeClipping","position","clipperElement","getOffsetParent","filter","contains","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","reduce","accRect","min","getVariation","placement","split","computeOffsets","_ref","reference","basePlacement","getBasePlacement","variation","commonX","commonY","offsets","mainAxis","getMainAxisFromPlacement","len","start","end","detectOverflow","state","options","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","popper","_options$altBoundary","altBoundary","_options$padding","padding","paddingObject","mergePaddingObject","expandToHashMap","basePlacements","altContext","popperRect","rects","elements","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","keys","forEach","key","multiply","axis"],"mappings":"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"}