{ version: 3, file: "popper.min.js", sources: [ "../../src/utils/debounce.js", "../../src/utils/isNative.js", "../../src/utils/isFunction.js", "../../src/utils/getStyleComputedProperty.js", "../../src/utils/getParentNode.js", "../../src/utils/getScrollParent.js", "../../src/utils/getOffsetParent.js", "../../src/utils/isOffsetContainer.js", "../../src/utils/getRoot.js", "../../src/utils/findCommonOffsetParent.js", "../../src/utils/getScroll.js", "../../src/utils/includeScroll.js", "../../src/utils/getBordersSize.js", "../../src/utils/isIE10.js", "../../src/utils/getWindowSizes.js", "../../src/utils/getClientRect.js", "../../src/utils/getBoundingClientRect.js", "../../src/utils/getOffsetRectRelativeToArbitraryNode.js", "../../src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js", "../../src/utils/isFixed.js", "../../src/utils/getBoundaries.js", "../../src/utils/computeAutoPlacement.js", "../../src/utils/getReferenceOffsets.js", "../../src/utils/getOuterSizes.js", "../../src/utils/getOppositePlacement.js", "../../src/utils/getPopperOffsets.js", "../../src/utils/find.js", "../../src/utils/findIndex.js", "../../src/utils/runModifiers.js", "../../src/methods/update.js", "../../src/utils/isModifierEnabled.js", "../../src/utils/getSupportedPropertyName.js", "../../src/methods/destroy.js", "../../src/utils/setupEventListeners.js", "../../src/methods/enableEventListeners.js", "../../src/utils/removeEventListeners.js", "../../src/methods/disableEventListeners.js", "../../src/utils/isNumeric.js", "../../src/utils/setStyles.js", "../../src/utils/setAttributes.js", "../../src/modifiers/applyStyle.js", "../../src/modifiers/computeStyle.js", "../../src/utils/isModifierRequired.js", "../../src/modifiers/arrow.js", "../../src/utils/getOppositeVariation.js", "../../src/methods/placements.js", "../../src/utils/clockwise.js", "../../src/modifiers/flip.js", "../../src/modifiers/keepTogether.js", "../../src/modifiers/offset.js", "../../src/modifiers/preventOverflow.js", "../../src/modifiers/shift.js", "../../src/modifiers/hide.js", "../../src/modifiers/inner.js", "../../src/modifiers/index.js", "../../src/methods/defaults.js", "../../src/index.js", ], sourcesContent: [ "import isNative from './isNative'; const isBrowser = typeof window !== 'undefined'; const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; let timeoutDuration = 0; for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) { if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { timeoutDuration = 1; break; } } export function microtaskDebounce(fn) { let scheduled = false; let i = 0; const elem = document.createElement('span'); // MutationObserver provides a mechanism for scheduling microtasks, which // are scheduled *before* the next task. This gives us a way to debounce // a function but ensure it's called *before* the next paint. const observer = new MutationObserver(() => { fn(); scheduled = false; }); observer.observe(elem, { attributes: true }); return () => { if (!scheduled) { scheduled = true; elem.setAttribute('x-index', i); i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8 } }; } export function taskDebounce(fn) { let scheduled = false; return () => { if (!scheduled) { scheduled = true; setTimeout(() => { scheduled = false; fn(); }, timeoutDuration); } }; } // It's common for MutationObserver polyfills to be seen in the wild, however // these rely on Mutation Events which only occur when an element is connected // to the DOM. The algorithm used in this module does not use a connected element, // and so we must ensure that a *native* MutationObserver is available. const supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver); /** * Create a debounced version of a method, that's asynchronously deferred * but called in the minimum time possible. * * @method * @memberof Popper.Utils * @argument {Function} fn * @returns {Function} */ export default (supportsNativeMutationObserver ? microtaskDebounce : taskDebounce); ", "const nativeHints = [ 'native code', '[object MutationObserverConstructor]', // for mobile safari iOS 9.0 ]; /** * Determine if a function is implemented natively (as opposed to a polyfill). * @method * @memberof Popper.Utils * @argument {Function | undefined} fn the function to check * @returns {Boolean} */ export default fn => nativeHints.some(hint => (fn || '').toString().indexOf(hint) > -1); ", "/** * Check if the given variable is a function * @method * @memberof Popper.Utils * @argument {Any} functionToCheck - variable to check * @returns {Boolean} answer to: is a function? */ export default function isFunction(functionToCheck) { const getType = {}; return ( functionToCheck && getType.toString.call(functionToCheck) === '[object Function]' ); } ", "/** * Get CSS computed property of the given element * @method * @memberof Popper.Utils * @argument {Eement} element * @argument {String} property */ export default function getStyleComputedProperty(element, property) { if (element.nodeType !== 1) { return []; } // NOTE: 1 DOM access here const css = window.getComputedStyle(element, null); return property ? css[property] : css; } ", "/** * Returns the parentNode or the host of the element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} parent */ export default function getParentNode(element) { if (element.nodeName === 'HTML') { return element; } return element.parentNode || element.host; } ", "import getStyleComputedProperty from './getStyleComputedProperty'; import getParentNode from './getParentNode'; /** * Returns the scrolling parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} scroll parent */ export default function getScrollParent(element) { // Return body, `getScroll` will take care to get the correct `scrollTop` from it if ( !element || ['HTML', 'BODY', '#document'].indexOf(element.nodeName) !== -1 ) { return window.document.body; } // Firefox want us to check `-x` and `-y` variations as well const { overflow, overflowX, overflowY } = getStyleComputedProperty(element); if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) { return element; } return getScrollParent(getParentNode(element)); } ", "import getStyleComputedProperty from './getStyleComputedProperty'; /** * Returns the offset parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} offset parent */ export default function getOffsetParent(element) { // NOTE: 1 DOM access here const offsetParent = element && element.offsetParent; const nodeName = offsetParent && offsetParent.nodeName; if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { return window.document.documentElement; } // .offsetParent will return the closest TD or TABLE in case // no offsetParent is present, I hate this job... if ( ['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static' ) { return getOffsetParent(offsetParent); } return offsetParent; } ", "import getOffsetParent from './getOffsetParent'; export default function isOffsetContainer(element) { const { nodeName } = element; if (nodeName === 'BODY') { return false; } return ( nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element ); } ", "/** * Finds the root node (document, shadowDOM root) of the given element * @method * @memberof Popper.Utils * @argument {Element} node * @returns {Element} root node */ export default function getRoot(node) { if (node.parentNode !== null) { return getRoot(node.parentNode); } return node; } ", "import isOffsetContainer from './isOffsetContainer'; import getRoot from './getRoot'; import getOffsetParent from './getOffsetParent'; /** * Finds the offset parent common to the two provided nodes * @method * @memberof Popper.Utils * @argument {Element} element1 * @argument {Element} element2 * @returns {Element} common offset parent */ export default function findCommonOffsetParent(element1, element2) { // This check is needed to avoid errors in case one of the elements isn't defined for any reason if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { return window.document.documentElement; } // Here we make sure to give as "start" the element that comes first in the DOM const order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; const start = order ? element1 : element2; const end = order ? element2 : element1; // Get common ancestor container const range = document.createRange(); range.setStart(start, 0); range.setEnd(end, 0); const { commonAncestorContainer } = range; // Both nodes are inside #document if ( (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer) || start.contains(end) ) { if (isOffsetContainer(commonAncestorContainer)) { return commonAncestorContainer; } return getOffsetParent(commonAncestorContainer); } // one of the nodes is inside shadowDOM, find which one const element1root = getRoot(element1); if (element1root.host) { return findCommonOffsetParent(element1root.host, element2); } else { return findCommonOffsetParent(element1, getRoot(element2).host); } } ", "/** * Gets the scroll value of the given element in the given side (top and left) * @method * @memberof Popper.Utils * @argument {Element} element * @argument {String} side `top` or `left` * @returns {number} amount of scrolled pixels */ export default function getScroll(element, side = 'top') { const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; const nodeName = element.nodeName; if (nodeName === 'BODY' || nodeName === 'HTML') { const html = window.document.documentElement; const scrollingElement = window.document.scrollingElement || html; return scrollingElement[upperSide]; } return element[upperSide]; } ", "import getScroll from './getScroll'; /* * Sum or subtract the element scroll values (left and top) from a given rect object * @method * @memberof Popper.Utils * @param {Object} rect - Rect object you want to change * @param {HTMLElement} element - The element from the function reads the scroll values * @param {Boolean} subtract - set to true if you want to subtract the scroll values * @return {Object} rect - The modifier rect object */ export default function includeScroll(rect, element, subtract = false) { const scrollTop = getScroll(element, 'top'); const scrollLeft = getScroll(element, 'left'); const modifier = subtract ? -1 : 1; rect.top += scrollTop * modifier; rect.bottom += scrollTop * modifier; rect.left += scrollLeft * modifier; rect.right += scrollLeft * modifier; return rect; } ", "/* * Helper to detect borders of a given element * @method * @memberof Popper.Utils * @param {CSSStyleDeclaration} styles * Result of `getStyleComputedProperty` on the given element * @param {String} axis - `x` or `y` * @return {number} borders - The borders size of the given axis */ export default function getBordersSize(styles, axis) { const sideA = axis === 'x' ? 'Left' : 'Top'; const sideB = sideA === 'Left' ? 'Right' : 'Bottom'; return ( +styles[`border${sideA}Width`].split('px')[0] + +styles[`border${sideB}Width`].split('px')[0] ); } ", "/** * Tells if you are running Internet Explorer 10 * @method * @memberof Popper.Utils * @returns {Boolean} isIE10 */ let isIE10 = undefined; export default function() { if (isIE10 === undefined) { isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1; } return isIE10; } ", "import isIE10 from './isIE10'; function getSize(axis, body, html, computedStyle) { return Math.max( body[`offset${axis}`], body[`scroll${axis}`], html[`client${axis}`], html[`offset${axis}`], html[`scroll${axis}`], isIE10() ? html[`offset${axis}`] + computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`] + computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`] : 0 ); } export default function getWindowSizes() { const body = window.document.body; const html = window.document.documentElement; const computedStyle = isIE10() && window.getComputedStyle(html); return { height: getSize('Height', body, html, computedStyle), width: getSize('Width', body, html, computedStyle), }; } ", "/** * Given element offsets, generate an output similar to getBoundingClientRect * @method * @memberof Popper.Utils * @argument {Object} offsets * @returns {Object} ClientRect like output */ export default function getClientRect(offsets) { return { ...offsets, right: offsets.left + offsets.width, bottom: offsets.top + offsets.height, }; } ", "import getStyleComputedProperty from './getStyleComputedProperty'; import getBordersSize from './getBordersSize'; import getWindowSizes from './getWindowSizes'; import getScroll from './getScroll'; import getClientRect from './getClientRect'; import isIE10 from './isIE10'; /** * Get bounding client rect of given element * @method * @memberof Popper.Utils * @param {HTMLElement} element * @return {Object} client rect */ export default function getBoundingClientRect(element) { let rect = {}; // IE10 10 FIX: Please, don't ask, the element isn't // considered in DOM in some circumstances... // This isn't reproducible in IE10 compatibility mode of IE11 if (isIE10()) { try { rect = element.getBoundingClientRect(); const scrollTop = getScroll(element, 'top'); const scrollLeft = getScroll(element, 'left'); rect.top += scrollTop; rect.left += scrollLeft; rect.bottom += scrollTop; rect.right += scrollLeft; } catch (err) {} } else { rect = element.getBoundingClientRect(); } const result = { left: rect.left, top: rect.top, width: rect.right - rect.left, height: rect.bottom - rect.top, }; // subtract scrollbar size from sizes const sizes = element.nodeName === 'HTML' ? getWindowSizes() : {}; const width = sizes.width || element.clientWidth || result.right - result.left; const height = sizes.height || element.clientHeight || result.bottom - result.top; let horizScrollbar = element.offsetWidth - width; let vertScrollbar = element.offsetHeight - height; // if an hypothetical scrollbar is detected, we must be sure it's not a `border` // we make this check conditional for performance reasons if (horizScrollbar || vertScrollbar) { const styles = getStyleComputedProperty(element); horizScrollbar -= getBordersSize(styles, 'x'); vertScrollbar -= getBordersSize(styles, 'y'); result.width -= horizScrollbar; result.height -= vertScrollbar; } return getClientRect(result); } ", "import getStyleComputedProperty from './getStyleComputedProperty'; import includeScroll from './includeScroll'; import getScrollParent from './getScrollParent'; import getBoundingClientRect from './getBoundingClientRect'; import runIsIE10 from './isIE10'; import getClientRect from './getClientRect'; export default function getOffsetRectRelativeToArbitraryNode(children, parent) { const isIE10 = runIsIE10(); const isHTML = parent.nodeName === 'HTML'; const childrenRect = getBoundingClientRect(children); const parentRect = getBoundingClientRect(parent); const scrollParent = getScrollParent(children); const styles = getStyleComputedProperty(parent); const borderTopWidth = +styles.borderTopWidth.split('px')[0]; const borderLeftWidth = +styles.borderLeftWidth.split('px')[0]; let offsets = getClientRect({ top: childrenRect.top - parentRect.top - borderTopWidth, left: childrenRect.left - parentRect.left - borderLeftWidth, width: childrenRect.width, height: childrenRect.height, }); offsets.marginTop = 0; offsets.marginLeft = 0; // Subtract margins of documentElement in case it's being used as parent // we do this only on HTML because it's the only element that behaves // differently when margins are applied to it. The margins are included in // the box of the documentElement, in the other cases not. if (!isIE10 && isHTML) { const marginTop = +styles.marginTop.split('px')[0]; const marginLeft = +styles.marginLeft.split('px')[0]; offsets.top -= borderTopWidth - marginTop; offsets.bottom -= borderTopWidth - marginTop; offsets.left -= borderLeftWidth - marginLeft; offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them offsets.marginTop = marginTop; offsets.marginLeft = marginLeft; } if ( isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY' ) { offsets = includeScroll(offsets, parent); } return offsets; } ", "import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode'; import getScroll from './getScroll'; import getClientRect from './getClientRect'; export default function getViewportOffsetRectRelativeToArtbitraryNode(element) { const html = window.document.documentElement; const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); const width = Math.max(html.clientWidth, window.innerWidth || 0); const height = Math.max(html.clientHeight, window.innerHeight || 0); const scrollTop = getScroll(html); const scrollLeft = getScroll(html, 'left'); const offset = { top: scrollTop - relativeOffset.top + relativeOffset.marginTop, left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, width, height, }; return getClientRect(offset); } ", "import getStyleComputedProperty from './getStyleComputedProperty'; import getParentNode from './getParentNode'; /** * Check if the given element is fixed or is inside a fixed parent * @method * @memberof Popper.Utils * @argument {Element} element * @argument {Element} customContainer * @returns {Boolean} answer to "isFixed?" */ export default function isFixed(element) { const nodeName = element.nodeName; if (nodeName === 'BODY' || nodeName === 'HTML') { return false; } if (getStyleComputedProperty(element, 'position') === 'fixed') { return true; } return isFixed(getParentNode(element)); } ", "import getScrollParent from './getScrollParent'; import getParentNode from './getParentNode'; import findCommonOffsetParent from './findCommonOffsetParent'; import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode'; import getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode'; import getWindowSizes from './getWindowSizes'; import isFixed from './isFixed'; /** * Computed the boundaries limits and return them * @method * @memberof Popper.Utils * @param {HTMLElement} popper * @param {HTMLElement} reference * @param {number} padding * @param {HTMLElement} boundariesElement - Element used to define the boundaries * @returns {Object} Coordinates of the boundaries */ export default function getBoundaries( popper, reference, padding, boundariesElement ) { // NOTE: 1 DOM access here let boundaries = { top: 0, left: 0 }; const offsetParent = findCommonOffsetParent(popper, reference); // Handle viewport case if (boundariesElement === 'viewport') { boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent); } else { // Handle other cases based on DOM element used as boundaries let boundariesNode; if (boundariesElement === 'scrollParent') { boundariesNode = getScrollParent(getParentNode(popper)); if (boundariesNode.nodeName === 'BODY') { boundariesNode = window.document.documentElement; } } else if (boundariesElement === 'window') { boundariesNode = window.document.documentElement; } else { boundariesNode = boundariesElement; } const offsets = getOffsetRectRelativeToArbitraryNode( boundariesNode, offsetParent ); // In case of HTML, we need a different computation if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { const { height, width } = getWindowSizes(); boundaries.top += offsets.top - offsets.marginTop; boundaries.bottom = height + offsets.top; boundaries.left += offsets.left - offsets.marginLeft; boundaries.right = width + offsets.left; } else { // for all the other DOM elements, this one is good boundaries = offsets; } } // Add paddings boundaries.left += padding; boundaries.top += padding; boundaries.right -= padding; boundaries.bottom -= padding; return boundaries; } ", "import getBoundaries from '../utils/getBoundaries'; function getArea({ width, height }) { return width * height; } /** * Utility used to transform the `auto` placement to the placement with more * available space. * @method * @memberof Popper.Utils * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ export default function computeAutoPlacement( placement, refRect, popper, reference, boundariesElement, padding = 0 ) { if (placement.indexOf('auto') === -1) { return placement; } const boundaries = getBoundaries( popper, reference, padding, boundariesElement ); const rects = { top: { width: boundaries.width, height: refRect.top - boundaries.top, }, right: { width: boundaries.right - refRect.right, height: boundaries.height, }, bottom: { width: boundaries.width, height: boundaries.bottom - refRect.bottom, }, left: { width: refRect.left - boundaries.left, height: boundaries.height, }, }; const sortedAreas = Object.keys(rects) .map(key => ({ key, ...rects[key], area: getArea(rects[key]), })) .sort((a, b) => b.area - a.area); const filteredAreas = sortedAreas.filter( ({ width, height }) => width >= popper.clientWidth && height >= popper.clientHeight ); const computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; const variation = placement.split('-')[1]; return computedPlacement + (variation ? `-${variation}` : ''); } ", "import findCommonOffsetParent from './findCommonOffsetParent'; import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode'; /** * Get offsets to the reference element * @method * @memberof Popper.Utils * @param {Object} state * @param {Element} popper - the popper element * @param {Element} reference - the reference element (the popper will be relative to this) * @returns {Object} An object containing the offsets which will be applied to the popper */ export default function getReferenceOffsets(state, popper, reference) { const commonOffsetParent = findCommonOffsetParent(popper, reference); return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent); } ", "/** * Get the outer sizes of the given element (offset size + margins) * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Object} object containing width and height properties */ export default function getOuterSizes(element) { const styles = window.getComputedStyle(element); const x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom); const y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight); const result = { width: element.offsetWidth + y, height: element.offsetHeight + x, }; return result; } ", "/** * Get the opposite placement of the given one * @method * @memberof Popper.Utils * @argument {String} placement * @returns {String} flipped placement */ export default function getOppositePlacement(placement) { const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; return placement.replace(/left|right|bottom|top/g, matched => hash[matched]); } ", "import getOuterSizes from './getOuterSizes'; import getOppositePlacement from './getOppositePlacement'; /** * Get offsets to the popper * @method * @memberof Popper.Utils * @param {Object} position - CSS position the Popper will get applied * @param {HTMLElement} popper - the popper element * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) * @param {String} placement - one of the valid placement options * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper */ export default function getPopperOffsets(popper, referenceOffsets, placement) { placement = placement.split('-')[0]; // Get popper node sizes const popperRect = getOuterSizes(popper); // Add position, width and height to our offsets object const popperOffsets = { width: popperRect.width, height: popperRect.height, }; // depending by the popper placement we have to compute its offsets slightly differently const isHoriz = ['right', 'left'].indexOf(placement) !== -1; const mainSide = isHoriz ? 'top' : 'left'; const secondarySide = isHoriz ? 'left' : 'top'; const measurement = isHoriz ? 'height' : 'width'; const secondaryMeasurement = !isHoriz ? 'height' : 'width'; popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; if (placement === secondarySide) { popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; } else { popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; } return popperOffsets; } ", "/** * Mimics the `find` method of Array * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */ export default function find(arr, check) { // use native find if supported if (Array.prototype.find) { return arr.find(check); } // use `filter` to obtain the same behavior of `find` return arr.filter(check)[0]; } ", "import find from './find'; /** * Return the index of the matching object * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */ export default function findIndex(arr, prop, value) { // use native findIndex if supported if (Array.prototype.findIndex) { return arr.findIndex(cur => cur[prop] === value); } // use `find` + `indexOf` if `findIndex` isn't supported const match = find(arr, obj => obj[prop] === value); return arr.indexOf(match); } ", "import isFunction from './isFunction'; import findIndex from './findIndex'; import getClientRect from '../utils/getClientRect'; /** * Loop trough the list of modifiers and run them in order, * each of them will then edit the data object. * @method * @memberof Popper.Utils * @param {dataObject} data * @param {Array} modifiers * @param {String} ends - Optional modifier name used as stopper * @returns {dataObject} */ export default function runModifiers(modifiers, data, ends) { const modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); modifiersToRun.forEach(modifier => { if (modifier.function) { console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); } const fn = modifier.function || modifier.fn; if (modifier.enabled && isFunction(fn)) { // Add properties to offsets to make them a complete clientRect object // we do this before each modifier to make sure the previous one doesn't // mess with these values data.offsets.popper = getClientRect(data.offsets.popper); data.offsets.reference = getClientRect(data.offsets.reference); data = fn(data, modifier); } }); return data; } ", "import computeAutoPlacement from '../utils/computeAutoPlacement'; import getReferenceOffsets from '../utils/getReferenceOffsets'; import getPopperOffsets from '../utils/getPopperOffsets'; import runModifiers from '../utils/runModifiers'; /** * Updates the position of the popper, computing the new offsets and applying * the new style.<br /> * Prefer `scheduleUpdate` over `update` because of performance reasons. * @method * @memberof Popper */ export default function update() { // if popper is destroyed, don't perform any further update if (this.state.isDestroyed) { return; } let data = { instance: this, styles: {}, arrowStyles: {}, attributes: {}, flipped: false, offsets: {}, }; // compute reference element offsets data.offsets.reference = getReferenceOffsets( this.state, this.popper, this.reference ); // compute auto placement, store placement inside the data object, // modifiers will be able to edit `placement` if needed // and refer to originalPlacement to know the original value data.placement = computeAutoPlacement( this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding ); // store the computed placement inside `originalPlacement` data.originalPlacement = data.placement; // compute the popper offsets data.offsets.popper = getPopperOffsets( this.popper, data.offsets.reference, data.placement ); data.offsets.popper.position = 'absolute'; // run the modifiers data = runModifiers(this.modifiers, data); // the first `update` will call `onCreate` callback // the other ones will call `onUpdate` callback if (!this.state.isCreated) { this.state.isCreated = true; this.options.onCreate(data); } else { this.options.onUpdate(data); } } ", "/** * Helper used to know if the given modifier is enabled. * @method * @memberof Popper.Utils * @returns {Boolean} */ export default function isModifierEnabled(modifiers, modifierName) { return modifiers.some( ({ name, enabled }) => enabled && name === modifierName ); } ", "/** * Get the prefixed supported property name * @method * @memberof Popper.Utils * @argument {String} property (camelCase) * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) */ export default function getSupportedPropertyName(property) { const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; const upperProp = property.charAt(0).toUpperCase() + property.slice(1); for (let i = 0; i < prefixes.length - 1; i++) { const prefix = prefixes[i]; const toCheck = prefix ? `${prefix}${upperProp}` : property; if (typeof window.document.body.style[toCheck] !== 'undefined') { return toCheck; } } return null; } ", "import isModifierEnabled from '../utils/isModifierEnabled'; import getSupportedPropertyName from '../utils/getSupportedPropertyName'; /** * Destroy the popper * @method * @memberof Popper */ export default function destroy() { this.state.isDestroyed = true; // touch DOM only if `applyStyle` modifier is enabled if (isModifierEnabled(this.modifiers, 'applyStyle')) { this.popper.removeAttribute('x-placement'); this.popper.style.left = ''; this.popper.style.position = ''; this.popper.style.top = ''; this.popper.style[getSupportedPropertyName('transform')] = ''; } this.disableEventListeners(); // remove the popper if user explicity asked for the deletion on destroy // do not use `remove` because IE11 doesn't support it if (this.options.removeOnDestroy) { this.popper.parentNode.removeChild(this.popper); } return this; } ", "import getScrollParent from './getScrollParent'; function attachToScrollParents(scrollParent, event, callback, scrollParents) { const isBody = scrollParent.nodeName === 'BODY'; const target = isBody ? window : scrollParent; target.addEventListener(event, callback, { passive: true }); if (!isBody) { attachToScrollParents( getScrollParent(target.parentNode), event, callback, scrollParents ); } scrollParents.push(target); } /** * Setup needed event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */ export default function setupEventListeners( reference, options, state, updateBound ) { // Resize event listener on window state.updateBound = updateBound; window.addEventListener('resize', state.updateBound, { passive: true }); // Scroll event listener on scroll parents const scrollElement = getScrollParent(reference); attachToScrollParents( scrollElement, 'scroll', state.updateBound, state.scrollParents ); state.scrollElement = scrollElement; state.eventsEnabled = true; return state; } ", "import setupEventListeners from '../utils/setupEventListeners'; /** * It will add resize/scroll events and start recalculating * position of the popper element when they are triggered. * @method * @memberof Popper */ export default function enableEventListeners() { if (!this.state.eventsEnabled) { this.state = setupEventListeners( this.reference, this.options, this.state, this.scheduleUpdate ); } } ", "/** * Remove event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */ export default function removeEventListeners(reference, state) { // Remove resize event listener on window window.removeEventListener('resize', state.updateBound); // Remove scroll event listener on scroll parents state.scrollParents.forEach(target => { target.removeEventListener('scroll', state.updateBound); }); // Reset state state.updateBound = null; state.scrollParents = []; state.scrollElement = null; state.eventsEnabled = false; return state; } ", "import removeEventListeners from '../utils/removeEventListeners'; /** * It will remove resize/scroll events and won't recalculate popper position * when they are triggered. It also won't trigger onUpdate callback anymore, * unless you call `update` method manually. * @method * @memberof Popper */ export default function disableEventListeners() { if (this.state.eventsEnabled) { window.cancelAnimationFrame(this.scheduleUpdate); this.state = removeEventListeners(this.reference, this.state); } } ", "/** * Tells if a given input is a number * @method * @memberof Popper.Utils * @param {*} input to check * @return {Boolean} */ export default function isNumeric(n) { return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); } ", "import isNumeric from './isNumeric'; /** * Set the style to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the style to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */ export default function setStyles(element, styles) { Object.keys(styles).forEach(prop => { let unit = ''; // add unit if the value is numeric and is one of the following if ( ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop]) ) { unit = 'px'; } element.style[prop] = styles[prop] + unit; }); } ", "/** * Set the attributes to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the attributes to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */ export default function setAttributes(element, attributes) { Object.keys(attributes).forEach(function(prop) { const value = attributes[prop]; if (value !== false) { element.setAttribute(prop, attributes[prop]); } else { element.removeAttribute(prop); } }); } ", "import setStyles from '../utils/setStyles'; import setAttributes from '../utils/setAttributes'; import getReferenceOffsets from '../utils/getReferenceOffsets'; import computeAutoPlacement from '../utils/computeAutoPlacement'; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} data.styles - List of style properties - values to apply to popper element * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element * @argument {Object} options - Modifiers configuration and options * @returns {Object} The same data object */ export default function applyStyle(data) { // any property present in `data.styles` will be applied to the popper, // in this way we can make the 3rd party modifiers add custom styles to it // Be aware, modifiers could override the properties defined in the previous // lines of this modifier! setStyles(data.instance.popper, data.styles); // any property present in `data.attributes` will be applied to the popper, // they will be set as HTML attributes of the element setAttributes(data.instance.popper, data.attributes); // if arrowElement is defined and arrowStyles has some properties if (data.arrowElement && Object.keys(data.arrowStyles).length) { setStyles(data.arrowElement, data.arrowStyles); } return data; } /** * Set the x-placement attribute before everything else because it could be used * to add margins to the popper margins needs to be calculated to get the * correct popper offsets. * @method * @memberof Popper.modifiers * @param {HTMLElement} reference - The reference element used to position the popper * @param {HTMLElement} popper - The HTML element used as popper. * @param {Object} options - Popper.js options */ export function applyStyleOnLoad( reference, popper, options, modifierOptions, state ) { // compute reference element offsets const referenceOffsets = getReferenceOffsets(state, popper, reference); // compute auto placement, store placement inside the data object, // modifiers will be able to edit `placement` if needed // and refer to originalPlacement to know the original value const placement = computeAutoPlacement( options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding ); popper.setAttribute('x-placement', placement); // Apply `position` to popper before anything else because // without the position applied we can't guarantee correct computations setStyles(popper, { position: 'absolute' }); return options; } ", "import getSupportedPropertyName from '../utils/getSupportedPropertyName'; import find from '../utils/find'; import getOffsetParent from '../utils/getOffsetParent'; import getBoundingClientRect from '../utils/getBoundingClientRect'; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ export default function computeStyle(data, options) { const { x, y } = options; const { popper } = data.offsets; // Remove this legacy support in Popper.js v2 const legacyGpuAccelerationOption = find( data.instance.modifiers, modifier => modifier.name === 'applyStyle' ).gpuAcceleration; if (legacyGpuAccelerationOption !== undefined) { console.warn( 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!' ); } const gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; const offsetParent = getOffsetParent(data.instance.popper); const offsetParentRect = getBoundingClientRect(offsetParent); // Styles const styles = { position: popper.position, }; // floor sides to avoid blurry text const offsets = { left: Math.floor(popper.left), top: Math.floor(popper.top), bottom: Math.floor(popper.bottom), right: Math.floor(popper.right), }; const sideA = x === 'bottom' ? 'top' : 'bottom'; const sideB = y === 'right' ? 'left' : 'right'; // if gpuAcceleration is set to `true` and transform is supported, // we use `translate3d` to apply the position to the popper we // automatically use the supported prefixed version if needed const prefixedProperty = getSupportedPropertyName('transform'); // now, let's make a step back and look at this code closely (wtf?) // If the content of the popper grows once it's been positioned, it // may happen that the popper gets misplaced because of the new content // overflowing its reference element // To avoid this problem, we provide two options (x and y), which allow // the consumer to define the offset origin. // If we position a popper on top of a reference element, we can set // `x` to `top` to make the popper grow towards its top instead of // its bottom. let left, top; if (sideA === 'bottom') { top = -offsetParentRect.height + offsets.bottom; } else { top = offsets.top; } if (sideB === 'right') { left = -offsetParentRect.width + offsets.right; } else { left = offsets.left; } if (gpuAcceleration && prefixedProperty) { styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`; styles[sideA] = 0; styles[sideB] = 0; styles.willChange = 'transform'; } else { // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties const invertTop = sideA === 'bottom' ? -1 : 1; const invertLeft = sideB === 'right' ? -1 : 1; styles[sideA] = top * invertTop; styles[sideB] = left * invertLeft; styles.willChange = `${sideA}, ${sideB}`; } // Attributes const attributes = { 'x-placement': data.placement, }; // Update `data` attributes, styles and arrowStyles data.attributes = { ...attributes, ...data.attributes }; data.styles = { ...styles, ...data.styles }; data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles }; return data; } ", "import find from './find'; /** * Helper used to know if the given modifier depends from another one.<br /> * It checks if the needed modifier is listed and enabled. * @method * @memberof Popper.Utils * @param {Array} modifiers - list of modifiers * @param {String} requestingName - name of requesting modifier * @param {String} requestedName - name of requested modifier * @returns {Boolean} */ export default function isModifierRequired( modifiers, requestingName, requestedName ) { const requesting = find(modifiers, ({ name }) => name === requestingName); const isRequired = !!requesting && modifiers.some(modifier => { return ( modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order ); }); if (!isRequired) { const requesting = `\`${requestingName}\``; const requested = `\`${requestedName}\``; console.warn( `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!` ); } return isRequired; } ", "import getClientRect from '../utils/getClientRect'; import getOuterSizes from '../utils/getOuterSizes'; import isModifierRequired from '../utils/isModifierRequired'; import getStyleComputedProperty from '../utils/getStyleComputedProperty'; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ export default function arrow(data, options) { // arrow depends on keepTogether in order to work if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { return data; } let arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector if (typeof arrowElement === 'string') { arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier if (!arrowElement) { return data; } } else { // if the arrowElement isn't a query selector we must check that the // provided DOM node is child of its popper node if (!data.instance.popper.contains(arrowElement)) { console.warn( 'WARNING: `arrow.element` must be child of its popper element!' ); return data; } } const placement = data.placement.split('-')[0]; const { popper, reference } = data.offsets; const isVertical = ['left', 'right'].indexOf(placement) !== -1; const len = isVertical ? 'height' : 'width'; const sideCapitalized = isVertical ? 'Top' : 'Left'; const side = sideCapitalized.toLowerCase(); const altSide = isVertical ? 'left' : 'top'; const opSide = isVertical ? 'bottom' : 'right'; const arrowElementSize = getOuterSizes(arrowElement)[len]; // // extends keepTogether behavior making sure the popper and its // reference have enough pixels in conjuction // // top/left side if (reference[opSide] - arrowElementSize < popper[side]) { data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); } // bottom/right side if (reference[side] + arrowElementSize > popper[opSide]) { data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; } // compute center of the popper const center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets // take popper margin in account because we don't have this info available const popperMarginSide = getStyleComputedProperty( data.instance.popper, `margin${sideCapitalized}` ).replace('px', ''); let sideValue = center - getClientRect(data.offsets.popper)[side] - popperMarginSide; // prevent arrowElement from being placed not contiguously to its popper sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); data.arrowElement = arrowElement; data.offsets.arrow = {}; data.offsets.arrow[side] = Math.round(sideValue); data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node return data; } ", "/** * Get the opposite placement variation of the given one * @method * @memberof Popper.Utils * @argument {String} placement variation * @returns {String} flipped placement variation */ export default function getOppositeVariation(variation) { if (variation === 'end') { return 'start'; } else if (variation === 'start') { return 'end'; } return variation; } ", "/** * List of accepted placements to use as values of the `placement` option.<br /> * Valid placements are: * - `auto` * - `top` * - `right` * - `bottom` * - `left` * * Each placement can have a variation from this list: * - `-start` * - `-end` * * Variations are interpreted easily if you think of them as the left to right * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` * is right.<br /> * Vertically (`left` and `right`), `start` is top and `end` is bottom. * * Some valid examples are: * - `top-end` (on top of reference, right aligned) * - `right-start` (on right of reference, top aligned) * - `bottom` (on bottom, centered) * - `auto-right` (on the side with more space available, alignment depends by placement) * * @static * @type {Array} * @enum {String} * @readonly * @method placements * @memberof Popper */ export default [ 'auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start', ]; ", "import placements from '../methods/placements'; // Get rid of `auto` `auto-start` and `auto-end` const validPlacements = placements.slice(3); /** * Given an initial placement, returns all the subsequent placements * clockwise (or counter-clockwise). * * @method * @memberof Popper.Utils * @argument {String} placement - A valid placement (it accepts variations) * @argument {Boolean} counter - Set to true to walk the placements counterclockwise * @returns {Array} placements including their variations */ export default function clockwise(placement, counter = false) { const index = validPlacements.indexOf(placement); const arr = validPlacements .slice(index + 1) .concat(validPlacements.slice(0, index)); return counter ? arr.reverse() : arr; } ", "import getOppositePlacement from '../utils/getOppositePlacement'; import getOppositeVariation from '../utils/getOppositeVariation'; import getPopperOffsets from '../utils/getPopperOffsets'; import runModifiers from '../utils/runModifiers'; import getBoundaries from '../utils/getBoundaries'; import isModifierEnabled from '../utils/isModifierEnabled'; import clockwise from '../utils/clockwise'; const BEHAVIORS = { FLIP: 'flip', CLOCKWISE: 'clockwise', COUNTERCLOCKWISE: 'counterclockwise', }; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ export default function flip(data, options) { // if `inner` modifier is enabled, we can't use the `flip` modifier if (isModifierEnabled(data.instance.modifiers, 'inner')) { return data; } if (data.flipped && data.placement === data.originalPlacement) { // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides return data; } const boundaries = getBoundaries( data.instance.popper, data.instance.reference, options.padding, options.boundariesElement ); let placement = data.placement.split('-')[0]; let placementOpposite = getOppositePlacement(placement); let variation = data.placement.split('-')[1] || ''; let flipOrder = []; switch (options.behavior) { case BEHAVIORS.FLIP: flipOrder = [placement, placementOpposite]; break; case BEHAVIORS.CLOCKWISE: flipOrder = clockwise(placement); break; case BEHAVIORS.COUNTERCLOCKWISE: flipOrder = clockwise(placement, true); break; default: flipOrder = options.behavior; } flipOrder.forEach((step, index) => { if (placement !== step || flipOrder.length === index + 1) { return data; } placement = data.placement.split('-')[0]; placementOpposite = getOppositePlacement(placement); const popperOffsets = data.offsets.popper; const refOffsets = data.offsets.reference; // using floor because the reference offsets may contain decimals we are not going to consider here const floor = Math.floor; const overlapsRef = (placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left)) || (placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right)) || (placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top)) || (placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom)); const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); const overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); const overflowsBoundaries = (placement === 'left' && overflowsLeft) || (placement === 'right' && overflowsRight) || (placement === 'top' && overflowsTop) || (placement === 'bottom' && overflowsBottom); // flip the variation if required const isVertical = ['top', 'bottom'].indexOf(placement) !== -1; const flippedVariation = !!options.flipVariations && ((isVertical && variation === 'start' && overflowsLeft) || (isVertical && variation === 'end' && overflowsRight) || (!isVertical && variation === 'start' && overflowsTop) || (!isVertical && variation === 'end' && overflowsBottom)); if (overlapsRef || overflowsBoundaries || flippedVariation) { // this boolean to detect any flip loop data.flipped = true; if (overlapsRef || overflowsBoundaries) { placement = flipOrder[index + 1]; } if (flippedVariation) { variation = getOppositeVariation(variation); } data.placement = placement + (variation ? '-' + variation : ''); // this object contains `position`, we want to preserve it along with // any additional property we may add in the future data.offsets.popper = { ...data.offsets.popper, ...getPopperOffsets( data.instance.popper, data.offsets.reference, data.placement ), }; data = runModifiers(data.instance.modifiers, data, 'flip'); } }); return data; } ", "/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ export default function keepTogether(data) { const { popper, reference } = data.offsets; const placement = data.placement.split('-')[0]; const floor = Math.floor; const isVertical = ['top', 'bottom'].indexOf(placement) !== -1; const side = isVertical ? 'right' : 'bottom'; const opSide = isVertical ? 'left' : 'top'; const measurement = isVertical ? 'width' : 'height'; if (popper[side] < floor(reference[opSide])) { data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; } if (popper[opSide] > floor(reference[side])) { data.offsets.popper[opSide] = floor(reference[side]); } return data; } ", "import isNumeric from '../utils/isNumeric'; import getClientRect from '../utils/getClientRect'; import find from '../utils/find'; /** * Converts a string containing value + unit into a px value number * @function * @memberof {modifiers~offset} * @private * @argument {String} str - Value + unit string * @argument {String} measurement - `height` or `width` * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @returns {Number|String} * Value in pixels, or original string if no values were extracted */ export function toValue(str, measurement, popperOffsets, referenceOffsets) { // separate value from unit const split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); const value = +split[1]; const unit = split[2]; // If it's not a number it's an operator, I guess if (!value) { return str; } if (unit.indexOf('%') === 0) { let element; switch (unit) { case '%p': element = popperOffsets; break; case '%': case '%r': default: element = referenceOffsets; } const rect = getClientRect(element); return rect[measurement] / 100 * value; } else if (unit === 'vh' || unit === 'vw') { // if is a vh or vw, we calculate the size based on the viewport let size; if (unit === 'vh') { size = Math.max( document.documentElement.clientHeight, window.innerHeight || 0 ); } else { size = Math.max( document.documentElement.clientWidth, window.innerWidth || 0 ); } return size / 100 * value; } else { // if is an explicit pixel unit, we get rid of the unit and keep the value // if is an implicit unit, it's px, and we return just the value return value; } } /** * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. * @function * @memberof {modifiers~offset} * @private * @argument {String} offset * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @argument {String} basePlacement * @returns {Array} a two cells array with x and y offsets in numbers */ export function parseOffset( offset, popperOffsets, referenceOffsets, basePlacement ) { const offsets = [0, 0]; // Use height if placement is left or right and index is 0 otherwise use width // in this way the first offset will use an axis and the second one // will use the other one const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; // Split the offset string to obtain a list of values and operands // The regex addresses values with the plus or minus sign in front (+10, -20, etc) const fragments = offset.split(/(\+|\-)/).map(frag => frag.trim()); // Detect if the offset string contains a pair of values or a single one // they could be separated by comma or space const divider = fragments.indexOf( find(fragments, frag => frag.search(/,|\s/) !== -1) ); if (fragments[divider] && fragments[divider].indexOf(',') === -1) { console.warn( 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.' ); } // If divider is found, we divide the list of values and operands to divide // them by ofset X and Y. const splitRegex = /\s*,\s*|\s+/; let ops = divider !== -1 ? [ fragments .slice(0, divider) .concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat( fragments.slice(divider + 1) ), ] : [fragments]; // Convert the values with units to absolute pixels to allow our computations ops = ops.map((op, index) => { // Most of the units rely on the orientation of the popper const measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; let mergeWithPrevious = false; return ( op // This aggregates any `+` or `-` sign that aren't considered operators // e.g.: 10 + +5 => [10, +, +5] .reduce((a, b) => { if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { a[a.length - 1] = b; mergeWithPrevious = true; return a; } else if (mergeWithPrevious) { a[a.length - 1] += b; mergeWithPrevious = false; return a; } else { return a.concat(b); } }, []) // Here we convert the string values into number values (in px) .map(str => toValue(str, measurement, popperOffsets, referenceOffsets)) ); }); // Loop trough the offsets arrays and execute the operations ops.forEach((op, index) => { op.forEach((frag, index2) => { if (isNumeric(frag)) { offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); } }); }); return offsets; } /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @argument {Number|String} options.offset=0 * The offset value as described in the modifier description * @returns {Object} The data object, properly modified */ export default function offset(data, { offset }) { const { placement, offsets: { popper, reference } } = data; const basePlacement = placement.split('-')[0]; let offsets; if (isNumeric(+offset)) { offsets = [+offset, 0]; } else { offsets = parseOffset(offset, popper, reference, basePlacement); } if (basePlacement === 'left') { popper.top += offsets[0]; popper.left -= offsets[1]; } else if (basePlacement === 'right') { popper.top += offsets[0]; popper.left += offsets[1]; } else if (basePlacement === 'top') { popper.left += offsets[0]; popper.top -= offsets[1]; } else if (basePlacement === 'bottom') { popper.left += offsets[0]; popper.top += offsets[1]; } data.popper = popper; return data; } ", "import getOffsetParent from '../utils/getOffsetParent'; import getBoundaries from '../utils/getBoundaries'; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ export default function preventOverflow(data, options) { let boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // If offsetParent is the reference element, we really want to // go one step up and use the next offsetParent as reference to // avoid to make this modifier completely useless and look like broken if (data.instance.reference === boundariesElement) { boundariesElement = getOffsetParent(boundariesElement); } const boundaries = getBoundaries( data.instance.popper, data.instance.reference, options.padding, boundariesElement ); options.boundaries = boundaries; const order = options.priority; let popper = data.offsets.popper; const check = { primary(placement) { let value = popper[placement]; if ( popper[placement] < boundaries[placement] && !options.escapeWithReference ) { value = Math.max(popper[placement], boundaries[placement]); } return { [placement]: value }; }, secondary(placement) { const mainSide = placement === 'right' ? 'left' : 'top'; let value = popper[mainSide]; if ( popper[placement] > boundaries[placement] && !options.escapeWithReference ) { value = Math.min( popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height) ); } return { [mainSide]: value }; }, }; order.forEach(placement => { const side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; popper = { ...popper, ...check[side](placement) }; }); data.offsets.popper = popper; return data; } ", "/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ export default function shift(data) { const placement = data.placement; const basePlacement = placement.split('-')[0]; const shiftvariation = placement.split('-')[1]; // if shift shiftvariation is specified, run the modifier if (shiftvariation) { const { reference, popper } = data.offsets; const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; const side = isVertical ? 'left' : 'top'; const measurement = isVertical ? 'width' : 'height'; const shiftOffsets = { start: { [side]: reference[side] }, end: { [side]: reference[side] + reference[measurement] - popper[measurement], }, }; data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] }; } return data; } ", "import isModifierRequired from '../utils/isModifierRequired'; import find from '../utils/find'; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ export default function hide(data) { if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { return data; } const refRect = data.offsets.reference; const bound = find( data.instance.modifiers, modifier => modifier.name === 'preventOverflow' ).boundaries; if ( refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left ) { // Avoid unnecessary DOM access if visibility hasn't changed if (data.hide === true) { return data; } data.hide = true; data.attributes['x-out-of-boundaries'] = ''; } else { // Avoid unnecessary DOM access if visibility hasn't changed if (data.hide === false) { return data; } data.hide = false; data.attributes['x-out-of-boundaries'] = false; } return data; } ", "import getClientRect from '../utils/getClientRect'; import getOppositePlacement from '../utils/getOppositePlacement'; /** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ export default function inner(data) { const placement = data.placement; const basePlacement = placement.split('-')[0]; const { popper, reference } = data.offsets; const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); data.placement = getOppositePlacement(placement); data.offsets.popper = getClientRect(popper); return data; } ", "import applyStyle, { applyStyleOnLoad } from './applyStyle'; import computeStyle from './computeStyle'; import arrow from './arrow'; import flip from './flip'; import keepTogether from './keepTogether'; import offset from './offset'; import preventOverflow from './preventOverflow'; import shift from './shift'; import hide from './hide'; import inner from './inner'; /** * Modifier function, each modifier can have a function of this type assigned * to its `fn` property.<br /> * These functions will be called on each update, this means that you must * make sure they are performant enough to avoid performance bottlenecks. * * @function ModifierFn * @argument {dataObject} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {dataObject} The data object, properly modified */ /** * Modifiers are plugins used to alter the behavior of your poppers.<br /> * Popper.js uses a set of 9 modifiers to provide all the basic functionalities * needed by the library. * * Usually you don't want to override the `order`, `fn` and `onLoad` props. * All the other properties are configurations that could be tweaked. * @namespace modifiers */ export default { /** * Modifier used to shift the popper on the start or end of its reference * element.<br /> * It will read the variation of the `placement` property.<br /> * It can be one either `-end` or `-start`. * @memberof modifiers * @inner */ shift: { /** @prop {number} order=100 - Index used to define the order of execution */ order: 100, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: shift, }, /** * The `offset` modifier can shift your popper on both its axis. * * It accepts the following units: * - `px` or unitless, interpreted as pixels * - `%` or `%r`, percentage relative to the length of the reference element * - `%p`, percentage relative to the length of the popper element * - `vw`, CSS viewport width unit * - `vh`, CSS viewport height unit * * For length is intended the main axis relative to the placement of the popper.<br /> * This means that if the placement is `top` or `bottom`, the length will be the * `width`. In case of `left` or `right`, it will be the height. * * You can provide a single value (as `Number` or `String`), or a pair of values * as `String` divided by a comma or one (or more) white spaces.<br /> * The latter is a deprecated method because it leads to confusion and will be * removed in v2.<br /> * Additionally, it accepts additions and subtractions between different units. * Note that multiplications and divisions aren't supported. * * Valid examples are: * ``` * 10 * '10%' * '10, 10' * '10%, 10' * '10 + 10%' * '10 - 5vh + 3%' * '-10px + 5vh, 5px - 6%' * ``` * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap * > with their reference element, unfortunately, you will have to disable the `flip` modifier. * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373) * * @memberof modifiers * @inner */ offset: { /** @prop {number} order=200 - Index used to define the order of execution */ order: 200, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: offset, /** @prop {Number|String} offset=0 * The offset value as described in the modifier description */ offset: 0, }, /** * Modifier used to prevent the popper from being positioned outside the boundary. * * An scenario exists where the reference itself is not within the boundaries.<br /> * We can say it has "escaped the boundaries" — or just "escaped".<br /> * In this case we need to decide whether the popper should either: * * - detach from the reference and remain "trapped" in the boundaries, or * - if it should ignore the boundary and "escape with its reference" * * When `escapeWithReference` is set to`true` and reference is completely * outside its boundaries, the popper will overflow (or completely leave) * the boundaries in order to remain attached to the edge of the reference. * * @memberof modifiers * @inner */ preventOverflow: { /** @prop {number} order=300 - Index used to define the order of execution */ order: 300, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: preventOverflow, /** * @prop {Array} [priority=['left','right','top','bottom']] * Popper will try to prevent overflow following these priorities by default, * then, it could overflow on the left and on top of the `boundariesElement` */ priority: ['left', 'right', 'top', 'bottom'], /** * @prop {number} padding=5 * Amount of pixel used to define a minimum distance between the boundaries * and the popper this makes sure the popper has always a little padding * between the edges of its container */ padding: 5, /** * @prop {String|HTMLElement} boundariesElement='scrollParent' * Boundaries used by the modifier, can be `scrollParent`, `window`, * `viewport` or any DOM element. */ boundariesElement: 'scrollParent', }, /** * Modifier used to make sure the reference and its popper stay near eachothers * without leaving any gap between the two. Expecially useful when the arrow is * enabled and you want to assure it to point to its reference element. * It cares only about the first axis, you can still have poppers with margin * between the popper and its reference element. * @memberof modifiers * @inner */ keepTogether: { /** @prop {number} order=400 - Index used to define the order of execution */ order: 400, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: keepTogether, }, /** * This modifier is used to move the `arrowElement` of the popper to make * sure it is positioned between the reference element and its popper element. * It will read the outer size of the `arrowElement` node to detect how many * pixels of conjuction are needed. * * It has no effect if no `arrowElement` is provided. * @memberof modifiers * @inner */ arrow: { /** @prop {number} order=500 - Index used to define the order of execution */ order: 500, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: arrow, /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ element: '[x-arrow]', }, /** * Modifier used to flip the popper's placement when it starts to overlap its * reference element. * * Requires the `preventOverflow` modifier before it in order to work. * * **NOTE:** this modifier will interrupt the current update cycle and will * restart it if it detects the need to flip the placement. * @memberof modifiers * @inner */ flip: { /** @prop {number} order=600 - Index used to define the order of execution */ order: 600, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: flip, /** * @prop {String|Array} behavior='flip' * The behavior used to change the popper's placement. It can be one of * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid * placements (with optional variations). */ behavior: 'flip', /** * @prop {number} padding=5 * The popper will flip if it hits the edges of the `boundariesElement` */ padding: 5, /** * @prop {String|HTMLElement} boundariesElement='viewport' * The element which will define the boundaries of the popper position, * the popper will never be placed outside of the defined boundaries * (except if keepTogether is enabled) */ boundariesElement: 'viewport', }, /** * Modifier used to make the popper flow toward the inner of the reference element. * By default, when this modifier is disabled, the popper will be placed outside * the reference element. * @memberof modifiers * @inner */ inner: { /** @prop {number} order=700 - Index used to define the order of execution */ order: 700, /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ enabled: false, /** @prop {ModifierFn} */ fn: inner, }, /** * Modifier used to hide the popper when its reference element is outside of the * popper boundaries. It will set a `x-out-of-boundaries` attribute which can * be used to hide with a CSS selector the popper when its reference is * out of boundaries. * * Requires the `preventOverflow` modifier before it in order to work. * @memberof modifiers * @inner */ hide: { /** @prop {number} order=800 - Index used to define the order of execution */ order: 800, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: hide, }, /** * Computes the style that will be applied to the popper element to gets * properly positioned. * * Note that this modifier will not touch the DOM, it just prepares the styles * so that `applyStyle` modifier can apply it. This separation is useful * in case you need to replace `applyStyle` with a custom implementation. * * This modifier has `850` as `order` value to maintain backward compatibility * with previous versions of Popper.js. Expect the modifiers ordering method * to change in future major versions of the library. * * @memberof modifiers * @inner */ computeStyle: { /** @prop {number} order=850 - Index used to define the order of execution */ order: 850, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: computeStyle, /** * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3d transformation to position the popper. * Otherwise, it will use the `top` and `left` properties. */ gpuAcceleration: true, /** * @prop {string} [x='bottom'] * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. * Change this if your popper should grow in a direction different from `bottom` */ x: 'bottom', /** * @prop {string} [x='left'] * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. * Change this if your popper should grow in a direction different from `right` */ y: 'right', }, /** * Applies the computed styles to the popper element. * * All the DOM manipulations are limited to this modifier. This is useful in case * you want to integrate Popper.js inside a framework or view library and you * want to delegate all the DOM manipulations to it. * * Note that if you disable this modifier, you must make sure the popper element * has its position set to `absolute` before Popper.js can do its work! * * Just disable this modifier and define you own to achieve the desired effect. * * @memberof modifiers * @inner */ applyStyle: { /** @prop {number} order=900 - Index used to define the order of execution */ order: 900, /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ enabled: true, /** @prop {ModifierFn} */ fn: applyStyle, /** @prop {Function} */ onLoad: applyStyleOnLoad, /** * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3d transformation to position the popper. * Otherwise, it will use the `top` and `left` properties. */ gpuAcceleration: undefined, }, }; /** * The `dataObject` is an object containing all the informations used by Popper.js * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks. * @name dataObject * @property {Object} data.instance The Popper.js instance * @property {String} data.placement Placement applied to popper * @property {String} data.originalPlacement Placement originally defined on init * @property {Boolean} data.flipped True if popper has been flipped by flip modifier * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper. * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`) * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`) * @property {Object} data.boundaries Offsets of the popper boundaries * @property {Object} data.offsets The measurements of popper, reference and arrow elements. * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 */ ", "import modifiers from '../modifiers/index'; /** * Default options provided to Popper.js constructor.<br /> * These can be overriden using the `options` argument of Popper.js.<br /> * To override an option, simply pass as 3rd argument an object with the same * structure of this object, example: * ``` * new Popper(ref, pop, { * modifiers: { * preventOverflow: { enabled: false } * } * }) * ``` * @type {Object} * @static * @memberof Popper */ export default { /** * Popper's placement * @prop {Popper.placements} placement='bottom' */ placement: 'bottom', /** * Whether events (resize, scroll) are initially enabled * @prop {Boolean} eventsEnabled=true */ eventsEnabled: true, /** * Set to true if you want to automatically remove the popper when * you call the `destroy` method. * @prop {Boolean} removeOnDestroy=false */ removeOnDestroy: false, /** * Callback called when the popper is created.<br /> * By default, is set to no-op.<br /> * Access Popper.js instance with `data.instance`. * @prop {onCreate} */ onCreate: () => {}, /** * Callback called when the popper is updated, this callback is not called * on the initialization/creation of the popper, but only on subsequent * updates.<br /> * By default, is set to no-op.<br /> * Access Popper.js instance with `data.instance`. * @prop {onUpdate} */ onUpdate: () => {}, /** * List of modifiers used to modify the offsets before they are applied to the popper. * They provide most of the functionalities of Popper.js * @prop {modifiers} */ modifiers, }; /** * @callback onCreate * @param {dataObject} data */ /** * @callback onUpdate * @param {dataObject} data */ ", "// Utils import debounce from './utils/debounce'; import isFunction from './utils/isFunction'; // Methods import update from './methods/update'; import destroy from './methods/destroy'; import enableEventListeners from './methods/enableEventListeners'; import disableEventListeners from './methods/disableEventListeners'; import Defaults from './methods/defaults'; import placements from './methods/placements'; export default class Popper { /** * Create a new Popper.js instance * @class Popper * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper * @param {HTMLElement} popper - The HTML element used as popper. * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) * @return {Object} instance - The generated Popper.js instance */ constructor(reference, popper, options = {}) { // make update() debounced, so that it only runs at most once-per-tick this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it this.options = { ...Popper.Defaults, ...options }; // init state this.state = { isDestroyed: false, isCreated: false, scrollParents: [], }; // get reference and popper elements (allow jQuery wrappers) this.reference = reference.jquery ? reference[0] : reference; this.popper = popper.jquery ? popper[0] : popper; // Deep merge modifiers options this.options.modifiers = {}; Object.keys({ ...Popper.Defaults.modifiers, ...options.modifiers, }).forEach(name => { this.options.modifiers[name] = { // If it's a built-in modifier, use it as base ...(Popper.Defaults.modifiers[name] || {}), // If there are custom options, override and merge with default ones ...(options.modifiers ? options.modifiers[name] : {}), }; }); // Refactoring modifiers' list (Object => Array) this.modifiers = Object.keys(this.options.modifiers) .map(name => ({ name, ...this.options.modifiers[name], })) // sort the modifiers by order .sort((a, b) => a.order - b.order); // modifiers have the ability to execute arbitrary code when Popper.js get inited // such code is executed in the same order of its modifier // they could add new properties to their options configuration // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! this.modifiers.forEach(modifierOptions => { if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { modifierOptions.onLoad( this.reference, this.popper, this.options, modifierOptions, this.state ); } }); // fire the first update to position the popper in the right place this.update(); const eventsEnabled = this.options.eventsEnabled; if (eventsEnabled) { // setup event listeners, they will take care of update the position in specific situations this.enableEventListeners(); } this.state.eventsEnabled = eventsEnabled; } // We can't use class properties because they don't get listed in the // class prototype and break stuff like Sinon stubs update() { return update.call(this); } destroy() { return destroy.call(this); } enableEventListeners() { return enableEventListeners.call(this); } disableEventListeners() { return disableEventListeners.call(this); } /** * Schedule an update, it will run on the next UI update available * @method scheduleUpdate * @memberof Popper */ scheduleUpdate = () => requestAnimationFrame(this.update); /** * Collection of utilities useful when writing custom modifiers. * Starting from version 1.7, this method is available only if you * include `popper-utils.js` before `popper.js`. * * **DEPRECATION**: This way to access PopperUtils is deprecated * and will be removed in v2! Use the PopperUtils module directly instead. * Due to the high instability of the methods contained in Utils, we can't * guarantee them to follow semver. Use them at your own risk! * @static * @private * @type {Object} * @deprecated since version 1.8 * @member Utils * @memberof Popper */ static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; static placements = placements; static Defaults = Defaults; } /** * The `referenceObject` is an object that provides an interface compatible with Popper.js * and lets you use it as replacement of a real DOM node.<br /> * You can use this method to position a popper relatively to a set of coordinates * in case you don't have a DOM node to use as reference. * * ``` * new Popper(referenceObject, popperNode); * ``` * * NB: This feature isn't supported in Internet Explorer 10 * @name referenceObject * @property {Function} data.getBoundingClientRect * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. * @property {number} data.clientWidth * An ES6 getter that will return the width of the virtual reference element. * @property {number} data.clientHeight * An ES6 getter that will return the height of the virtual reference element. */ ", ], names: [ "nativeHints", "some", "fn", "toString", "indexOf", "isBrowser", "window", "longerTimeoutBrowsers", "timeoutDuration", "i", "length", "navigator", "userAgent", "microtaskDebounce", "scheduled", "elem", "document", "createElement", "observer", "MutationObserver", "observe", "attributes", "setAttribute", "taskDebounce", "supportsNativeMutationObserver", "isNative", "isFunction", "functionToCheck", "getType", "call", "getStyleComputedProperty", "element", "nodeType", "css", "getComputedStyle", "property", "getParentNode", "nodeName", "parentNode", "host", "getScrollParent", "body", "overflow", "overflowX", "overflowY", "test", "getOffsetParent", "offsetParent", "documentElement", "isOffsetContainer", "firstElementChild", "getRoot", "node", "findCommonOffsetParent", "element1", "element2", "order", "compareDocumentPosition", "Node", "DOCUMENT_POSITION_FOLLOWING", "start", "end", "range", "createRange", "setStart", "setEnd", "commonAncestorContainer", "contains", "element1root", "getScroll", "side", "upperSide", "html", "scrollingElement", "includeScroll", "subtract", "scrollTop", "scrollLeft", "modifier", "top", "bottom", "left", "right", "getBordersSize", "sideA", "axis", "sideB", "styles", "split", "isIE10", "appVersion", "getSize", "Math", "max", "computedStyle", "getWindowSizes", "getClientRect", "offsets", "width", "height", "getBoundingClientRect", "rect", "result", "sizes", "clientWidth", "clientHeight", "horizScrollbar", "offsetWidth", "vertScrollbar", "offsetHeight", "getOffsetRectRelativeToArbitraryNode", "runIsIE10", "isHTML", "parent", "childrenRect", "parentRect", "scrollParent", "borderTopWidth", "borderLeftWidth", "marginTop", "marginLeft", "getViewportOffsetRectRelativeToArtbitraryNode", "relativeOffset", "innerWidth", "innerHeight", "offset", "isFixed", "getBoundaries", "boundaries", "boundariesElement", "boundariesNode", "getArea", "computeAutoPlacement", "padding", "placement", "rects", "refRect", "sortedAreas", "Object", "keys", "map", "sort", "b", "area", "a", "filteredAreas", "filter", "popper", "computedPlacement", "key", "variation", "getReferenceOffsets", "commonOffsetParent", "getOuterSizes", "x", "parseFloat", "marginBottom", "y", "marginRight", "getOppositePlacement", "hash", "replace", "getPopperOffsets", "popperRect", "popperOffsets", "isHoriz", "mainSide", "secondarySide", "measurement", "secondaryMeasurement", "referenceOffsets", "find", "Array", "prototype", "arr", "findIndex", "cur", "match", "obj", "runModifiers", "modifiersToRun", "ends", "modifiers", "slice", "forEach", "function", "warn", "enabled", "data", "reference", "update", "state", "isDestroyed", "options", "flip", "originalPlacement", "position", "isCreated", "onUpdate", "onCreate", "isModifierEnabled", "name", "getSupportedPropertyName", "prefixes", "upperProp", "charAt", "toUpperCase", "prefix", "toCheck", "style", "destroy", "removeAttribute", "disableEventListeners", "removeOnDestroy", "removeChild", "attachToScrollParents", "isBody", "target", "addEventListener", "passive", "push", "setupEventListeners", "updateBound", "scrollElement", "scrollParents", "eventsEnabled", "enableEventListeners", "scheduleUpdate", "removeEventListeners", "removeEventListener", "cancelAnimationFrame", "isNumeric", "n", "isNaN", "isFinite", "setStyles", "unit", "setAttributes", "value", "applyStyle", "instance", "arrowElement", "arrowStyles", "applyStyleOnLoad", "computeStyle", "floor", "legacyGpuAccelerationOption", "gpuAcceleration", "offsetParentRect", "prefixedProperty", "willChange", "invertTop", "invertLeft", "arrow", "isModifierRequired", "requesting", "isRequired", "requested", "querySelector", "isVertical", "len", "sideCapitalized", "toLowerCase", "altSide", "opSide", "arrowElementSize", "center", "popperMarginSide", "sideValue", "min", "round", "getOppositeVariation", "validPlacements", "placements", "clockwise", "counter", "index", "concat", "reverse", "BEHAVIORS", "flipped", "placementOpposite", "flipOrder", "behavior", "FLIP", "CLOCKWISE", "COUNTERCLOCKWISE", "refOffsets", "overlapsRef", "overflowsLeft", "overflowsRight", "overflowsTop", "overflowsBottom", "overflowsBoundaries", "flippedVariation", "flipVariations", "keepTogether", "toValue", "str", "size", "parseOffset", "useHeight", "fragments", "frag", "trim", "divider", "search", "splitRegex", "ops", "mergeWithPrevious", "op", "reduce", "index2", "basePlacement", "preventOverflow", "priority", "check", "escapeWithReference", "shift", "shiftvariation", "shiftOffsets", "hide", "bound", "inner", "subtractLength", "Popper", "requestAnimationFrame", "debounce", "bind", "Defaults", "jquery", "modifierOptions", "onLoad", "Utils", "global", "PopperUtils", ], mappings: "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", }