{"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/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/getComputedStyle.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 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';\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 let documentElement;\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 (getNodeName(offsetParent) !== 'body') {\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 = getDocumentElement(offsetParent))) {\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';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (\n element.parentNode || // DOM Element detected\n // $FlowFixMe: need a better way to handle this...\n element.host || // ShadowRoot detected\n document.ownerDocument || // Fallback to ownerDocument if available\n document.documentElement // Or to documentElement if everything else fails\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 getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getNodeName from './getNodeName';\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\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 target = isBody ? getWindow(scrollParent) : 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 getComputedStyle from './getComputedStyle';\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)) {\n // Firefox wants us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getComputedStyle(node);\n\n if (/auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX)) {\n return node;\n }\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\n// https://stackoverflow.com/a/9851769/2059996\nconst isFirefox = () => typeof window.InstallTrigger !== 'undefined';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n let offsetParent;\n\n if (\n !isHTMLElement(element) ||\n !(offsetParent = element.offsetParent) ||\n // https://github.com/popperjs/popper-core/issues/837\n (isFirefox() && getComputedStyle(offsetParent).position === 'fixed')\n ) {\n return null;\n }\n\n return 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 Options,\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 * 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: Options = {\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 ...defaultOptions,\n ...state.options,\n ...options,\n };\n\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : [],\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\ntype 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: Offsets,\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 } = getComputedStyle(state.elements.popper);\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 // popper offsets are always available\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 // arrow offsets may not be available\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\nexport default ({\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {},\n}: Modifier);\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\n return {\n width: win.innerWidth,\n height: win.innerHeight,\n x: 0,\n y: 0,\n };\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\ntype 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) ? element : 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 Options,\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\nexport default ({\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide,\n}: Modifier);\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport getWindow from '../dom-utils/getWindow';\n\ntype 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\nexport default ({\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: () => {},\n effect,\n data: {},\n}: Modifier);\n","// @flow\nimport { popperGenerator } from './index';\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\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 };\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\nexport default ({\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {},\n}: Modifier<{||}>);\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: 'absolute',\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\nexport default ({\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect,\n requires: ['computeStyles'],\n}: Modifier<{||}>);\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\ntype 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 state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n\n state.modifiersData[name] = data;\n}\n\nexport default ({\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset,\n}: Modifier);\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\ntype Options = {\n fallbackPlacements: Array,\n padding: Padding,\n boundary: Boundary,\n rootBoundary: RootBoundary,\n altBoundary: boolean,\n flipVariations: boolean,\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 fallbackPlacements: specifiedFallbackPlacements,\n padding,\n boundary,\n rootBoundary,\n altBoundary,\n flipVariations = true,\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 })\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 overflow[basePlacement] <= 0,\n overflow[mainVariationSide] <= 0,\n overflow[altVariationSide] <= 0,\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\nexport default ({\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: { _skip: false },\n}: Modifier);\n","// @flow\nimport type { State, Padding } from '../types';\nimport type {\n Placement,\n BasePlacement,\n VariationPlacement,\n Boundary,\n RootBoundary,\n ComputedPlacement,\n} from '../enums';\nimport getVariation from './getVariation';\nimport { variationPlacements, basePlacements } 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};\n\ntype OverflowsMap = {\n [BasePlacement | VariationPlacement]: number,\n};\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 } = 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\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 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\ntype 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 (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 clientOffset = arrowElement\n ? mainAxis === 'y'\n ? state.elements.popper.clientTop\n : state.elements.popper.clientLeft\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 state.modifiersData.popperOffsets[altAxis] = preventedOffset;\n data[altAxis] = preventedOffset - offset;\n }\n\n state.modifiersData[name] = data;\n}\n\nexport default ({\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset'],\n}: Modifier);\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 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';\n\ntype Options = {\n element: HTMLElement | string,\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) {\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 clientOffset =\n axis === 'y'\n ? state.elements.popper.clientLeft\n : state.elements.popper.clientTop;\n\n const centerToReference = endDiff / 2 - startDiff / 2 - clientOffset;\n\n // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n const center = within(\n paddingObject[minProp],\n state.rects.popper[len] / 2 - arrowRect[len] / 2 + centerToReference,\n state.rects.popper[len] - arrowRect[len] - paddingObject[maxProp]\n );\n\n // Prevents breaking syntax highlighting...\n const axisProp: string = axis;\n state.modifiersData[name] = { [axisProp]: center };\n}\n\nfunction effect({ state, options, name }: ModifierArguments) {\n let { element: arrowElement = '[data-popper-arrow]', padding = 0 } = options;\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 (!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\nexport default ({\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow'],\n}: Modifier);\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","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","scroll","offsets","documentElement","getLayoutRect","getParentNode","document","getComputedStyle","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","documentRect","winScroll","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","preferredPlacement","getExpandedFallbackPlacements","oppositePlacement","fallbackPlacements","computeAutoPlacement","overflows","a","b","checksMap","firstFittingPlacement","i","isStartVariation","isVertical","mainVariationSide","altVariationSide","check","checks","makeFallbackChecks","fittingPlacement","requiresIfExists","_skip","preventOverflow$1","preventOverflow","checkMainAxis","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","mainSide","altSide","min","max","additive","tether","minLen","arrowRect","arrowElement","arrowPaddingObject","arrowLen","arrowPaddingMin","offsetModifierValue","arrowPaddingMax","maxLen","tetherMin","tetherMax","preventedOffset","checkAltAxis","altAxis","arrow$1","center","effect$2","hide$1","hide","referenceOverflow","popperAltOverflow","getSideOffsets","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","createPopper"],"mappings":"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"}