{"version":3,"file":"popper.es5.js.map","sources":["../src/popper/utils/getStyleComputedProperty.js","../src/popper/utils/getParentNode.js","../src/popper/utils/getScrollParent.js","../src/popper/utils/isOffsetContainer.js","../src/popper/utils/getRoot.js","../src/popper/utils/findCommonOffsetParent.js","../src/popper/utils/getScroll.js","../src/popper/utils/includeScroll.js","../src/popper/utils/getBordersSize.js","../src/popper/utils/getWindowSizes.js","../src/popper/utils/getBoundingClientRect.js","../src/popper/utils/getOffsetRectRelativeToArbitraryNode.js","../src/popper/utils/getViewportOffsetRectRelativeToArtbitraryNode.js","../src/popper/utils/isFixed.js","../src/popper/utils/getBoundaries.js","../src/popper/utils/computeAutoPlacement.js","../src/popper/utils/isNative.js","../src/popper/utils/debounce.js","../src/popper/utils/find.js","../src/popper/utils/findIndex.js","../src/popper/utils/getClientRect.js","../src/popper/utils/getOffsetParent.js","../src/popper/utils/getOffsetRect.js","../src/popper/utils/getOuterSizes.js","../src/popper/utils/getOppositePlacement.js","../src/popper/utils/getPopperOffsets.js","../src/popper/utils/getPosition.js","../src/popper/utils/getReferenceOffsets.js","../src/popper/utils/getSupportedPropertyName.js","../src/popper/utils/getTotalScroll.js","../src/popper/utils/isFunction.js","../src/popper/utils/isModifierEnabled.js","../src/popper/utils/isModifierRequired.js","../src/popper/utils/isNumeric.js","../src/popper/utils/isTransformed.js","../src/popper/utils/removeEventListeners.js","../src/popper/utils/runModifiers.js","../src/popper/utils/setAttributes.js","../src/popper/utils/setStyles.js","../src/popper/utils/setupEventListeners.js","../src/popper/utils/index.js","../src/popper/modifiers/applyStyle.js","../src/popper/modifiers/arrow.js","../src/popper/utils/getOppositeVariation.js","../src/popper/modifiers/flip.js","../src/popper/modifiers/keepTogether.js","../src/popper/modifiers/offset.js","../src/popper/modifiers/preventOverflow.js","../src/popper/modifiers/shift.js","../src/popper/modifiers/hide.js","../src/popper/modifiers/inner.js","../src/popper/modifiers/index.js","../src/popper/index.js"],"sourcesContent":["/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n","/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (\n !element || ['HTML', 'BODY', '#document'].indexOf(element.nodeName) !== -1\n ) {\n return window.document.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n","export default function isOffsetContainer(element) {\n return (\n element.nodeName === 'HTML' ||\n element.firstElementChild.offsetParent === element\n );\n}\n","/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n","import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n const range = document.createRange();\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (element1 && element2) {\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n if (\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING\n ) {\n range.setStart(element1, 0);\n range.setEnd(element2, 0);\n } else {\n range.setStart(element2, 0);\n range.setEnd(element1, 0);\n }\n } else {\n return window.document.documentElement;\n }\n\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n element1 !== commonAncestorContainer && element2 !== commonAncestorContainer\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n const offsetParent =\n commonAncestorContainer && commonAncestorContainer.offsetParent;\n\n if (!offsetParent || (offsetParent && offsetParent.nodeName === 'BODY')) {\n return window.document.documentElement;\n }\n\n return offsetParent;\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n","/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {Number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = window.document.documentElement;\n const scrollingElement = window.document.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n","import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n","/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles - result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {Number} borders - the borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n Number(styles[`border${sideA}Width`].split('px')[0]) +\n Number(styles[`border${sideB}Width`].split('px')[0])\n );\n}\n","export default function getWindowSizes() {\n const body = window.document.body;\n const html = window.document.documentElement;\n return {\n height: Math.max(\n body.scrollHeight,\n body.offsetHeight,\n html.clientHeight,\n html.scrollHeight,\n html.offsetHeight\n ),\n width: Math.max(\n body.scrollWidth,\n body.offsetWidth,\n html.clientWidth,\n html.scrollWidth,\n html.offsetWidth\n ),\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n const isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;\n let rect;\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n if (isIE10) {\n try {\n rect = element.getBoundingClientRect();\n } catch (err) {\n rect = {};\n }\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.bottom += scrollTop;\n rect.left += scrollLeft;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n\n const result = {\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n let width, height;\n if (element.nodeName === 'HTML') {\n const sizes = getWindowSizes();\n width = sizes.width;\n height = sizes.height;\n } else {\n width = element.clientWidth || result.right - result.left;\n height = element.clientHeight || result.bottom - result.top;\n }\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.right -= horizScrollbar;\n result.width -= horizScrollbar;\n result.bottom -= vertScrollbar;\n result.height -= vertScrollbar;\n }\n\n return result;\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent) {\n const isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n let offsets = {\n top: childrenRect.top - parentRect.top,\n left: childrenRect.left - parentRect.left,\n bottom: childrenRect.top - parentRect.top + childrenRect.height,\n right: childrenRect.left - parentRect.left + childrenRect.width,\n width: childrenRect.width,\n height: childrenRect.height,\n };\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n const isHTML = parent.nodeName === 'HTML';\n if (isHTML || parent.nodeName === 'BODY') {\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = isIE10 && isHTML ? 0 : +styles.borderTopWidth.split('px')[0];\n const borderLeftWidth = isIE10 && isHTML ? 0 : +styles.borderLeftWidth.split('px')[0];\n const marginTop = isIE10 && isHTML ? 0 : +styles.marginTop.split('px')[0];\n const marginLeft = isIE10 && isHTML ? 0 : +styles.marginLeft.split('px')[0];\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n parent.contains(scrollParent) &&\n (isIE10 || scrollParent.nodeName !== 'BODY')\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n","import getOffsetRectRelativeToArbitraryNode\n from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element) {\n const html = window.document.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = getScroll(html);\n const scrollLeft = getScroll(html, 'left');\n\n return {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n bottom: scrollTop - relativeOffset.top + relativeOffset.marginTop + height,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n right: scrollLeft - relativeOffset.left + relativeOffset.marginLeft + width,\n };\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n","import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode\n from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode\n from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {Object} data - Object containing the property \"offsets\" generated by `_getOffsets`\n * @param {Number} padding - Boundaries padding\n * @param {Element} boundariesElement - Element used to define the boundaries\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n) {\n // NOTE: 1 DOM access here\n let boundaries = { top: 0, left: 0 };\n const offsetParent = findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);\n } else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(popper));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = window.document.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = window.document.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes();\n boundaries.right = width;\n boundaries.bottom = height;\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent\n );\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom += offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right += offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent\n );\n }\n }\n\n // Add paddings\n boundaries.left += padding;\n boundaries.top += padding;\n boundaries.right -= padding;\n boundaries.bottom -= padding;\n\n return boundaries;\n}\n","import getBoundaries from '../utils/getBoundaries';\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(popper, reference, 0, 'scrollParent');\n\n const sides = {\n top: refRect.top - boundaries.top,\n right: boundaries.right - refRect.right,\n bottom: boundaries.bottom - refRect.bottom,\n left: refRect.left - boundaries.left,\n };\n\n const computedPlacement = Object.keys(sides).sort(\n (a, b) => sides[b] - sides[a]\n )[0];\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n","const nativeHints = [\n 'native code',\n '[object MutationObserverConstructor]', // for mobile safari iOS 9.0\n];\n\n/**\n * Determine if a function is implemented natively (as opposed to a polyfill).\n * @argument {Function | undefined} fn the function to check\n * @returns {boolean}\n */\nexport default fn =>\n nativeHints.some(hint => (fn || '').toString().indexOf(hint) > -1);\n","import isNative from './isNative';\n\nconst isBrowser = typeof window !== 'undefined';\nconst longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nlet timeoutDuration = 0;\nfor (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nexport function microtaskDebounce(fn) {\n let scheduled = false;\n let i = 0;\n const elem = document.createElement('span');\n\n // MutationObserver provides a mechanism for scheduling microtasks, which\n // are scheduled *before* the next task. This gives us a way to debounce\n // a function but ensure it's called *before* the next paint.\n const observer = new MutationObserver(() => {\n fn();\n scheduled = false;\n });\n\n observer.observe(elem, { attributes: true });\n\n return () => {\n if (!scheduled) {\n scheduled = true;\n elem.setAttribute('x-index', i);\n i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8\n }\n };\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\n// It's common for MutationObserver polyfills to be seen in the wild, however\n// these rely on Mutation Events which only occur when an element is connected\n// to the DOM. The algorithm used in this module does not use a connected element,\n// and so we must ensure that a *native* MutationObserver is available.\nconst supportsNativeMutationObserver =\n isBrowser && isNative(window.MutationObserver);\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsNativeMutationObserver\n ? microtaskDebounce\n : taskDebounce);\n","/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n","import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n","/**\n * Given the popper offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} popperOffsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(popperOffsets) {\n return {\n ...popperOffsets,\n right: popperOffsets.left + popperOffsets.width,\n bottom: popperOffsets.top + popperOffsets.height,\n };\n}\n","/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n // NOTE: 1 DOM access here\n const offsetParent = element.offsetParent;\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return window.document.documentElement;\n }\n\n return offsetParent;\n}\n","import getWindowSizes from './getWindowSizes';\n\n/**\n * Get the position of the given element, relative to its offset parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\nexport default function getOffsetRect(element) {\n let elementRect;\n if (element.nodeName === 'HTML') {\n const { width, height } = getWindowSizes();\n elementRect = {\n width,\n height,\n left: 0,\n top: 0,\n };\n } else {\n elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop,\n };\n }\n\n elementRect.right = elementRect.left + elementRect.width;\n elementRect.bottom = elementRect.top + elementRect.height;\n\n // position\n return elementRect;\n}\n","/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const styles = window.getComputedStyle(element);\n const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n","/**\n * Get the opposite placement of the given one/\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n","import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(\n position,\n popper,\n referenceOffsets,\n placement\n) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n position,\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n","import getOffsetParent from './getOffsetParent';\nimport isFixed from './isFixed';\n\n/**\n * Helper used to get the position which will be applied to the popper\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element - popper element\n * @returns {String} position\n */\nexport default function getPosition(element) {\n const container = getOffsetParent(element);\n\n // Decide if the popper will be fixed\n // If the reference element is inside a fixed context, the popper will be fixed as well to allow them to scroll together\n const isParentFixed = isFixed(container);\n return isParentFixed ? 'fixed' : 'absolute';\n}\n","import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode\n from './getOffsetRectRelativeToArbitraryNode';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference) {\n const commonOffsetParent = findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);\n}\n","/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'webkit', 'moz', 'o'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length - 1; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof window.document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n","import getScrollParent from './getScrollParent';\nimport getScroll from './getScroll';\nimport getParentNode from './getParentNode';\nimport isOffsetContainer from './isOffsetContainer';\nimport isFixed from './isFixed';\n\n/**\n * Gets the scroll value of the given element relative to the given parent/\n * It will not include the scroll values of elements that aren't positioned.\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} parent\n * @argument {String} side `top` or `left`\n * @returns {Number} amount of scrolled pixels\n */\nexport default function getTotalScroll(element, parent, side = 'top') {\n const scrollParent = getScrollParent(element);\n let scroll = 0;\n const isParentFixed = isFixed(parent);\n\n // NOTE: I'm not sure the second line of this check is completely correct, review it if\n // someone complains about viewport problems in future\n if (\n isOffsetContainer(\n scrollParent.nodeName === 'BODY'\n ? window.document.documentElement\n : scrollParent\n ) &&\n ((parent.contains(scrollParent) && isParentFixed) || !isParentFixed)\n ) {\n scroll = getScroll(scrollParent, side);\n }\n\n if (\n parent === scrollParent ||\n ['BODY', 'HTML'].indexOf(scrollParent.nodeName) === -1\n ) {\n return scroll + getTotalScroll(getParentNode(scrollParent), parent, side);\n }\n return scroll;\n}\n","/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {*} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n","/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n","import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n return (\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n })\n );\n}\n","/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n","import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element has transforms applied to itself or a parent\n * @method\n * @memberof Popper.Utils\n * @param {Element} element\n * @return {Boolean} answer to \"isTransformed?\"\n */\nexport default function isTransformed(element) {\n if (element.nodeName === 'BODY') {\n return false;\n }\n if (getStyleComputedProperty(element, 'transform') !== 'none') {\n return true;\n }\n return getParentNode(element)\n ? isTransformed(getParentNode(element))\n : element;\n}\n","/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n window.removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n","import isFunction from './isFunction';\nimport findIndex from './findIndex';\n\n/**\n * Loop trough the list of modifiers and run them in order, each of them will then edit the data object\n * @method\n * @memberof Popper.Utils\n * @param {Object} data\n * @param {Array} modifiers\n * @param {Function} ends\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier.enabled && isFunction(modifier.function)) {\n data = modifier.function(data, modifier);\n }\n });\n\n return data;\n}\n","/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles - Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n","import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles - Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 && isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n","import getScrollParent from './getScrollParent';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? window : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n window.addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n","import computeAutoPlacement from './computeAutoPlacement';\nimport debounce from './debounce';\nimport findIndex from './findIndex';\nimport getBordersSize from './getBordersSize';\nimport getBoundaries from './getBoundaries';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getClientRect from './getClientRect';\nimport getOffsetParent from './getOffsetParent';\nimport getOffsetRect from './getOffsetRect';\nimport getOffsetRectRelativeToArbitraryNode\n from './getOffsetRectRelativeToArbitraryNode';\nimport getOuterSizes from './getOuterSizes';\nimport getParentNode from './getParentNode';\nimport getPopperOffsets from './getPopperOffsets';\nimport getPosition from './getPosition';\nimport getReferenceOffsets from './getReferenceOffsets';\nimport getScroll from './getScroll';\nimport getScrollParent from './getScrollParent';\nimport getStyleComputedProperty from './getStyleComputedProperty';\nimport getSupportedPropertyName from './getSupportedPropertyName';\nimport getTotalScroll from './getTotalScroll';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport isFunction from './isFunction';\nimport isModifierEnabled from './isModifierEnabled';\nimport isModifierRequired from './isModifierRequired';\nimport isNative from './isNative';\nimport isNumeric from './isNumeric';\nimport isTransformed from './isTransformed';\nimport removeEventListeners from './removeEventListeners';\nimport runModifiers from './runModifiers';\nimport setAttributes from './setAttributes';\nimport setStyles from './setStyles';\nimport setupEventListeners from './setupEventListeners';\n\n/** @namespace Popper.Utils */\nexport default {\n computeAutoPlacement,\n debounce,\n findIndex,\n getBordersSize,\n getBoundaries,\n getBoundingClientRect,\n getClientRect,\n getOffsetParent,\n getOffsetRect,\n getOffsetRectRelativeToArbitraryNode,\n getOuterSizes,\n getParentNode,\n getPopperOffsets,\n getPosition,\n getReferenceOffsets,\n getScroll,\n getScrollParent,\n getStyleComputedProperty,\n getSupportedPropertyName,\n getTotalScroll,\n getWindowSizes,\n isFixed,\n isFunction,\n isModifierEnabled,\n isModifierRequired,\n isNative,\n isNumeric,\n isTransformed,\n removeEventListeners,\n runModifiers,\n setAttributes,\n setStyles,\n setupEventListeners,\n};\n","import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * Apply the computed styles to the popper element\n * @method\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data, options) {\n // apply the final offsets to the popper\n // NOTE: 1 DOM access here\n const styles = {\n position: data.offsets.popper.position,\n };\n\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // round top and left to avoid blurry text\n const left = Math.round(data.offsets.popper.left);\n const top = Math.round(data.offsets.popper.top);\n\n // if gpuAcceleration is set to true and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n if (options.gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles.top = 0;\n styles.left = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `left` and `top` properties\n styles.left = left;\n styles.top = top;\n styles.willChange = 'top, left';\n }\n\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, { ...styles, ...data.styles });\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, { ...attributes, ...data.attributes });\n\n // if the arrow style has been computed, apply the arrow style\n if (data.offsets.arrow) {\n setStyles(data.arrowElement, data.offsets.arrow);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used to add margins to the popper\n * margins needs to be calculated to get the correct popper offsets\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n options.placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference\n );\n\n popper.setAttribute('x-placement', options.placement);\n return options;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\n\n/**\n * Modifier used to move the arrowElements on the edge of the popper to make sure them are always between the popper and the reference element\n * It will use the CSS outer size of the arrowElement element to know how many pixels of conjuction are needed\n * @method\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n console.warn(\n 'WARNING: `keepTogether` modifier is required by arrow modifier in order to work, be sure to include it before `arrow`!'\n );\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const popper = getClientRect(data.offsets.popper);\n const reference = data.offsets.reference;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const side = isVertical ? 'top' : 'left';\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n let sideValue = center - getClientRect(data.offsets.popper)[side];\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {};\n data.offsets.arrow[side] = sideValue;\n data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node\n\n return data;\n}\n","/**\n * Get the opposite placement variation of the given one/\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n","import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getClientRect from '../utils/getClientRect';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\n\n/**\n * Modifier used to flip the placement of the popper when the latter is starting overlapping its reference element.\n * Requires the `preventOverflow` modifier before it in order to work.\n * **NOTE:** data.instance modifier will run all its previous modifiers everytime it tries to flip the popper!\n * @method\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n if (options.behavior === 'flip') {\n flipOrder = [placement, placementOpposite];\n } else {\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = getClientRect(data.offsets.popper);\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n data.offsets.popper = getPopperOffsets(\n data.instance.state.position,\n data.instance.popper,\n data.offsets.reference,\n data.placement\n );\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\n\n/**\n * Modifier used to make sure the popper is always near its reference element\n * It cares only about the first axis, you can still have poppers with margin\n * between the popper and its reference element.\n * @method\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const popper = getClientRect(data.offsets.popper);\n const reference = data.offsets.reference;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n","import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Modifier used to add an offset to the popper, useful if you more granularity positioning your popper.\n * The offsets will shift the popper on the side of its reference element.\n * @method\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * Basic usage allows a number used to nudge the popper by the given amount of pixels.\n * You can pass a percentage value as string (eg. `20%`) to nudge by the given percentage (relative to reference element size)\n * Other supported units are `vh` and `vw` (relative to viewport)\n * Additionally, you can pass a pair of values (eg. `10 20` or `2vh 20%`) to nudge the popper\n * on both axis.\n * A note about percentage values, if you want to refer a percentage to the popper size instead of the reference element size,\n * use `%p` instead of `%` (eg: `20%p`). To make it clearer, you can replace `%` with `%r` and use eg.`10%p 25%r`.\n * > **Heads up!** The order of the axis is relative to the popper placement: `bottom` or `top` are `X,Y`, the other are `Y,X`\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, options) {\n const placement = data.placement;\n const popper = data.offsets.popper;\n\n let offsets;\n if (isNumeric(options.offset)) {\n offsets = [options.offset, 0];\n } else {\n // split the offset in case we are providing a pair of offsets separated\n // by a blank space\n offsets = options.offset.split(' ');\n\n // itherate through each offset to compute them in case they are percentages\n offsets = offsets.map((offset, index) => {\n // separate value from unit\n const split = offset.match(/(\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n let useHeight =\n placement.indexOf('right') !== -1 || placement.indexOf('left') !== -1;\n\n if (index === 1) {\n useHeight = !useHeight;\n }\n\n const measurement = useHeight ? 'height' : 'width';\n\n // if is a percentage relative to the popper (%p), we calculate the value of it using\n // as base the sizes of the popper\n // if is a percentage (% or %r), we calculate the value of it using as base the\n // sizes of the reference element\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = data.offsets.popper;\n break;\n case '%':\n case '$r':\n default:\n element = data.offsets.reference;\n }\n\n const rect = getClientRect(element);\n const len = rect[measurement];\n return len / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else if (unit === 'px') {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n return +value;\n } else {\n // if is an implicit unit, it's px, and we return just the value\n return +offset;\n }\n });\n }\n\n if (data.placement.indexOf('left') !== -1) {\n popper.top += offsets[0];\n popper.left -= offsets[1] || 0;\n } else if (data.placement.indexOf('right') !== -1) {\n popper.top += offsets[0];\n popper.left += offsets[1] || 0;\n } else if (data.placement.indexOf('top') !== -1) {\n popper.left += offsets[0];\n popper.top -= offsets[1] || 0;\n } else if (data.placement.indexOf('bottom') !== -1) {\n popper.left += offsets[0];\n popper.top += offsets[1] || 0;\n }\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\n\n/**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * An scenario exists where the reference itself is not within the boundaries. We can\n * say it has \"escaped the boundaries\" — or just \"escaped\". In this case we need to\n * decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should be ignore the boundary and \"escape with the reference\"\n *\n * When `escapeWithReference` is `true`, and reference is completely outside the\n * boundaries, the popper will overflow (or completely leave) the boundaries in order\n * to remain attached to the edge of the reference.\n *\n * @method\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n const boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement\n );\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = getClientRect(data.offsets.popper);\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side = ['left', 'top'].indexOf(placement) !== -1\n ? 'primary'\n : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\n\n/**\n * Modifier used to shift the popper on the start or end of its reference element side\n * @method\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const reference = data.offsets.reference;\n const popper = getClientRect(data.offsets.popper);\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n","import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set an x-hidden attribute which can be used to hide\n * the popper when its reference is out of boundaries.\n * @method\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n console.warn(\n 'WARNING: preventOverflow modifier is required by hide modifier in order to work, be sure to include it before hide!'\n );\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n","import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @method\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const popper = getClientRect(data.offsets.popper);\n const reference = getClientRect(data.offsets.reference);\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[placement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n","import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.\n * Popper.js uses a set of 7 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Each modifier is an object containing several properties listed below.\n * @namespace Modifiers\n * @param {Object} modifier - Modifier descriptor\n * @param {Integer} modifier.order\n * The `order` property defines the execution order of the modifiers.\n * The built-in modifiers have orders with a gap of 100 units in between,\n * this allows you to inject additional modifiers between the existing ones\n * without having to redefine the order of all of them.\n * The modifiers are executed starting from the one with the lowest order.\n * @param {Boolean} modifier.enabled - When `true`, the modifier will be used.\n * @param {Modifiers~modifier} modifier.function - Modifier function.\n * @param {Modifiers~onLoad} modifier.onLoad - Function executed on popper initalization\n * @return {Object} data - Each modifier must return the modified `data` object.\n */\nexport default {\n shift: {\n order: 100,\n enabled: true,\n function: shift,\n },\n offset: {\n order: 200,\n enabled: true,\n function: offset,\n // nudges popper from its origin by the given amount of pixels (can be negative)\n offset: 0,\n },\n preventOverflow: {\n order: 300,\n enabled: true,\n function: preventOverflow,\n // popper will try to prevent overflow following these priorities\n // by default, then, it could overflow on the left and on top of the boundariesElement\n priority: ['left', 'right', 'top', 'bottom'],\n // amount of pixel used to define a minimum distance between the boundaries and the popper\n // this makes sure the popper has always a little padding between the edges of its container\n padding: 5,\n boundariesElement: 'scrollParent',\n },\n keepTogether: {\n order: 400,\n enabled: true,\n function: keepTogether,\n },\n arrow: {\n order: 500,\n enabled: true,\n function: arrow,\n // selector or node used as arrow\n element: '[x-arrow]',\n },\n flip: {\n order: 600,\n enabled: true,\n function: flip,\n // the behavior used to change the popper's placement\n behavior: 'flip',\n // the popper will flip if it hits the edges of the boundariesElement - padding\n padding: 5,\n boundariesElement: 'viewport',\n },\n inner: {\n order: 700,\n enabled: false,\n function: inner,\n },\n hide: {\n order: 800,\n enabled: true,\n function: hide,\n },\n applyStyle: {\n order: 900,\n enabled: true,\n // if true, it uses the CSS 3d transformation to position the popper\n gpuAcceleration: true,\n function: applyStyle,\n onLoad: applyStyleOnLoad,\n },\n};\n\n/**\n * Modifiers can edit the `data` object to change the beheavior of the popper.\n * This object contains all the informations used by Popper.js to compute the\n * popper position.\n * The modifier can edit the data as needed, and then `return` it as result.\n *\n * @callback Modifiers~modifier\n * @param {dataObject} data\n * @return {dataObject} modified data\n */\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arro] `top` and `left` offsets, only one of them will be different from 0\n */\n","// Utils\nimport Utils from './utils/index';\nimport debounce from './utils/debounce';\nimport setStyles from './utils/setStyles';\nimport isTransformed from './utils/isTransformed';\nimport getSupportedPropertyName from './utils/getSupportedPropertyName';\nimport getReferenceOffsets from './utils/getReferenceOffsets';\nimport getPopperOffsets from './utils/getPopperOffsets';\nimport isFunction from './utils/isFunction';\nimport setupEventListeners from './utils/setupEventListeners';\nimport removeEventListeners from './utils/removeEventListeners';\nimport runModifiers from './utils/runModifiers';\nimport isModifierEnabled from './utils/isModifierEnabled';\nimport computeAutoPlacement from './utils/computeAutoPlacement';\n\n// Modifiers\nimport modifiers from './modifiers/index';\n\n// default options\nconst DEFAULTS = {\n // placement of the popper\n placement: 'bottom',\n\n // whether events (resize, scroll) are initially enabled\n eventsEnabled: true,\n\n /**\n * Callback called when the popper is created.\n * By default, is set to no-op.\n * Access Popper.js instance with `data.instance`.\n * @callback createCallback\n * @static\n * @param {dataObject} data\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated, this callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.\n * By default, is set to no-op.\n * Access Popper.js instance with `data.instance`.\n * @callback updateCallback\n * @static\n * @param {dataObject} data\n */\n onUpdate: () => {},\n\n // list of functions used to modify the offsets before they are applied to the popper\n modifiers,\n};\n\n/**\n * Create a new Popper.js instance\n * @class Popper\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options\n * @param {String} options.placement=bottom\n * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -end),\n * left(-start, -end)`\n *\n * @param {Boolean} options.eventsEnabled=true\n * Whether events (resize, scroll) are initially enabled\n * @param {Boolean} options.gpuAcceleration=true\n * When this property is set to true, the popper position will be applied using CSS3 translate3d, allowing the\n * browser to use the GPU to accelerate the rendering.\n * If set to false, the popper will be placed using `top` and `left` properties, not using the GPU.\n *\n * @param {Boolean} options.removeOnDestroy=false\n * Set to true if you want to automatically remove the popper when you call the `destroy` method.\n *\n * @param {Object} options.modifiers\n * List of functions used to modify the data before they are applied to the popper (see source code for default values)\n *\n * @param {Object} options.modifiers.arrow - Arrow modifier configuration\n * @param {String|HTMLElement} options.modifiers.arrow.element='[x-arrow]'\n * The DOM Node used as arrow for the popper, or a CSS selector used to get the DOM node. It must be child of\n * its parent Popper. Popper.js will apply to the given element the style required to align the arrow with its\n * reference element.\n * By default, it will look for a child node of the popper with the `x-arrow` attribute.\n *\n * @param {Object} options.modifiers.offset - Offset modifier configuration\n * @param {Number} options.modifiers.offset.offset=0\n * Amount of pixels the popper will be shifted (can be negative).\n *\n * @param {Object} options.modifiers.preventOverflow - PreventOverflow modifier configuration\n * @param {Array} [options.modifiers.preventOverflow.priority=['left', 'right', 'top', 'bottom']]\n * Priority used when Popper.js tries to avoid overflows from the boundaries, they will be checked in order,\n * this means that the last one will never overflow\n * @param {String|HTMLElement} options.modifiers.preventOverflow.boundariesElement='scrollParent'\n * Boundaries used by the modifier, can be `scrollParent`, `window`, `viewport` or any DOM element.\n * @param {Number} options.modifiers.preventOverflow.padding=5\n * Amount of pixels used to define a minimum distance between the boundaries and the popper\n * this makes sure the popper has always a little padding between the edges of its container.\n *\n * @param {Object} options.modifiers.flip - Flip modifier configuration\n * @param {String|Array} options.modifiers.flip.behavior='flip'\n * The behavior used by the `flip` modifier to change the placement of the popper when the latter is trying to\n * overlap its reference element. Defining `flip` as value, the placement will be flipped on\n * its axis (`right - left`, `top - bottom`).\n * You can even pass an array of placements (eg: `['right', 'left', 'top']` ) to manually specify\n * how alter the placement when a flip is needed. (eg. in the above example, it would first flip from right to left,\n * then, if even in its new placement, the popper is overlapping its reference element, it will be moved to top)\n * @param {String|HTMLElement} options.modifiers.flip.boundariesElement='viewport'\n * The element which will define the boundaries of the popper position, the popper will never be placed outside\n * of the defined boundaries (except if `keepTogether` is enabled)\n *\n * @param {Object} options.modifiers.inner - Inner modifier configuration\n * @param {Number} options.modifiers.inner.enabled=false\n * Set to `true` to make the popper flow toward the inner of the reference element.\n *\n * @param {Number} options.modifiers.flip.padding=5\n * Amount of pixels used to define a minimum distance between the boundaries and the popper\n * this makes sure the popper will flip before it touches the edge of the boundaries,\n * making it have always a little padding between the edges of its container.\n *\n * @param {createCallback} options.onCreate - onCreate callback\n * Function called after the Popper has been instantiated.\n *\n * @param {updateCallback} options.onUpdate - onUpdate callback\n * Function called on subsequent updates of Popper.\n *\n * @return {Object} instance - The generated Popper.js instance\n */\nexport default class Popper {\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference.jquery ? reference[0] : reference;\n this.popper = popper.jquery ? popper[0] : popper;\n\n // make sure to apply the popper position before any computation\n setStyles(this.popper, { position: 'absolute' });\n\n // refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(Popper.Defaults.modifiers).map(name => ({\n name,\n ...Popper.Defaults.modifiers[name],\n }));\n\n // assign default values to modifiers, making sure to override them with\n // the ones defined by user\n this.modifiers = this.modifiers.map(defaultConfig => {\n const userConfig = (options.modifiers &&\n options.modifiers[defaultConfig.name]) || {};\n return { ...defaultConfig, ...userConfig };\n });\n\n // add custom modifiers to the modifiers list\n if (options.modifiers) {\n this.options.modifiers = {\n ...{},\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n };\n Object.keys(options.modifiers).forEach(name => {\n // take in account only custom modifiers\n if (Popper.Defaults.modifiers[name] === undefined) {\n const modifier = options.modifiers[name];\n modifier.name = name;\n this.modifiers.push(modifier);\n }\n });\n }\n\n // sort the modifiers by order\n this.modifiers = this.modifiers.sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // determine how we should set the origin of offsets\n this.state.isParentTransformed = isTransformed(this.popper.parentNode);\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n //\n // Methods\n //\n\n /**\n * Updates the position of the popper, computing the new offsets and applying the new style\n * Prefer `scheduleUpdate` over `update` because of performance reasons\n * @method\n * @memberof Popper\n */\n update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = this.options.placement;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.state,\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n }\n\n /**\n * Schedule an update, it will run on the next UI update available\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\n destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.left = '';\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n }\n\n /**\n * it will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered\n * @method\n * @memberof Popper\n */\n enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n }\n\n /**\n * it will remove resize/scroll events and won't recalculate\n * popper position when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call 'update' method manually.\n * @method\n * @memberof Popper\n */\n disableEventListeners() {\n if (this.state.eventsEnabled) {\n window.cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n }\n\n /**\n * Collection of utilities useful when writing custom modifiers\n * @memberof Popper\n */\n static Utils = Utils;\n\n /**\n * List of accepted placements to use as values of the `placement` option\n * @memberof Popper\n */\n static placements = [\n 'auto',\n 'auto-start',\n 'auto-end',\n 'top',\n 'top-start',\n 'top-end',\n 'right',\n 'right-start',\n 'right-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n ];\n\n /**\n * Default Popper.js options\n * @memberof Popper\n */\n static Defaults = DEFAULTS;\n}\n"],"names":["getStyleComputedProperty","element","property","nodeType","css","window","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","indexOf","document","body","overflow","overflowX","overflowY","test","isOffsetContainer","firstElementChild","offsetParent","getRoot","node","findCommonOffsetParent","element1","element2","range","createRange","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","setStart","setEnd","documentElement","commonAncestorContainer","element1root","getScroll","side","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","top","bottom","left","right","getBordersSize","styles","axis","sideA","sideB","Number","split","getWindowSizes","Math","max","scrollHeight","offsetHeight","clientHeight","scrollWidth","offsetWidth","clientWidth","getBoundingClientRect","isIE10","navigator","appVersion","err","result","width","height","sizes","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","children","parent","childrenRect","parentRect","scrollParent","offsets","isHTML","borderTopWidth","borderLeftWidth","marginTop","marginLeft","contains","getViewportOffsetRectRelativeToArtbitraryNode","relativeOffset","innerWidth","innerHeight","isFixed","getBoundaries","popper","reference","padding","boundariesElement","boundaries","boundariesNode","computeAutoPlacement","placement","refRect","sides","computedPlacement","Object","keys","sort","a","b","variation","nativeHints","some","fn","toString","hint","isBrowser","longerTimeoutBrowsers","timeoutDuration","i","length","userAgent","microtaskDebounce","scheduled","elem","createElement","observer","MutationObserver","observe","attributes","setAttribute","taskDebounce","supportsNativeMutationObserver","isNative","find","arr","check","Array","prototype","filter","findIndex","prop","value","cur","match","obj","getClientRect","popperOffsets","getOffsetParent","getOffsetRect","elementRect","offsetLeft","offsetTop","getOuterSizes","x","parseFloat","marginBottom","y","marginRight","getOppositePlacement","hash","replace","matched","getPopperOffsets","position","referenceOffsets","popperRect","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","getPosition","container","isParentFixed","getReferenceOffsets","state","commonOffsetParent","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","slice","prefix","toCheck","style","getTotalScroll","scroll","isFunction","functionToCheck","getType","call","isModifierEnabled","modifiers","modifierName","name","enabled","isModifierRequired","requestingName","requestedName","requesting","order","isNumeric","n","isNaN","isFinite","isTransformed","removeEventListeners","removeEventListener","updateBound","scrollParents","forEach","scrollElement","eventsEnabled","runModifiers","data","ends","modifiersToRun","undefined","function","setAttributes","removeAttribute","setStyles","unit","attachToScrollParents","event","callback","isBody","target","addEventListener","passive","push","setupEventListeners","options","applyStyle","round","prefixedProperty","gpuAcceleration","willChange","instance","arrow","arrowElement","applyStyleOnLoad","modifierOptions","warn","querySelector","isVertical","len","altSide","opSide","arrowElementSize","center","sideValue","min","getOppositeVariation","flip","flipped","originalPlacement","placementOpposite","flipOrder","behavior","step","index","refOffsets","floor","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","keepTogether","offset","map","useHeight","size","preventOverflow","priority","escapeWithReference","shift","basePlacement","shiftvariation","shiftOffsets","hide","bound","inner","subtractLength","DEFAULTS","Popper","scheduleUpdate","requestAnimationFrame","update","debounce","bind","Defaults","jquery","userConfig","defaultConfig","onLoad","isParentTransformed","enableEventListeners","isDestroyed","isCreated","onCreate","onUpdate","disableEventListeners","removeOnDestroy","removeChild","cancelAnimationFrame","Utils","placements"],"mappings":"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"}