{"version":3,"file":"popper.min.js","sources":["../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindow.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/instanceOf.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getLayoutRect.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/getOffsetParent.js","../../src/dom-utils/isTableElement.js","../../src/utils/orderModifiers.js","../../src/utils/debounce.js","../../src/utils/getBasePlacement.js","../../src/index.js","../../src/utils/mergeByName.js","../../src/utils/getMainAxisFromPlacement.js","../../src/utils/computeOffsets.js","../../src/utils/getVariation.js","../../src/enums.js","../../src/modifiers/computeStyles.js","../../src/utils/getOppositePlacement.js","../../src/utils/getOppositeVariationPlacement.js","../../src/dom-utils/contains.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/dom-utils/getDecorations.js","../../src/dom-utils/getBorders.js","../../src/utils/mergePaddingObject.js","../../src/utils/getFreshSideObject.js","../../src/utils/expandToHashMap.js","../../src/utils/detectOverflow.js","../../src/modifiers/hide.js","../../src/modifiers/eventListeners.js","../../src/popper.js","../../src/modifiers/popperOffsets.js","../../src/modifiers/applyStyles.js","../../src/modifiers/offset.js","../../src/modifiers/flip.js","../../src/utils/computeAutoPlacement.js","../../src/modifiers/preventOverflow.js","../../src/utils/getAltAxis.js","../../src/utils/within.js","../../src/modifiers/arrow.js"],"sourcesContent":["// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\n\nexport default function getBoundingClientRect(\n element: Element | VirtualElement\n): ClientRectObject {\n const rect = element.getBoundingClientRect();\n\n return {\n width: rect.width,\n height: rect.height,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n y: rect.top,\n };\n}\n","// @flow\n/*:: import type { Window } from '../types'; */\n/*:: declare function getWindow(node: Node | Window): Window; */\n\nexport default function getWindow(node) {\n if (node.toString() !== '[object Window]') {\n const ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n }\n\n return node;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n const win = getWindow(node);\n const scrollLeft = win.pageXOffset;\n const scrollTop = win.pageYOffset;\n\n return {\n scrollLeft,\n scrollTop,\n };\n}\n","// @flow\nimport getWindow from './getWindow';\n\n/*:: declare function isElement(node: mixed): boolean %checks(node instanceof\n Element); */\n\nfunction isElement(node) {\n const OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\n/*:: declare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n HTMLElement); */\n\nfunction isHTMLElement(node) {\n const OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nexport { isElement, isHTMLElement };\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n element: Element | Window\n): HTMLElement {\n // $FlowFixMe: assume body is always available\n return (isElement(element) ? element.ownerDocument : element.document)\n .documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return (\n getBoundingClientRect(getDocumentElement(element)).left +\n getWindowScroll(element).scrollLeft\n );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n element: Element\n): CSSStyleDeclaration {\n return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n // Firefox wants us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n elementOrVirtualElement: Element | VirtualElement,\n offsetParent: Element | Window,\n isFixed: boolean = false\n): Rect {\n const documentElement = getDocumentElement(offsetParent);\n const rect = getBoundingClientRect(elementOrVirtualElement);\n\n let scroll = { scrollLeft: 0, scrollTop: 0 };\n let offsets = { x: 0, y: 0 };\n\n if (!isFixed) {\n if (\n getNodeName(offsetParent) !== 'body' ||\n // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)\n ) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height,\n };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop,\n };\n}\n","// @flow\nimport type { Rect } from '../types';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: element.offsetWidth,\n height: element.offsetHeight,\n };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (\n // $FlowFixMe: this is a quicker (but less type safe) way to save quite some bytes from the bundle\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || // DOM Element detected\n // $FlowFixMe: need a better way to handle this...\n element.host || // ShadowRoot detected\n // $FlowFixMe: HTMLElement is a Node\n getDocumentElement(element) // fallback\n );\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getNodeName from './getNodeName';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\nexport default function listScrollParents(\n element: Node,\n list: Array = []\n): Array {\n const scrollParent = getScrollParent(element);\n const isBody = getNodeName(scrollParent) === 'body';\n const win = getWindow(scrollParent);\n const target = isBody\n ? [win].concat(\n win.visualViewport || [],\n isScrollParent(scrollParent) ? scrollParent : []\n )\n : scrollParent;\n const updatedList = list.concat(target);\n\n return isBody\n ? updatedList\n : // $FlowFixMe: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement } from './instanceOf';\nimport isTableElement from './isTableElement';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n if (\n !isHTMLElement(element) ||\n // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed'\n ) {\n return null;\n }\n\n return element.offsetParent;\n}\n\nexport default function getOffsetParent(element: Element) {\n const window = getWindow(element);\n\n let offsetParent = getTrueOffsetParent(element);\n\n // Find the nearest non-table offsetParent\n while (offsetParent && isTableElement(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (\n offsetParent &&\n getNodeName(offsetParent) === 'body' &&\n getComputedStyle(offsetParent).position === 'static'\n ) {\n return window;\n }\n\n return offsetParent || window;\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n const map = new Map();\n const visited = new Set();\n const result = [];\n\n modifiers.forEach(modifier => {\n map.set(modifier.name, modifier);\n });\n\n // On visiting object, check for its dependencies and visit them recursively\n function sort(modifier: Modifier) {\n visited.add(modifier.name);\n\n const requires = [\n ...(modifier.requires || []),\n ...(modifier.requiresIfExists || []),\n ];\n\n requires.forEach(dep => {\n if (!visited.has(dep)) {\n const depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n\n result.push(modifier);\n }\n\n modifiers.forEach(modifier => {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n\n return result;\n}\n\nexport default function orderModifiers(\n modifiers: Array>\n): Array> {\n // order based on dependencies\n const orderedModifiers = order(modifiers);\n\n // order based on phase\n return modifierPhases.reduce((acc, phase) => {\n return acc.concat(\n orderedModifiers.filter(modifier => modifier.phase === phase)\n );\n }, []);\n}\n","// @flow\n\nexport default function debounce(fn: Function): () => Promise {\n let pending;\n return () => {\n if (!pending) {\n pending = new Promise(resolve => {\n Promise.resolve().then(() => {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n placement: Placement | typeof auto\n): BasePlacement {\n return (placement.split('-')[0]: any);\n}\n","// @flow\nimport type {\n State,\n OptionsGeneric,\n Modifier,\n Instance,\n VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport getComputedStyle from './dom-utils/getComputedStyle';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport validateModifiers from './utils/validateModifiers';\nimport uniqueBy from './utils/uniqueBy';\nimport getBasePlacement from './utils/getBasePlacement';\nimport mergeByName from './utils/mergeByName';\nimport { isElement } from './dom-utils/instanceOf';\nimport { auto } from './enums';\n\nexport type * from './types';\nexport * from './enums';\n\nconst INVALID_ELEMENT_ERROR =\n 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nconst INFINITE_LOOP_ERROR =\n 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\n\nconst DEFAULT_OPTIONS: OptionsGeneric = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n defaultModifiers?: Array>,\n defaultOptions?: $Shape>,\n};\n\nfunction areValidElements(...args: Array): boolean {\n return !args.some(\n element => !(element && typeof element.getBoundingClientRect === 'function')\n );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n const {\n defaultModifiers = [],\n defaultOptions = DEFAULT_OPTIONS,\n } = generatorOptions;\n\n return function createPopper>>(\n reference: Element | VirtualElement,\n popper: HTMLElement,\n options: $Shape> = defaultOptions\n ): Instance {\n let state: $Shape = {\n placement: 'bottom',\n orderedModifiers: [],\n options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n modifiersData: {},\n elements: {\n reference,\n popper,\n },\n attributes: {},\n styles: {},\n };\n\n let effectCleanupFns: Array<() => void> = [];\n let isDestroyed = false;\n\n const instance = {\n state,\n setOptions(options) {\n cleanupModifierEffects();\n\n state.options = {\n // $FlowFixMe\n ...defaultOptions,\n ...state.options,\n ...options,\n };\n\n state.scrollParents = {\n reference: isElement(reference)\n ? listScrollParents(reference)\n : reference.contextElement\n ? listScrollParents(reference.contextElement)\n : [],\n popper: listScrollParents(popper),\n };\n\n // Orders the modifiers based on their dependencies and `phase`\n // properties\n const orderedModifiers = orderModifiers(\n mergeByName([...defaultModifiers, ...state.options.modifiers])\n );\n\n // Strip out disabled modifiers\n state.orderedModifiers = orderedModifiers.filter(m => m.enabled);\n\n // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n if (__DEV__) {\n const modifiers = uniqueBy(\n [...orderedModifiers, ...state.options.modifiers],\n ({ name }) => name\n );\n\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n const flipModifier = state.orderedModifiers.find(\n ({ name }) => name === 'flip'\n );\n\n if (!flipModifier) {\n console.error(\n [\n 'Popper: \"auto\" placements require the \"flip\" modifier be',\n 'present and enabled to work.',\n ].join(' ')\n );\n }\n }\n\n const {\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n } = getComputedStyle(popper);\n\n // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n if (\n [marginTop, marginRight, marginBottom, marginLeft].some(margin =>\n parseFloat(margin)\n )\n ) {\n console.warn(\n [\n 'Popper: CSS \"margin\" styles cannot be used to apply padding',\n 'between the popper and its reference element or boundary.',\n 'To replicate margin, use the `offset` modifier, as well as',\n 'the `padding` option in the `preventOverflow` and `flip`',\n 'modifiers.',\n ].join(' ')\n );\n }\n }\n\n runModifierEffects();\n\n return instance.update();\n },\n\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n const { reference, popper } = state.elements;\n\n // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n if (!areValidElements(reference, popper)) {\n if (__DEV__) {\n console.error(INVALID_ELEMENT_ERROR);\n }\n return;\n }\n\n // Store the reference and popper rects to be read by modifiers\n state.rects = {\n reference: getCompositeRect(\n reference,\n getOffsetParent(popper),\n state.options.strategy === 'fixed'\n ),\n popper: getLayoutRect(popper),\n };\n\n // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n state.reset = false;\n\n state.placement = state.options.placement;\n\n // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n state.orderedModifiers.forEach(\n modifier =>\n (state.modifiersData[modifier.name] = {\n ...modifier.data,\n })\n );\n\n let __debug_loops__ = 0;\n for (let index = 0; index < state.orderedModifiers.length; index++) {\n if (__DEV__) {\n __debug_loops__ += 1;\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n const { fn, options = {}, name } = state.orderedModifiers[index];\n\n if (typeof fn === 'function') {\n state = fn({ state, options, name, instance }) || state;\n }\n }\n },\n\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce<$Shape>(\n () =>\n new Promise<$Shape>(resolve => {\n instance.forceUpdate();\n resolve(state);\n })\n ),\n\n destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n },\n };\n\n if (!areValidElements(reference, popper)) {\n if (__DEV__) {\n console.error(INVALID_ELEMENT_ERROR);\n }\n return instance;\n }\n\n instance.setOptions(options).then(state => {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n });\n\n // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n function runModifierEffects() {\n state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n if (typeof effect === 'function') {\n const cleanupFn = effect({ state, name, instance, options });\n const noopFn = () => {};\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(fn => fn());\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\n\nexport const createPopper = popperGenerator();\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n modifiers: Array<$Shape>>\n): Array<$Shape>> {\n const merged = modifiers.reduce((merged, current) => {\n const existing = merged[current.name];\n merged[current.name] = existing\n ? {\n ...existing,\n ...current,\n options: { ...existing.options, ...current.options },\n data: { ...existing.data, ...current.data },\n }\n : current;\n return merged;\n }, {});\n\n // IE11 does not support Object.values\n return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n placement: Placement\n): 'x' | 'y' {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n Rect,\n PositioningStrategy,\n Offsets,\n ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n reference,\n element,\n placement,\n}: {\n reference: Rect | ClientRectObject,\n element: Rect | ClientRectObject,\n strategy: PositioningStrategy,\n placement?: Placement,\n}): Offsets {\n const basePlacement = placement ? getBasePlacement(placement) : null;\n const variation = placement ? getVariation(placement) : null;\n const commonX = reference.x + reference.width / 2 - element.width / 2;\n const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n let offsets;\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height,\n };\n break;\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height,\n };\n break;\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY,\n };\n break;\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY,\n };\n break;\n default:\n offsets = {\n x: reference.x,\n y: reference.y,\n };\n }\n\n const mainAxis = basePlacement\n ? getMainAxisFromPlacement(basePlacement)\n : null;\n\n if (mainAxis != null) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] =\n Math.floor(offsets[mainAxis]) -\n Math.floor(reference[len] / 2 - element[len] / 2);\n break;\n case end:\n offsets[mainAxis] =\n Math.floor(offsets[mainAxis]) +\n Math.ceil(reference[len] / 2 - element[len] / 2);\n break;\n default:\n }\n }\n\n return offsets;\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n return (placement.split('-')[1]: any);\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n | typeof top\n | typeof bottom\n | typeof right\n | typeof left;\nexport const basePlacements: Array = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary =\n | HTMLElement\n | Array\n | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n | 'top-start'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-end'\n | 'right-start'\n | 'right-end'\n | 'left-start'\n | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array = basePlacements.reduce(\n (acc: Array, placement: BasePlacement) =>\n acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n []\n);\nexport const placements: Array = [...basePlacements, auto].reduce(\n (\n acc: Array,\n placement: BasePlacement | typeof auto\n ): Array =>\n acc.concat([\n placement,\n (`${placement}-${start}`: any),\n (`${placement}-${end}`: any),\n ]),\n []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array = [\n beforeRead,\n read,\n afterRead,\n beforeMain,\n main,\n afterMain,\n beforeWrite,\n write,\n afterWrite,\n];\n\nexport type ModifierPhases =\n | typeof beforeRead\n | typeof read\n | typeof afterRead\n | typeof beforeMain\n | typeof main\n | typeof afterMain\n | typeof beforeWrite\n | typeof write\n | typeof afterWrite;\n","// @flow\nimport type {\n PositioningStrategy,\n Offsets,\n Modifier,\n ModifierArguments,\n Rect,\n Window,\n} from '../types';\nimport { type BasePlacement, top, left, right, bottom } from '../enums';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getWindow from '../dom-utils/getWindow';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getComputedStyle from '../dom-utils/getComputedStyle';\nimport getBasePlacement from '../utils/getBasePlacement';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n gpuAcceleration: boolean,\n adaptive: boolean,\n};\n\nconst unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto',\n};\n\n// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\nfunction roundOffsets({ x, y }): Offsets {\n const win: Window = window;\n const dpr = win.devicePixelRatio || 1;\n\n return {\n x: Math.round(x * dpr) / dpr || 0,\n y: Math.round(y * dpr) / dpr || 0,\n };\n}\n\nexport function mapToStyles({\n popper,\n popperRect,\n placement,\n offsets,\n position,\n gpuAcceleration,\n adaptive,\n}: {\n popper: HTMLElement,\n popperRect: Rect,\n placement: BasePlacement,\n offsets: $Shape<{ x: number, y: number, centerOffset: number }>,\n position: PositioningStrategy,\n gpuAcceleration: boolean,\n adaptive: boolean,\n}) {\n let { x, y } = roundOffsets(offsets);\n\n const hasX = offsets.hasOwnProperty('x');\n const hasY = offsets.hasOwnProperty('y');\n\n let sideX: string = left;\n let sideY: string = top;\n\n const win: Window = window;\n\n if (adaptive) {\n let offsetParent = getOffsetParent(popper);\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n }\n\n // $FlowFixMe: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n /*:: offsetParent = (offsetParent: Element); */\n\n if (placement === top) {\n sideY = bottom;\n y -= offsetParent.clientHeight - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left) {\n sideX = right;\n x -= offsetParent.clientWidth - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n const commonStyles = {\n position,\n ...(adaptive && unsetSides),\n };\n\n if (gpuAcceleration) {\n return {\n ...commonStyles,\n [sideY]: hasY ? '0' : '',\n [sideX]: hasX ? '0' : '',\n // Layer acceleration can disable subpixel rendering which causes slightly\n // blurry text on low PPI displays, so we want to use 2D transforms\n // instead\n transform:\n (win.devicePixelRatio || 1) < 2\n ? `translate(${x}px, ${y}px)`\n : `translate3d(${x}px, ${y}px, 0)`,\n };\n }\n\n return {\n ...commonStyles,\n [sideY]: hasY ? `${y}px` : '',\n [sideX]: hasX ? `${x}px` : '',\n transform: '',\n };\n}\n\nfunction computeStyles({ state, options }: ModifierArguments) {\n const { gpuAcceleration = true, adaptive = true } = options;\n\n if (__DEV__) {\n const transitionProperty =\n getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (\n adaptive &&\n ['transform', 'top', 'right', 'bottom', 'left'].some(\n property => transitionProperty.indexOf(property) >= 0\n )\n ) {\n console.warn(\n [\n 'Popper: Detected CSS transitions on at least one of the following',\n 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".',\n '\\n\\n',\n 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow',\n 'for smooth transitions, or remove these properties from the CSS',\n 'transition declaration on the popper element if only transitioning',\n 'opacity or background-color for example.',\n '\\n\\n',\n 'We recommend using the popper element as a wrapper around an inner',\n 'element that can have any CSS property transitioned for animations.',\n ].join(' ')\n );\n }\n }\n\n const commonStyles = {\n placement: getBasePlacement(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration,\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = {\n ...state.styles.popper,\n ...mapToStyles({\n ...commonStyles,\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive,\n }),\n };\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = {\n ...state.styles.arrow,\n ...mapToStyles({\n ...commonStyles,\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n }),\n };\n }\n\n state.attributes.popper = {\n ...state.attributes.popper,\n 'data-popper-placement': state.placement,\n };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ComputeStylesModifier = Modifier<'computeStyles', Options>;\nexport default ({\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {},\n}: ComputeStylesModifier);\n","// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n\nexport default function getOppositePlacement(placement: Placement): Placement {\n return (placement.replace(\n /left|right|bottom|top/g,\n matched => hash[matched]\n ): any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { start: 'end', end: 'start' };\n\nexport default function getOppositeVariationPlacement(\n placement: Placement\n): Placement {\n return (placement.replace(/start|end/g, matched => hash[matched]): any);\n}\n","// @flow\nexport default function contains(parent: Element, child: Element) {\n // $FlowFixMe: hasOwnProperty doesn't seem to work in tests\n const isShadow = Boolean(child.getRootNode && child.getRootNode().host);\n\n // First, attempt with faster native method\n if (parent.contains(child)) {\n return true;\n }\n // then fallback to custom implementation with Shadow DOM support\n else if (isShadow) {\n let next = child;\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n }\n // $FlowFixMe: need a better way to handle this...\n next = next.parentNode || next.host;\n } while (next);\n }\n\n // Give up, the result is false\n return false;\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n return {\n ...rect,\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height,\n };\n}\n","// @flow\nimport type { ClientRectObject } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDecorations from './getDecorations';\nimport contains from './contains';\nimport rectToClientRect from '../utils/rectToClientRect';\n\nfunction getClientRectFromMixedType(\n element: Element,\n clippingParent: Element | RootBoundary\n): ClientRectObject {\n return clippingParent === viewport\n ? rectToClientRect(getViewportRect(element))\n : isHTMLElement(clippingParent)\n ? getBoundingClientRect(clippingParent)\n : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array {\n const clippingParents = listScrollParents(element);\n const canEscapeClipping =\n ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n const clipperElement =\n canEscapeClipping && isHTMLElement(element)\n ? getOffsetParent(element)\n : element;\n\n if (!isElement(clipperElement)) {\n return [];\n }\n\n // $FlowFixMe: https://github.com/facebook/flow/issues/1414\n return clippingParents.filter(\n clippingParent =>\n isElement(clippingParent) && contains(clippingParent, clipperElement)\n );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n element: Element,\n boundary: Boundary,\n rootBoundary: RootBoundary\n): ClientRectObject {\n const mainClippingParents =\n boundary === 'clippingParents'\n ? getClippingParents(element)\n : [].concat(boundary);\n const clippingParents = [...mainClippingParents, rootBoundary];\n const firstClippingParent = clippingParents[0];\n\n const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n const rect = getClientRectFromMixedType(element, clippingParent);\n const decorations = getDecorations(\n isHTMLElement(clippingParent)\n ? clippingParent\n : getDocumentElement(element)\n );\n\n accRect.top = Math.max(rect.top + decorations.top, accRect.top);\n accRect.right = Math.min(rect.right - decorations.right, accRect.right);\n accRect.bottom = Math.min(rect.bottom - decorations.bottom, accRect.bottom);\n accRect.left = Math.max(rect.left + decorations.left, accRect.left);\n\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n\n return clippingRect;\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getViewportRect(element: Element) {\n const win = getWindow(element);\n const visualViewport = win.visualViewport;\n\n let width = win.innerWidth;\n let height = win.innerHeight;\n\n // We don't know which browsers have buggy or odd implementations of this, so\n // for now we're only applying it to iOS to fix the keyboard issue.\n // Investigation required\n if (visualViewport && /iPhone|iPod|iPad/.test(navigator.platform)) {\n width = visualViewport.width;\n height = visualViewport.height;\n }\n\n return { width, height, x: 0, y: 0 };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getCompositeRect from './getCompositeRect';\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getDocumentRect(element: HTMLElement): Rect {\n const win = getWindow(element);\n const winScroll = getWindowScroll(element);\n const documentRect = getCompositeRect(getDocumentElement(element), win);\n\n documentRect.height = Math.max(documentRect.height, win.innerHeight);\n documentRect.width = Math.max(documentRect.width, win.innerWidth);\n documentRect.x = -winScroll.scrollLeft;\n documentRect.y = -winScroll.scrollTop;\n\n return documentRect;\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getBorders from './getBorders';\nimport getNodeName from './getNodeName';\nimport getWindow from './getWindow';\nimport getWindowScrollBarX from './getWindowScrollBarX';\n\n// Borders + scrollbars\nexport default function getDecorations(element: HTMLElement): SideObject {\n const win = getWindow(element);\n const borders = getBorders(element);\n const isHTML = getNodeName(element) === 'html';\n const winScrollBarX = getWindowScrollBarX(element);\n\n const x = element.clientWidth + borders.right;\n let y = element.clientHeight + borders.bottom;\n\n // HACK:\n // document.documentElement.clientHeight on iOS reports the height of the\n // viewport including the bottom bar, even if the bottom bar isn't visible.\n // If the difference between window innerHeight and html clientHeight is more\n // than 50, we assume it's a mobile bottom bar and ignore scrollbars.\n // * A 50px thick scrollbar is likely non-existent (macOS is 15px and Windows\n // is about 17px)\n // * The mobile bar is 114px tall\n if (isHTML && win.innerHeight - element.clientHeight > 50) {\n y = win.innerHeight - borders.bottom;\n }\n\n return {\n top: isHTML ? 0 : element.clientTop,\n right:\n // RTL scrollbar (scrolling containers only)\n element.clientLeft > borders.left\n ? borders.right\n : // LTR scrollbar\n isHTML\n ? win.innerWidth - x - winScrollBarX\n : element.offsetWidth - x,\n bottom: isHTML ? win.innerHeight - y : element.offsetHeight - y,\n left: isHTML ? winScrollBarX : element.clientLeft,\n };\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement } from './instanceOf';\n\nfunction toNumber(cssValue: string): number {\n return parseFloat(cssValue) || 0;\n}\n\nexport default function getBorders(element: Element): SideObject {\n const computedStyle = isHTMLElement(element) ? getComputedStyle(element) : {};\n\n return {\n top: toNumber(computedStyle.borderTopWidth),\n right: toNumber(computedStyle.borderRightWidth),\n bottom: toNumber(computedStyle.borderBottomWidth),\n left: toNumber(computedStyle.borderLeftWidth),\n };\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n paddingObject: $Shape\n): SideObject {\n return {\n ...getFreshSideObject(),\n ...paddingObject,\n };\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n };\n}\n","// @flow\n\nexport default function expandToHashMap<\n T: number | string | boolean,\n K: string\n>(value: T, keys: Array): { [key: string]: T } {\n return keys.reduce((hashMap, key) => {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}\n","// @flow\nimport type { State, SideObject, Padding } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n clippingParents,\n reference,\n popper,\n bottom,\n top,\n right,\n basePlacements,\n viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n placement: Placement,\n boundary: Boundary,\n rootBoundary: RootBoundary,\n elementContext: Context,\n altBoundary: boolean,\n padding: Padding,\n};\n\nexport default function detectOverflow(\n state: State,\n options: $Shape = {}\n): SideObject {\n const {\n placement = state.placement,\n boundary = clippingParents,\n rootBoundary = viewport,\n elementContext = popper,\n altBoundary = false,\n padding = 0,\n } = options;\n\n const paddingObject = mergePaddingObject(\n typeof padding !== 'number'\n ? padding\n : expandToHashMap(padding, basePlacements)\n );\n\n const altContext = elementContext === popper ? reference : popper;\n\n const referenceElement = state.elements.reference;\n const popperRect = state.rects.popper;\n const element = state.elements[altBoundary ? altContext : elementContext];\n\n const clippingClientRect = getClippingRect(\n isElement(element)\n ? element\n : element.contextElement || getDocumentElement(state.elements.popper),\n boundary,\n rootBoundary\n );\n\n const referenceClientRect = getBoundingClientRect(referenceElement);\n\n const popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement,\n });\n\n const popperClientRect = rectToClientRect({\n ...popperRect,\n ...popperOffsets,\n });\n\n const elementClientRect =\n elementContext === popper ? popperClientRect : referenceClientRect;\n\n // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n const overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom:\n elementClientRect.bottom -\n clippingClientRect.bottom +\n paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right:\n elementClientRect.right - clippingClientRect.right + paddingObject.right,\n };\n\n const offsetData = state.modifiersData.offset;\n\n // Offsets can be applied only to the popper element\n if (elementContext === popper && offsetData) {\n const offset = offsetData[placement];\n\n Object.keys(overflowOffsets).forEach(key => {\n const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}\n","// @flow\nimport type {\n ModifierArguments,\n Modifier,\n Rect,\n SideObject,\n Offsets,\n} from '../types';\nimport { top, bottom, left, right } from '../enums';\nimport detectOverflow from '../utils/detectOverflow';\n\nfunction getSideOffsets(\n overflow: SideObject,\n rect: Rect,\n preventedOffsets: Offsets = { x: 0, y: 0 }\n): SideObject {\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x,\n };\n}\n\nfunction isAnySideFullyClipped(overflow: SideObject): boolean {\n return [top, right, bottom, left].some(side => overflow[side] >= 0);\n}\n\nfunction hide({ state, name }: ModifierArguments<{||}>) {\n const referenceRect = state.rects.reference;\n const popperRect = state.rects.popper;\n const preventedOffsets = state.modifiersData.preventOverflow;\n\n const referenceOverflow = detectOverflow(state, {\n elementContext: 'reference',\n });\n const popperAltOverflow = detectOverflow(state, {\n altBoundary: true,\n });\n\n const referenceClippingOffsets = getSideOffsets(\n referenceOverflow,\n referenceRect\n );\n const popperEscapeOffsets = getSideOffsets(\n popperAltOverflow,\n popperRect,\n preventedOffsets\n );\n\n const isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n const hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n\n state.modifiersData[name] = {\n referenceClippingOffsets,\n popperEscapeOffsets,\n isReferenceHidden,\n hasPopperEscaped,\n };\n\n state.attributes.popper = {\n ...state.attributes.popper,\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped,\n };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type HideModifier = Modifier<'hide', {||}>;\nexport default ({\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide,\n}: HideModifier);\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport getWindow from '../dom-utils/getWindow';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n scroll: boolean,\n resize: boolean,\n};\n\nconst passive = { passive: true };\n\nfunction effect({ state, instance, options }: ModifierArguments) {\n const { scroll = true, resize = true } = options;\n\n const window = getWindow(state.elements.popper);\n const scrollParents = [\n ...state.scrollParents.reference,\n ...state.scrollParents.popper,\n ];\n\n if (scroll) {\n scrollParents.forEach(scrollParent => {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return () => {\n if (scroll) {\n scrollParents.forEach(scrollParent => {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type EventListenersModifier = Modifier<'eventListeners', Options>;\nexport default ({\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: () => {},\n effect,\n data: {},\n}: EventListenersModifier);\n","// @flow\nimport { popperGenerator } from './index';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\nimport offset from './modifiers/offset';\nimport flip from './modifiers/flip';\nimport preventOverflow from './modifiers/preventOverflow';\nimport arrow from './modifiers/arrow';\nimport hide from './modifiers/hide';\n\nimport detectOverflow from './utils/detectOverflow';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n eventListeners,\n popperOffsets,\n computeStyles,\n applyStyles,\n offset,\n flip,\n preventOverflow,\n arrow,\n hide,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport computeOffsets from '../utils/computeOffsets';\n\nfunction popperOffsets({ state, name }: ModifierArguments<{||}>) {\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement,\n });\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PopperOffsetsModifier = Modifier<'popperOffsets', {||}>;\nexport default ({\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {},\n}: PopperOffsetsModifier);\n","// @flow\nimport type { Modifier, ModifierArguments } from '../types';\nimport getNodeName from '../dom-utils/getNodeName';\nimport { isHTMLElement } from '../dom-utils/instanceOf';\n\n// This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles({ state }: ModifierArguments<{||}>) {\n Object.keys(state.elements).forEach(name => {\n const style = state.styles[name] || {};\n\n const attributes = state.attributes[name] || {};\n const element = state.elements[name];\n\n // arrow is optional + virtual elements\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n Object.assign(element.style, style);\n\n Object.keys(attributes).forEach(name => {\n const value = attributes[name];\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect({ state }: ModifierArguments<{||}>) {\n const initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0',\n },\n arrow: {\n position: 'absolute',\n },\n reference: {},\n };\n\n Object.assign(state.elements.popper.style, initialStyles.popper);\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return () => {\n Object.keys(state.elements).forEach(name => {\n const element = state.elements[name];\n const attributes = state.attributes[name] || {};\n\n const styleProperties = Object.keys(\n state.styles.hasOwnProperty(name)\n ? state.styles[name]\n : initialStyles[name]\n );\n\n // Set all values to an empty string to unset them\n const style = styleProperties.reduce((style, property) => {\n style[property] = '';\n return style;\n }, {});\n\n // arrow is optional + virtual elements\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe\n Object.assign(element.style, style);\n\n Object.keys(attributes).forEach(attribute => {\n element.removeAttribute(attribute);\n });\n });\n };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ApplyStylesModifier = Modifier<'applyStyles', {||}>;\nexport default ({\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect,\n requires: ['computeStyles'],\n}: ApplyStylesModifier);\n","// @flow\nimport type { Placement } from '../enums';\nimport type { ModifierArguments, Modifier, Rect, Offsets } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport { top, left, right, placements } from '../enums';\n\ntype OffsetsFunction = ({\n popper: Rect,\n reference: Rect,\n placement: Placement,\n}) => [?number, ?number];\n\ntype Offset = OffsetsFunction | [?number, ?number];\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n offset: Offset,\n};\n\nexport function distanceAndSkiddingToXY(\n placement: Placement,\n rects: { popper: Rect, reference: Rect },\n offset: Offset\n): Offsets {\n const basePlacement = getBasePlacement(placement);\n const invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n let [skidding, distance] =\n typeof offset === 'function'\n ? offset({\n ...rects,\n placement,\n })\n : offset;\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n\n return [left, right].indexOf(basePlacement) >= 0\n ? { x: distance, y: skidding }\n : { x: skidding, y: distance };\n}\n\nfunction offset({ state, options, name }: ModifierArguments) {\n const { offset = [0, 0] } = options;\n\n const data = placements.reduce((acc, placement) => {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n\n const { x, y } = data[state.placement];\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type OffsetModifier = Modifier<'offset', Options>;\nexport default ({\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset,\n}: OffsetModifier);\n","// @flow\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { ModifierArguments, Modifier, Padding } from '../types';\nimport getOppositePlacement from '../utils/getOppositePlacement';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getOppositeVariationPlacement from '../utils/getOppositeVariationPlacement';\nimport detectOverflow from '../utils/detectOverflow';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\nimport { bottom, top, start, right, left, auto } from '../enums';\nimport getVariation from '../utils/getVariation';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n mainAxis: boolean,\n altAxis: boolean,\n fallbackPlacements: Array,\n padding: Padding,\n boundary: Boundary,\n rootBoundary: RootBoundary,\n altBoundary: boolean,\n flipVariations: boolean,\n allowedAutoPlacements: Array,\n};\n\nfunction getExpandedFallbackPlacements(placement: Placement): Array {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n const oppositePlacement = getOppositePlacement(placement);\n\n return [\n getOppositeVariationPlacement(placement),\n oppositePlacement,\n getOppositeVariationPlacement(oppositePlacement),\n ];\n}\n\nfunction flip({ state, options, name }: ModifierArguments) {\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n const {\n mainAxis: checkMainAxis = true,\n altAxis: checkAltAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n padding,\n boundary,\n rootBoundary,\n altBoundary,\n flipVariations = true,\n allowedAutoPlacements,\n } = options;\n\n const preferredPlacement = state.options.placement;\n const basePlacement = getBasePlacement(preferredPlacement);\n const isBasePlacement = basePlacement === preferredPlacement;\n\n const fallbackPlacements =\n specifiedFallbackPlacements ||\n (isBasePlacement || !flipVariations\n ? [getOppositePlacement(preferredPlacement)]\n : getExpandedFallbackPlacements(preferredPlacement));\n\n const placements = [preferredPlacement, ...fallbackPlacements].reduce(\n (acc, placement) => {\n return acc.concat(\n getBasePlacement(placement) === auto\n ? computeAutoPlacement(state, {\n placement,\n boundary,\n rootBoundary,\n padding,\n flipVariations,\n allowedAutoPlacements,\n })\n : placement\n );\n },\n []\n );\n\n const referenceRect = state.rects.reference;\n const popperRect = state.rects.popper;\n\n const checksMap = new Map();\n let makeFallbackChecks = true;\n let firstFittingPlacement = placements[0];\n\n for (let i = 0; i < placements.length; i++) {\n const placement = placements[i];\n const basePlacement = getBasePlacement(placement);\n const isStartVariation = getVariation(placement) === start;\n const isVertical = [top, bottom].indexOf(basePlacement) >= 0;\n const len = isVertical ? 'width' : 'height';\n\n const overflow = detectOverflow(state, {\n placement,\n boundary,\n rootBoundary,\n altBoundary,\n padding,\n });\n\n let mainVariationSide: any = isVertical\n ? isStartVariation\n ? right\n : left\n : isStartVariation\n ? bottom\n : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n const altVariationSide: any = getOppositePlacement(mainVariationSide);\n\n const checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(\n overflow[mainVariationSide] <= 0,\n overflow[altVariationSide] <= 0\n );\n }\n\n if (checks.every(check => check)) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n const numberOfChecks = flipVariations ? 3 : 1;\n\n for (let i = numberOfChecks; i > 0; i--) {\n const fittingPlacement = placements.find(placement => {\n const checks = checksMap.get(placement);\n if (checks) {\n return checks.slice(0, i).every(check => check);\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n break;\n }\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type FlipModifier = Modifier<'flip', Options>;\nexport default ({\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: { _skip: false },\n}: FlipModifier);\n","// @flow\nimport type { State, Padding } from '../types';\nimport type {\n Placement,\n ComputedPlacement,\n Boundary,\n RootBoundary,\n} from '../enums';\nimport getVariation from './getVariation';\nimport {\n variationPlacements,\n basePlacements,\n placements as allPlacements,\n} from '../enums';\nimport detectOverflow from './detectOverflow';\nimport getBasePlacement from './getBasePlacement';\n\ntype Options = {\n placement: Placement,\n padding: Padding,\n boundary: Boundary,\n rootBoundary: RootBoundary,\n flipVariations: boolean,\n allowedAutoPlacements?: Array,\n};\n\n/*:: type OverflowsMap = { [ComputedPlacement]: number }; */\n/*;; type OverflowsMap = { [key in ComputedPlacement]: number }; */\n\nexport default function computeAutoPlacement(\n state: $Shape,\n options: Options = {}\n): Array {\n const {\n placement,\n boundary,\n rootBoundary,\n padding,\n flipVariations,\n allowedAutoPlacements = allPlacements,\n } = options;\n\n const variation = getVariation(placement);\n\n const placements = (variation\n ? flipVariations\n ? variationPlacements\n : variationPlacements.filter(\n placement => getVariation(placement) === variation\n )\n : basePlacements\n ).filter(placement => allowedAutoPlacements.indexOf(placement) >= 0);\n\n // $FlowFixMe: Flow seems to have problems with two array unions...\n const overflows: OverflowsMap = placements.reduce((acc, placement) => {\n acc[placement] = detectOverflow(state, {\n placement,\n boundary,\n rootBoundary,\n padding,\n })[getBasePlacement(placement)];\n\n return acc;\n }, {});\n\n return Object.keys(overflows).sort((a, b) => overflows[a] - overflows[b]);\n}\n","// @flow\nimport { top, left, right, bottom, start } from '../enums';\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { Rect, ModifierArguments, Modifier, Padding } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport getAltAxis from '../utils/getAltAxis';\nimport within from '../utils/within';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport detectOverflow from '../utils/detectOverflow';\nimport getVariation from '../utils/getVariation';\nimport getFreshSideObject from '../utils/getFreshSideObject';\n\ntype TetherOffset =\n | (({\n popper: Rect,\n reference: Rect,\n placement: Placement,\n }) => number)\n | number;\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n /* Prevents boundaries overflow on the main axis */\n mainAxis: boolean,\n /* Prevents boundaries overflow on the alternate axis */\n altAxis: boolean,\n /* The area to check the popper is overflowing in */\n boundary: Boundary,\n /* If the popper is not overflowing the main area, fallback to this one */\n rootBoundary: RootBoundary,\n /* Use the reference's \"clippingParents\" boundary context */\n altBoundary: boolean,\n /**\n * Allows the popper to overflow from its boundaries to keep it near its\n * reference element\n */\n tether: boolean,\n /* Offsets when the `tether` option should activate */\n tetherOffset: TetherOffset,\n /* Sets a padding to the provided boundary */\n padding: Padding,\n};\n\nfunction preventOverflow({ state, options, name }: ModifierArguments) {\n const {\n mainAxis: checkMainAxis = true,\n altAxis: checkAltAxis = false,\n boundary,\n rootBoundary,\n altBoundary,\n padding,\n tether = true,\n tetherOffset = 0,\n } = options;\n\n const overflow = detectOverflow(state, {\n boundary,\n rootBoundary,\n padding,\n altBoundary,\n });\n const basePlacement = getBasePlacement(state.placement);\n const variation = getVariation(state.placement);\n const isBasePlacement = !variation;\n const mainAxis = getMainAxisFromPlacement(basePlacement);\n const altAxis = getAltAxis(mainAxis);\n const popperOffsets = state.modifiersData.popperOffsets;\n const referenceRect = state.rects.reference;\n const popperRect = state.rects.popper;\n const tetherOffsetValue =\n typeof tetherOffset === 'function'\n ? tetherOffset({\n ...state.rects,\n placement: state.placement,\n })\n : tetherOffset;\n\n const data = { x: 0, y: 0 };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n const mainSide = mainAxis === 'y' ? top : left;\n const altSide = mainAxis === 'y' ? bottom : right;\n const len = mainAxis === 'y' ? 'height' : 'width';\n const offset = popperOffsets[mainAxis];\n\n const min = popperOffsets[mainAxis] + overflow[mainSide];\n const max = popperOffsets[mainAxis] - overflow[altSide];\n\n const additive = tether ? -popperRect[len] / 2 : 0;\n\n const minLen = variation === start ? referenceRect[len] : popperRect[len];\n const maxLen = variation === start ? -popperRect[len] : -referenceRect[len];\n\n // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n const arrowElement = state.elements.arrow;\n const arrowRect =\n tether && arrowElement\n ? getLayoutRect(arrowElement)\n : { width: 0, height: 0 };\n const arrowPaddingObject = state.modifiersData['arrow#persistent']\n ? state.modifiersData['arrow#persistent'].padding\n : getFreshSideObject();\n const arrowPaddingMin = arrowPaddingObject[mainSide];\n const arrowPaddingMax = arrowPaddingObject[altSide];\n\n // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n const arrowLen = within(0, referenceRect[len], arrowRect[len]);\n\n const minOffset = isBasePlacement\n ? referenceRect[len] / 2 -\n additive -\n arrowLen -\n arrowPaddingMin -\n tetherOffsetValue\n : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n const maxOffset = isBasePlacement\n ? -referenceRect[len] / 2 +\n additive +\n arrowLen +\n arrowPaddingMax +\n tetherOffsetValue\n : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n\n const arrowOffsetParent =\n state.elements.arrow && getOffsetParent(state.elements.arrow);\n const clientOffset = arrowOffsetParent\n ? mainAxis === 'y'\n ? arrowOffsetParent.clientTop || 0\n : arrowOffsetParent.clientLeft || 0\n : 0;\n\n const offsetModifierValue = state.modifiersData.offset\n ? state.modifiersData.offset[state.placement][mainAxis]\n : 0;\n\n const tetherMin =\n popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n const tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n const preventedOffset = within(\n tether ? Math.min(min, tetherMin) : min,\n offset,\n tether ? Math.max(max, tetherMax) : max\n );\n\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n const mainSide = mainAxis === 'x' ? top : left;\n const altSide = mainAxis === 'x' ? bottom : right;\n const offset = popperOffsets[altAxis];\n\n const min = offset + overflow[mainSide];\n const max = offset - overflow[altSide];\n\n const preventedOffset = within(min, offset, max);\n\n popperOffsets[altAxis] = preventedOffset;\n data[altAxis] = preventedOffset - offset;\n }\n\n state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PreventOverflowModifier = Modifier<'preventOverflow', Options>;\nexport default ({\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset'],\n}: PreventOverflowModifier);\n","// @flow\n\nexport default function getAltAxis(axis: 'x' | 'y'): 'x' | 'y' {\n return axis === 'x' ? 'y' : 'x';\n}\n","// @flow\n\nexport default function within(\n min: number,\n value: number,\n max: number\n): number {\n return Math.max(min, Math.min(value, max));\n}\n","// @flow\nimport type { Modifier, ModifierArguments, Padding } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport contains from '../dom-utils/contains';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport within from '../utils/within';\nimport mergePaddingObject from '../utils/mergePaddingObject';\nimport expandToHashMap from '../utils/expandToHashMap';\nimport { left, right, basePlacements, top, bottom } from '../enums';\nimport { isHTMLElement } from '../dom-utils/instanceOf';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n element: HTMLElement | string | null,\n padding: Padding,\n};\n\nfunction arrow({ state, name }: ModifierArguments) {\n const arrowElement = state.elements.arrow;\n const popperOffsets = state.modifiersData.popperOffsets;\n const basePlacement = getBasePlacement(state.placement);\n const axis = getMainAxisFromPlacement(basePlacement);\n const isVertical = [left, right].indexOf(basePlacement) >= 0;\n const len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n const paddingObject = state.modifiersData[`${name}#persistent`].padding;\n const arrowRect = getLayoutRect(arrowElement);\n const minProp = axis === 'y' ? top : left;\n const maxProp = axis === 'y' ? bottom : right;\n\n const endDiff =\n state.rects.reference[len] +\n state.rects.reference[axis] -\n popperOffsets[axis] -\n state.rects.popper[len];\n const startDiff = popperOffsets[axis] - state.rects.reference[axis];\n\n const arrowOffsetParent = getOffsetParent(arrowElement);\n const clientSize = arrowOffsetParent\n ? axis === 'y'\n ? arrowOffsetParent.clientHeight || 0\n : arrowOffsetParent.clientWidth || 0\n : 0;\n\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n const min = paddingObject[minProp];\n const max = clientSize - arrowRect[len] - paddingObject[maxProp];\n const center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n const offset = within(min, center, max);\n\n // Prevents breaking syntax highlighting...\n const axisProp: string = axis;\n state.modifiersData[name] = {\n [axisProp]: offset,\n centerOffset: offset - center,\n };\n}\n\nfunction effect({ state, options, name }: ModifierArguments) {\n let { element: arrowElement = '[data-popper-arrow]', padding = 0 } = options;\n\n if (arrowElement == null) {\n return;\n }\n\n // CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (__DEV__) {\n if (!isHTMLElement(arrowElement)) {\n console.error(\n [\n 'Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).',\n 'To use an SVG arrow, wrap it in an HTMLElement that will be used as',\n 'the arrow.',\n ].join(' ')\n );\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (__DEV__) {\n console.error(\n [\n 'Popper: \"arrow\" modifier\\'s `element` must be a child of the popper',\n 'element.',\n ].join(' ')\n );\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n state.modifiersData[`${name}#persistent`] = {\n padding: mergePaddingObject(\n typeof padding !== 'number'\n ? padding\n : expandToHashMap(padding, basePlacements)\n ),\n };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ArrowModifier = Modifier<'arrow', Options>;\nexport default ({\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow'],\n}: ArrowModifier);\n"],"names":["getBoundingClientRect","element","width","rect","height","top","right","bottom","left","x","y","getWindow","node","ownerDocument","window","getWindowScroll","scrollLeft","win","scrollTop","isElement","isHTMLElement","getNodeName","getDocumentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","documentElement","scroll","offsets","getLayoutRect","getParentNode","listScrollParents","list","scrollParent","getScrollParent","isBody","target","updatedList","getTrueOffsetParent","getOffsetParent","order","modifiers","map","Map","visited","Set","result","modifier","dep","depModifier","sort","debounce","fn","pending","Promise","resolve","undefined","getBasePlacement","placement","areValidElements","args","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","DEFAULT_OPTIONS","reference","popper","options","effectCleanupFns","state","orderedModifiers","modifiersData","elements","attributes","styles","isDestroyed","instance","setOptions","cleanupModifierEffects","orderModifiers","acc","phase","mergeByName","merged","current","existing","data","key","m","name","cleanupFn","effect","noopFn","forceUpdate","index","update","destroy","getMainAxisFromPlacement","computeOffsets","basePlacement","commonX","commonY","mainAxis","len","variation","start","Math","end","mapToStyles","popperRect","position","gpuAcceleration","adaptive","dpr","hasX","sideX","sideY","commonStyles","unsetSides","hasY","getOppositePlacement","matched","getOppositeVariationPlacement","contains","parent","child","isShadow","next","rectToClientRect","getClientRectFromMixedType","clippingParent","viewport","navigator","visualViewport","winScroll","documentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","getClippingParents","clippingParents","clipperElement","accRect","computedStyle","parseFloat","winScrollBarX","borders","isHTML","decorations","clippingRect","mergePaddingObject","paddingObject","expandToHashMap","value","keys","hashMap","detectOverflow","altBoundary","padding","basePlacements","referenceElement","elementContext","strategy","popperOffsets","popperClientRect","referenceClientRect","overflowOffsets","clippingClientRect","elementClientRect","offsetData","offset","multiply","axis","overflow","preventedOffsets","isAnySideFullyClipped","side","variationPlacements","placements","auto","modifierPhases","passive","hash","eventListeners","enabled","resize","scrollParents","popperOffsets$1","computeStyles$1","computeStyles","applyStyles$1","applyStyles","style","Object","effect$1","initialStyles","margin","arrow","property","attribute","requires","offset$1","distanceAndSkiddingToXY","invertDistance","rects","distance","skidding","flip$1","flip","specifiedFallbackPlacements","flipVariations","allowedAutoPlacements","preferredPlacement","getExpandedFallbackPlacements","oppositePlacement","fallbackPlacements","computeAutoPlacement","allPlacements","overflows","a","b","checksMap","firstFittingPlacement","i","isStartVariation","isVertical","mainVariationSide","checks","altVariationSide","check","makeFallbackChecks","fittingPlacement","requiresIfExists","_skip","preventOverflow$1","preventOverflow","checkMainAxis","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","mainSide","altSide","min","max","additive","tether","minLen","arrowElement","arrowPaddingObject","arrowRect","arrowLen","arrowPaddingMin","arrowPaddingMax","maxLen","minOffset","offsetModifierValue","arrowOffsetParent","maxOffset","tetherMin","tetherMax","preventedOffset","checkAltAxis","altAxis","arrow$1","minProp","maxProp","endDiff","startDiff","center","clientSize","effect$2","hide$1","hide","referenceOverflow","popperAltOverflow","getSideOffsets","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","createPopper"],"mappings":"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"}