PageSourceSearch

https://www.socialcard.de/_assets/bf7f0ccb2a079e7f92a75cd9e46c1ea7…/core/dist/umd/popper.js?1758540419

js socialcard.de collected 2026-09-24 12:06:19 UTC 63,070 bytes, 1,825 lines download raw bytes

vendor: 63,070 bytes, lines 1-1825
1/**
2 * @popperjs/core v2.11.8 - MIT License
3 */
4
5(function (global, factory) {
6  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
7  typeof define === 'function' && define.amd ? define(['exports'], factory) :
8  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Popper = {}));
9}(this, (function (exports) { 'use strict';
10
11  function getWindow(node) {
12    if (node == null) {
13      return window;
14    }
15
16    if (node.toString() !== '[object Window]') {
17      var ownerDocument = node.ownerDocument;
18      return ownerDocument ? ownerDocument.defaultView || window : window;
19    }
20
21    return node;
22  }
23
24  function isElement(node) {
25    var OwnElement = getWindow(node).Element;
26    return node instanceof OwnElement || node instanceof Element;
27  }
28
29  function isHTMLElement(node) {
30    var OwnElement = getWindow(node).HTMLElement;
31    return node instanceof OwnElement || node instanceof HTMLElement;
32  }
33
34  function isShadowRoot(node) {
35    // IE 11 has no ShadowRoot
36    if (typeof ShadowRoot === 'undefined') {
37      return false;
38    }
39
40    var OwnElement = getWindow(node).ShadowRoot;
41    return node instanceof OwnElement || node instanceof ShadowRoot;
42  }
43
44  var max = Math.max;
45  var min = Math.min;
46  var round = Math.round;
47
48  function getUAString() {
49    var uaData = navigator.userAgentData;
50
51    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
52      return uaData.brands.map(function (item) {
53        return item.brand + "/" + item.version;
54      }).join(' ');
55    }
56
57    return navigator.userAgent;
58  }
59
60  function isLayoutViewport() {
61    return !/^((?!chrome|android).)*safari/i.test(getUAString());
62  }
63
64  function getBoundingClientRect(element, includeScale, isFixedStrategy) {
65    if (includeScale === void 0) {
66      includeScale = false;
67    }
68
69    if (isFixedStrategy === void 0) {
70      isFixedStrategy = false;
71    }
72
73    var clientRect = element.getBoundingClientRect();
74    var scaleX = 1;
75    var scaleY = 1;
76
77    if (includeScale && isHTMLElement(element)) {
78      scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
79      scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
80    }
81
82    var _ref = isElement(element) ? getWindow(element) : window,
83        visualViewport = _ref.visualViewport;
84
85    var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
86    var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
87    var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
88    var width = clientRect.width / scaleX;
89    var height = clientRect.height / scaleY;
90    return {
91      width: width,
92      height: height,
93      top: y,
94      right: x + width,
95      bottom: y + height,
96      left: x,
97      x: x,
98      y: y
99    };
100  }
101
102  function getWindowScroll(node) {
103    var win = getWindow(node);
104    var scrollLeft = win.pageXOffset;
105    var scrollTop = win.pageYOffset;
106    return {
107      scrollLeft: scrollLeft,
108      scrollTop: scrollTop
109    };
110  }
111
112  function getHTMLElementScroll(element) {
113    return {
114      scrollLeft: element.scrollLeft,
115      scrollTop: element.scrollTop
116    };
117  }
118
119  function getNodeScroll(node) {
120    if (node === getWindow(node) || !isHTMLElement(node)) {
121      return getWindowScroll(node);
122    } else {
123      return getHTMLElementScroll(node);
124    }
125  }
126
127  function getNodeName(element) {
128    return element ? (element.nodeName || '').toLowerCase() : null;
129  }
130
131  function getDocumentElement(element) {
132    // $FlowFixMe[incompatible-return]: assume body is always available
133    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
134    element.document) || window.document).documentElement;
135  }
136
137  function getWindowScrollBarX(element) {
138    // If <html> has a CSS width greater than the viewport, then this will be
139    // incorrect for RTL.
140    // Popper 1 is broken in this case and never had a bug report so let's assume
141    // it's not an issue. I don't think anyone ever specifies width on <html>
142    // anyway.
143    // Browsers where the left scrollbar doesn't cause an issue report `0` for
144    // this (e.g. Edge 2019, IE11, Safari)
145    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
146  }
147
148  function getComputedStyle(element) {
149    return getWindow(element).getComputedStyle(element);
150  }
151
152  function isScrollParent(element) {
153    // Firefox wants us to check `-x` and `-y` variations as well
154    var _getComputedStyle = getComputedStyle(element),
155        overflow = _getComputedStyle.overflow,
156        overflowX = _getComputedStyle.overflowX,
157        overflowY = _getComputedStyle.overflowY;
158
159    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
160  }
161
162  function isElementScaled(element) {
163    var rect = element.getBoundingClientRect();
164    var scaleX = round(rect.width) / element.offsetWidth || 1;
165    var scaleY = round(rect.height) / element.offsetHeight || 1;
166    return scaleX !== 1 || scaleY !== 1;
167  } // Returns the composite rect of an element relative to its offsetParent.
168  // Composite means it takes into account transforms as well as layout.
169
170
171  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
172    if (isFixed === void 0) {
173      isFixed = false;
174    }
175
176    var isOffsetParentAnElement = isHTMLElement(offsetParent);
177    var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
178    var documentElement = getDocumentElement(offsetParent);
179    var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
180    var scroll = {
181      scrollLeft: 0,
182      scrollTop: 0
183    };
184    var offsets = {
185      x: 0,
186      y: 0
187    };
188
189    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
190      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
191      isScrollParent(documentElement)) {
192        scroll = getNodeScroll(offsetParent);
193      }
194
195      if (isHTMLElement(offsetParent)) {
196        offsets = getBoundingClientRect(offsetParent, true);
197        offsets.x += offsetParent.clientLeft;
198        offsets.y += offsetParent.clientTop;
199      } else if (documentElement) {
200        offsets.x = getWindowScrollBarX(documentElement);
201      }
202    }
203
204    return {
205      x: rect.left + scroll.scrollLeft - offsets.x,
206      y: rect.top + scroll.scrollTop - offsets.y,
207      width: rect.width,
208      height: rect.height
209    };
210  }
211
212  // means it doesn't take into account transforms.
213
214  function getLayoutRect(element) {
215    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
216    // Fixes https://github.com/popperjs/popper-core/issues/1223
217
218    var width = element.offsetWidth;
219    var height = element.offsetHeight;
220
221    if (Math.abs(clientRect.width - width) <= 1) {
222      width = clientRect.width;
223    }
224
225    if (Math.abs(clientRect.height - height) <= 1) {
226      height = clientRect.height;
227    }
228
229    return {
230      x: element.offsetLeft,
231      y: element.offsetTop,
232      width: width,
233      height: height
234    };
235  }
236
237  function getParentNode(element) {
238    if (getNodeName(element) === 'html') {
239      return element;
240    }
241
242    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
243      // $FlowFixMe[incompatible-return]
244      // $FlowFixMe[prop-missing]
245      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
246      element.parentNode || ( // DOM Element detected
247      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
248      // $FlowFixMe[incompatible-call]: HTMLElement is a Node
249      getDocumentElement(element) // fallback
250
251    );
252  }
253
254  function getScrollParent(node) {
255    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
256      // $FlowFixMe[incompatible-return]: assume body is always available
257      return node.ownerDocument.body;
258    }
259
260    if (isHTMLElement(node) && isScrollParent(node)) {
261      return node;
262    }
263
264    return getScrollParent(getParentNode(node));
265  }
266
267  /*
268  given a DOM element, return the list of all scroll parents, up the list of ancesors
269  until we get to the top window object. This list is what we attach scroll listeners
270  to, because if any of these parent elements scroll, we'll need to re-calculate the
271  reference element's position.
272  */
273
274  function listScrollParents(element, list) {
275    var _element$ownerDocumen;
276
277    if (list === void 0) {
278      list = [];
279    }
280
281    var scrollParent = getScrollParent(element);
282    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
283    var win = getWindow(scrollParent);
284    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
285    var updatedList = list.concat(target);
286    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
287    updatedList.concat(listScrollParents(getParentNode(target)));
288  }
289
290  function isTableElement(element) {
291    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
292  }
293
294  function getTrueOffsetParent(element) {
295    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
296    getComputedStyle(element).position === 'fixed') {
297      return null;
298    }
299
300    return element.offsetParent;
301  } // `.offsetParent` reports `null` for fixed elements, while absolute elements
302  // return the containing block
303
304
305  function getContainingBlock(element) {
306    var isFirefox = /firefox/i.test(getUAString());
307    var isIE = /Trident/i.test(getUAString());
308
309    if (isIE && isHTMLElement(element)) {
310      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
311      var elementCss = getComputedStyle(element);
312
313      if (elementCss.position === 'fixed') {
314        return null;
315      }
316    }
317
318    var currentNode = getParentNode(element);
319
320    if (isShadowRoot(currentNode)) {
321      currentNode = currentNode.host;
322    }
323
324    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
325      var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
326      // create a containing block.
327      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
328
329      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
330        return currentNode;
331      } else {
332        currentNode = currentNode.parentNode;
333      }
334    }
335
336    return null;
337  } // Gets the closest ancestor positioned element. Handles some edge cases,
338  // such as table ancestors and cross browser bugs.
339
340
341  function getOffsetParent(element) {
342    var window = getWindow(element);
343    var offsetParent = getTrueOffsetParent(element);
344
345    while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
346      offsetParent = getTrueOffsetParent(offsetParent);
347    }
348
349    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
350      return window;
351    }
352
353    return offsetParent || getContainingBlock(element) || window;
354  }
355
356  var top = 'top';
357  var bottom = 'bottom';
358  var right = 'right';
359  var left = 'left';
360  var auto = 'auto';
361  var basePlacements = [top, bottom, right, left];
362  var start = 'start';
363  var end = 'end';
364  var clippingParents = 'clippingParents';
365  var viewport = 'viewport';
366  var popper = 'popper';
367  var reference = 'reference';
368  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
369    return acc.concat([placement + "-" + start, placement + "-" + end]);
370  }, []);
371  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
372    return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
373  }, []); // modifiers that need to read the DOM
374
375  var beforeRead = 'beforeRead';
376  var read = 'read';
377  var afterRead = 'afterRead'; // pure-logic modifiers
378
379  var beforeMain = 'beforeMain';
380  var main = 'main';
381  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
382
383  var beforeWrite = 'beforeWrite';
384  var write = 'write';
385  var afterWrite = 'afterWrite';
386  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
387
388  function order(modifiers) {
389    var map = new Map();
390    var visited = new Set();
391    var result = [];
392    modifiers.forEach(function (modifier) {
393      map.set(modifier.name, modifier);
394    }); // On visiting object, check for its dependencies and visit them recursively
395
396    function sort(modifier) {
397      visited.add(modifier.name);
398      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
399      requires.forEach(function (dep) {
400        if (!visited.has(dep)) {
401          var depModifier = map.get(dep);
402
403          if (depModifier) {
404            sort(depModifier);
405          }
406        }
407      });
408      result.push(modifier);
409    }
410
411    modifiers.forEach(function (modifier) {
412      if (!visited.has(modifier.name)) {
413        // check for visited object
414        sort(modifier);
415      }
416    });
417    return result;
418  }
419
420  function orderModifiers(modifiers) {
421    // order based on dependencies
422    var orderedModifiers = order(modifiers); // order based on phase
423
424    return modifierPhases.reduce(function (acc, phase) {
425      return acc.concat(orderedModifiers.filter(function (modifier) {
426        return modifier.phase === phase;
427      }));
428    }, []);
429  }
430
431  function debounce(fn) {
432    var pending;
433    return function () {
434      if (!pending) {
435        pending = new Promise(function (resolve) {
436          Promise.resolve().then(function () {
437            pending = undefined;
438            resolve(fn());
439          });
440        });
441      }
442
443      return pending;
444    };
445  }
446
447  function mergeByName(modifiers) {
448    var merged = modifiers.reduce(function (merged, current) {
449      var existing = merged[current.name];
450      merged[current.name] = existing ? Object.assign({}, existing, current, {
451        options: Object.assign({}, existing.options, current.options),
452        data: Object.assign({}, existing.data, current.data)
453      }) : current;
454      return merged;
455    }, {}); // IE11 does not support Object.values
456
457    return Object.keys(merged).map(function (key) {
458      return merged[key];
459    });
460  }
461
462  function getViewportRect(element, strategy) {
463    var win = getWindow(element);
464    var html = getDocumentElement(element);
465    var visualViewport = win.visualViewport;
466    var width = html.clientWidth;
467    var height = html.clientHeight;
468    var x = 0;
469    var y = 0;
470
471    if (visualViewport) {
472      width = visualViewport.width;
473      height = visualViewport.height;
474      var layoutViewport = isLayoutViewport();
475
476      if (layoutViewport || !layoutViewport && strategy === 'fixed') {
477        x = visualViewport.offsetLeft;
478        y = visualViewport.offsetTop;
479      }
480    }
481
482    return {
483      width: width,
484      height: height,
485      x: x + getWindowScrollBarX(element),
486      y: y
487    };
488  }
489
490  // of the `<html>` and `<body>` rect bounds if horizontally scrollable
491
492  function getDocumentRect(element) {
493    var _element$ownerDocumen;
494
495    var html = getDocumentElement(element);
496    var winScroll = getWindowScroll(element);
497    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
498    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
499    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
500    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
501    var y = -winScroll.scrollTop;
502
503    if (getComputedStyle(body || html).direction === 'rtl') {
504      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
505    }
506
507    return {
508      width: width,
509      height: height,
510      x: x,
511      y: y
512    };
513  }
514
515  function contains(parent, child) {
516    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
517
518    if (parent.contains(child)) {
519      return true;
520    } // then fallback to custom implementation with Shadow DOM support
521    else if (rootNode && isShadowRoot(rootNode)) {
522        var next = child;
523
524        do {
525          if (next && parent.isSameNode(next)) {
526            return true;
527          } // $FlowFixMe[prop-missing]: need a better way to handle this...
528
529
530          next = next.parentNode || next.host;
531        } while (next);
532      } // Give up, the result is false
533
534
535    return false;
536  }
537
538  function rectToClientRect(rect) {
539    return Object.assign({}, rect, {
540      left: rect.x,
541      top: rect.y,
542      right: rect.x + rect.width,
543      bottom: rect.y + rect.height
544    });
545  }
546
547  function getInnerBoundingClientRect(element, strategy) {
548    var rect = getBoundingClientRect(element, false, strategy === 'fixed');
549    rect.top = rect.top + element.clientTop;
550    rect.left = rect.left + element.clientLeft;
551    rect.bottom = rect.top + element.clientHeight;
552    rect.right = rect.left + element.clientWidth;
553    rect.width = element.clientWidth;
554    rect.height = element.clientHeight;
555    rect.x = rect.left;
556    rect.y = rect.top;
557    return rect;
558  }
559
560  function getClientRectFromMixedType(element, clippingParent, strategy) {
561    return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
562  } // A "clipping parent" is an overflowable container with the characteristic of
563  // clipping (or hiding) overflowing elements with a position different from
564  // `initial`
565
566
567  function getClippingParents(element) {
568    var clippingParents = listScrollParents(getParentNode(element));
569    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
570    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
571
572    if (!isElement(clipperElement)) {
573      return [];
574    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
575
576
577    return clippingParents.filter(function (clippingParent) {
578      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
579    });
580  } // Gets the maximum area that the element is visible in due to any number of
581  // clipping parents
582
583
584  function getClippingRect(element, boundary, rootBoundary, strategy) {
585    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
586    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
587    var firstClippingParent = clippingParents[0];
588    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
589      var rect = getClientRectFromMixedType(element, clippingParent, strategy);
590      accRect.top = max(rect.top, accRect.top);
591      accRect.right = min(rect.right, accRect.right);
592      accRect.bottom = min(rect.bottom, accRect.bottom);
593      accRect.left = max(rect.left, accRect.left);
594      return accRect;
595    }, getClientRectFromMixedType(element, firstClippingParent, strategy));
596    clippingRect.width = clippingRect.right - clippingRect.left;
597    clippingRect.height = clippingRect.bottom - clippingRect.top;
598    clippingRect.x = clippingRect.left;
599    clippingRect.y = clippingRect.top;
600    return clippingRect;
601  }
602
603  function getBasePlacement(placement) {
604    return placement.split('-')[0];
605  }
606
607  function getVariation(placement) {
608    return placement.split('-')[1];
609  }
610
611  function getMainAxisFromPlacement(placement) {
612    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
613  }
614
615  function computeOffsets(_ref) {
616    var reference = _ref.reference,
617        element = _ref.element,
618        placement = _ref.placement;
619    var basePlacement = placement ? getBasePlacement(placement) : null;
620    var variation = placement ? getVariation(placement) : null;
621    var commonX = reference.x + reference.width / 2 - element.width / 2;
622    var commonY = reference.y + reference.height / 2 - element.height / 2;
623    var offsets;
624
625    switch (basePlacement) {
626      case top:
627        offsets = {
628          x: commonX,
629          y: reference.y - element.height
630        };
631        break;
632
633      case bottom:
634        offsets = {
635          x: commonX,
636          y: reference.y + reference.height
637        };
638        break;
639
640      case right:
641        offsets = {
642          x: reference.x + reference.width,
643          y: commonY
644        };
645        break;
646
647      case left:
648        offsets = {
649          x: reference.x - element.width,
650          y: commonY
651        };
652        break;
653
654      default:
655        offsets = {
656          x: reference.x,
657          y: reference.y
658        };
659    }
660
661    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
662
663    if (mainAxis != null) {
664      var len = mainAxis === 'y' ? 'height' : 'width';
665
666      switch (variation) {
667        case start:
668          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
669          break;
670
671        case end:
672          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
673          break;
674      }
675    }
676
677    return offsets;
678  }
679
680  function getFreshSideObject() {
681    return {
682      top: 0,
683      right: 0,
684      bottom: 0,
685      left: 0
686    };
687  }
688
689  function mergePaddingObject(paddingObject) {
690    return Object.assign({}, getFreshSideObject(), paddingObject);
691  }
692
693  function expandToHashMap(value, keys) {
694    return keys.reduce(function (hashMap, key) {
695      hashMap[key] = value;
696      return hashMap;
697    }, {});
698  }
699
700  function detectOverflow(state, options) {
701    if (options === void 0) {
702      options = {};
703    }
704
705    var _options = options,
706        _options$placement = _options.placement,
707        placement = _options$placement === void 0 ? state.placement : _options$placement,
708        _options$strategy = _options.strategy,
709        strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
710        _options$boundary = _options.boundary,
711        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
712        _options$rootBoundary = _options.rootBoundary,
713        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
714        _options$elementConte = _options.elementContext,
715        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
716        _options$altBoundary = _options.altBoundary,
717        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
718        _options$padding = _options.padding,
719        padding = _options$padding === void 0 ? 0 : _options$padding;
720    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
721    var altContext = elementContext === popper ? reference : popper;
722    var popperRect = state.rects.popper;
723    var element = state.elements[altBoundary ? altContext : elementContext];
724    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
725    var referenceClientRect = getBoundingClientRect(state.elements.reference);
726    var popperOffsets = computeOffsets({
727      reference: referenceClientRect,
728      element: popperRect,
729      strategy: 'absolute',
730      placement: placement
731    });
732    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
733    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
734    // 0 or negative = within the clipping rect
735
736    var overflowOffsets = {
737      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
738      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
739      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
740      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
741    };
742    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
743
744    if (elementContext === popper && offsetData) {
745      var offset = offsetData[placement];
746      Object.keys(overflowOffsets).forEach(function (key) {
747        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
748        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
749        overflowOffsets[key] += offset[axis] * multiply;
750      });
751    }
752
753    return overflowOffsets;
754  }
755
756  var DEFAULT_OPTIONS = {
757    placement: 'bottom',
758    modifiers: [],
759    strategy: 'absolute'
760  };
761
762  function areValidElements() {
763    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
764      args[_key] = arguments[_key];
765    }
766
767    return !args.some(function (element) {
768      return !(element && typeof element.getBoundingClientRect === 'function');
769    });
770  }
771
772  function popperGenerator(generatorOptions) {
773    if (generatorOptions === void 0) {
774      generatorOptions = {};
775    }
776
777    var _generatorOptions = generatorOptions,
778        _generatorOptions$def = _generatorOptions.defaultModifiers,
779        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
780        _generatorOptions$def2 = _generatorOptions.defaultOptions,
781        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
782    return function createPopper(reference, popper, options) {
783      if (options === void 0) {
784        options = defaultOptions;
785      }
786
787      var state = {
788        placement: 'bottom',
789        orderedModifiers: [],
790        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
791        modifiersData: {},
792        elements: {
793          reference: reference,
794          popper: popper
795        },
796        attributes: {},
797        styles: {}
798      };
799      var effectCleanupFns = [];
800      var isDestroyed = false;
801      var instance = {
802        state: state,
803        setOptions: function setOptions(setOptionsAction) {
804          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
805          cleanupModifierEffects();
806          state.options = Object.assign({}, defaultOptions, state.options, options);
807          state.scrollParents = {
808            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
809            popper: listScrollParents(popper)
810          }; // Orders the modifiers based on their dependencies and `phase`
811          // properties
812
813          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
814
815          state.orderedModifiers = orderedModifiers.filter(function (m) {
816            return m.enabled;
817          });
818          runModifierEffects();
819          return instance.update();
820        },
821        // Sync update – it will always be executed, even if not necessary. This
822        // is useful for low frequency updates where sync behavior simplifies the
823        // logic.
824        // For high frequency updates (e.g. `resize` and `scroll` events), always
825        // prefer the async Popper#update method
826        forceUpdate: function forceUpdate() {
827          if (isDestroyed) {
828            return;
829          }
830
831          var _state$elements = state.elements,
832              reference = _state$elements.reference,
833              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
834          // anymore
835
836          if (!areValidElements(reference, popper)) {
837            return;
838          } // Store the reference and popper rects to be read by modifiers
839
840
841          state.rects = {
842            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
843            popper: getLayoutRect(popper)
844          }; // Modifiers have the ability to reset the current update cycle. The
845          // most common use case for this is the `flip` modifier changing the
846          // placement, which then needs to re-run all the modifiers, because the
847          // logic was previously ran for the previous placement and is therefore
848          // stale/incorrect
849
850          state.reset = false;
851          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
852          // is filled with the initial data specified by the modifier. This means
853          // it doesn't persist and is fresh on each update.
854          // To ensure persistent data, use `${name}#persistent`
855
856          state.orderedModifiers.forEach(function (modifier) {
857            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
858          });
859
860          for (var index = 0; index < state.orderedModifiers.length; index++) {
861            if (state.reset === true) {
862              state.reset = false;
863              index = -1;
864              continue;
865            }
866
867            var _state$orderedModifie = state.orderedModifiers[index],
868                fn = _state$orderedModifie.fn,
869                _state$orderedModifie2 = _state$orderedModifie.options,
870                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
871                name = _state$orderedModifie.name;
872
873            if (typeof fn === 'function') {
874              state = fn({
875                state: state,
876                options: _options,
877                name: name,
878                instance: instance
879              }) || state;
880            }
881          }
882        },
883        // Async and optimistically optimized update – it will not be executed if
884        // not necessary (debounced to run at most once-per-tick)
885        update: debounce(function () {
886          return new Promise(function (resolve) {
887            instance.forceUpdate();
888            resolve(state);
889          });
890        }),
891        destroy: function destroy() {
892          cleanupModifierEffects();
893          isDestroyed = true;
894        }
895      };
896
897      if (!areValidElements(reference, popper)) {
898        return instance;
899      }
900
901      instance.setOptions(options).then(function (state) {
902        if (!isDestroyed && options.onFirstUpdate) {
903          options.onFirstUpdate(state);
904        }
905      }); // Modifiers have the ability to execute arbitrary code before the first
906      // update cycle runs. They will be executed in the same order as the update
907      // cycle. This is useful when a modifier adds some persistent data that
908      // other modifiers need to use, but the modifier is run after the dependent
909      // one.
910
911      function runModifierEffects() {
912        state.orderedModifiers.forEach(function (_ref) {
913          var name = _ref.name,
914              _ref$options = _ref.options,
915              options = _ref$options === void 0 ? {} : _ref$options,
916              effect = _ref.effect;
917
918          if (typeof effect === 'function') {
919            var cleanupFn = effect({
920              state: state,
921              name: name,
922              instance: instance,
923              options: options
924            });
925
926            var noopFn = function noopFn() {};
927
928            effectCleanupFns.push(cleanupFn || noopFn);
929          }
930        });
931      }
932
933      function cleanupModifierEffects() {
934        effectCleanupFns.forEach(function (fn) {
935          return fn();
936        });
937        effectCleanupFns = [];
938      }
939
940      return instance;
941    };
942  }
943
944  var passive = {
945    passive: true
946  };
947
948  function effect$2(_ref) {
949    var state = _ref.state,
950        instance = _ref.instance,
951        options = _ref.options;
952    var _options$scroll = options.scroll,
953        scroll = _options$scroll === void 0 ? true : _options$scroll,
954        _options$resize = options.resize,
955        resize = _options$resize === void 0 ? true : _options$resize;
956    var window = getWindow(state.elements.popper);
957    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
958
959    if (scroll) {
960      scrollParents.forEach(function (scrollParent) {
961        scrollParent.addEventListener('scroll', instance.update, passive);
962      });
963    }
964
965    if (resize) {
966      window.addEventListener('resize', instance.update, passive);
967    }
968
969    return function () {
970      if (scroll) {
971        scrollParents.forEach(function (scrollParent) {
972          scrollParent.removeEventListener('scroll', instance.update, passive);
973        });
974      }
975
976      if (resize) {
977        window.removeEventListener('resize', instance.update, passive);
978      }
979    };
980  } // eslint-disable-next-line import/no-unused-modules
981
982
983  var eventListeners = {
984    name: 'eventListeners',
985    enabled: true,
986    phase: 'write',
987    fn: function fn() {},
988    effect: effect$2,
989    data: {}
990  };
991
992  function popperOffsets(_ref) {
993    var state = _ref.state,
994        name = _ref.name;
995    // Offsets are the actual position the popper needs to have to be
996    // properly positioned near its reference element
997    // This is the most basic placement, and will be adjusted by
998    // the modifiers in the next step
999    state.modifiersData[name] = computeOffsets({
1000      reference: state.rects.reference,
1001      element: state.rects.popper,
1002      strategy: 'absolute',
1003      placement: state.placement
1004    });
1005  } // eslint-disable-next-line import/no-unused-modules
1006
1007
1008  var popperOffsets$1 = {
1009    name: 'popperOffsets',
1010    enabled: true,
1011    phase: 'read',
1012    fn: popperOffsets,
1013    data: {}
1014  };
1015
1016  var unsetSides = {
1017    top: 'auto',
1018    right: 'auto',
1019    bottom: 'auto',
1020    left: 'auto'
1021  }; // Round the offsets to the nearest suitable subpixel based on the DPR.
1022  // Zooming can change the DPR, but it seems to report a value that will
1023  // cleanly divide the values into the appropriate subpixels.
1024
1025  function roundOffsetsByDPR(_ref, win) {
1026    var x = _ref.x,
1027        y = _ref.y;
1028    var dpr = win.devicePixelRatio || 1;
1029    return {
1030      x: round(x * dpr) / dpr || 0,
1031      y: round(y * dpr) / dpr || 0
1032    };
1033  }
1034
1035  function mapToStyles(_ref2) {
1036    var _Object$assign2;
1037
1038    var popper = _ref2.popper,
1039        popperRect = _ref2.popperRect,
1040        placement = _ref2.placement,
1041        variation = _ref2.variation,
1042        offsets = _ref2.offsets,
1043        position = _ref2.position,
1044        gpuAcceleration = _ref2.gpuAcceleration,
1045        adaptive = _ref2.adaptive,
1046        roundOffsets = _ref2.roundOffsets,
1047        isFixed = _ref2.isFixed;
1048    var _offsets$x = offsets.x,
1049        x = _offsets$x === void 0 ? 0 : _offsets$x,
1050        _offsets$y = offsets.y,
1051        y = _offsets$y === void 0 ? 0 : _offsets$y;
1052
1053    var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
1054      x: x,
1055      y: y
1056    }) : {
1057      x: x,
1058      y: y
1059    };
1060
1061    x = _ref3.x;
1062    y = _ref3.y;
1063    var hasX = offsets.hasOwnProperty('x');
1064    var hasY = offsets.hasOwnProperty('y');
1065    var sideX = left;
1066    var sideY = top;
1067    var win = window;
1068
1069    if (adaptive) {
1070      var offsetParent = getOffsetParent(popper);
1071      var heightProp = 'clientHeight';
1072      var widthProp = 'clientWidth';
1073
1074      if (offsetParent === getWindow(popper)) {
1075        offsetParent = getDocumentElement(popper);
1076
1077        if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
1078          heightProp = 'scrollHeight';
1079          widthProp = 'scrollWidth';
1080        }
1081      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
1082
1083
1084      offsetParent = offsetParent;
1085
1086      if (placement === top || (placement === left || placement === right) && variation === end) {
1087        sideY = bottom;
1088        var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
1089        offsetParent[heightProp];
1090        y -= offsetY - popperRect.height;
1091        y *= gpuAcceleration ? 1 : -1;
1092      }
1093
1094      if (placement === left || (placement === top || placement === bottom) && variation === end) {
1095        sideX = right;
1096        var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
1097        offsetParent[widthProp];
1098        x -= offsetX - popperRect.width;
1099        x *= gpuAcceleration ? 1 : -1;
1100      }
1101    }
1102
1103    var commonStyles = Object.assign({
1104      position: position
1105    }, adaptive && unsetSides);
1106
1107    var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
1108      x: x,
1109      y: y
1110    }, getWindow(popper)) : {
1111      x: x,
1112      y: y
1113    };
1114
1115    x = _ref4.x;
1116    y = _ref4.y;
1117
1118    if (gpuAcceleration) {
1119      var _Object$assign;
1120
1121      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
1122    }
1123
1124    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
1125  }
1126
1127  function computeStyles(_ref5) {
1128    var state = _ref5.state,
1129        options = _ref5.options;
1130    var _options$gpuAccelerat = options.gpuAcceleration,
1131        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
1132        _options$adaptive = options.adaptive,
1133        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
1134        _options$roundOffsets = options.roundOffsets,
1135        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
1136    var commonStyles = {
1137      placement: getBasePlacement(state.placement),
1138      variation: getVariation(state.placement),
1139      popper: state.elements.popper,
1140      popperRect: state.rects.popper,
1141      gpuAcceleration: gpuAcceleration,
1142      isFixed: state.options.strategy === 'fixed'
1143    };
1144
1145    if (state.modifiersData.popperOffsets != null) {
1146      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
1147        offsets: state.modifiersData.popperOffsets,
1148        position: state.options.strategy,
1149        adaptive: adaptive,
1150        roundOffsets: roundOffsets
1151      })));
1152    }
1153
1154    if (state.modifiersData.arrow != null) {
1155      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
1156        offsets: state.modifiersData.arrow,
1157        position: 'absolute',
1158        adaptive: false,
1159        roundOffsets: roundOffsets
1160      })));
1161    }
1162
1163    state.attributes.popper = Object.assign({}, state.attributes.popper, {
1164      'data-popper-placement': state.placement
1165    });
1166  } // eslint-disable-next-line import/no-unused-modules
1167
1168
1169  var computeStyles$1 = {
1170    name: 'computeStyles',
1171    enabled: true,
1172    phase: 'beforeWrite',
1173    fn: computeStyles,
1174    data: {}
1175  };
1176
1177  // and applies them to the HTMLElements such as popper and arrow
1178
1179  function applyStyles(_ref) {
1180    var state = _ref.state;
1181    Object.keys(state.elements).forEach(function (name) {
1182      var style = state.styles[name] || {};
1183      var attributes = state.attributes[name] || {};
1184      var element = state.elements[name]; // arrow is optional + virtual elements
1185
1186      if (!isHTMLElement(element) || !getNodeName(element)) {
1187        return;
1188      } // Flow doesn't support to extend this property, but it's the most
1189      // effective way to apply styles to an HTMLElement
1190      // $FlowFixMe[cannot-write]
1191
1192
1193      Object.assign(element.style, style);
1194      Object.keys(attributes).forEach(function (name) {
1195        var value = attributes[name];
1196
1197        if (value === false) {
1198          element.removeAttribute(name);
1199        } else {
1200          element.setAttribute(name, value === true ? '' : value);
1201        }
1202      });
1203    });
1204  }
1205
1206  function effect$1(_ref2) {
1207    var state = _ref2.state;
1208    var initialStyles = {
1209      popper: {
1210        position: state.options.strategy,
1211        left: '0',
1212        top: '0',
1213        margin: '0'
1214      },
1215      arrow: {
1216        position: 'absolute'
1217      },
1218      reference: {}
1219    };
1220    Object.assign(state.elements.popper.style, initialStyles.popper);
1221    state.styles = initialStyles;
1222
1223    if (state.elements.arrow) {
1224      Object.assign(state.elements.arrow.style, initialStyles.arrow);
1225    }
1226
1227    return function () {
1228      Object.keys(state.elements).forEach(function (name) {
1229        var element = state.elements[name];
1230        var attributes = state.attributes[name] || {};
1231        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
1232
1233        var style = styleProperties.reduce(function (style, property) {
1234          style[property] = '';
1235          return style;
1236        }, {}); // arrow is optional + virtual elements
1237
1238        if (!isHTMLElement(element) || !getNodeName(element)) {
1239          return;
1240        }
1241
1242        Object.assign(element.style, style);
1243        Object.keys(attributes).forEach(function (attribute) {
1244          element.removeAttribute(attribute);
1245        });
1246      });
1247    };
1248  } // eslint-disable-next-line import/no-unused-modules
1249
1250
1251  var applyStyles$1 = {
1252    name: 'applyStyles',
1253    enabled: true,
1254    phase: 'write',
1255    fn: applyStyles,
1256    effect: effect$1,
1257    requires: ['computeStyles']
1258  };
1259
1260  function distanceAndSkiddingToXY(placement, rects, offset) {
1261    var basePlacement = getBasePlacement(placement);
1262    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
1263
1264    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
1265      placement: placement
1266    })) : offset,
1267        skidding = _ref[0],
1268        distance = _ref[1];
1269
1270    skidding = skidding || 0;
1271    distance = (distance || 0) * invertDistance;
1272    return [left, right].indexOf(basePlacement) >= 0 ? {
1273      x: distance,
1274      y: skidding
1275    } : {
1276      x: skidding,
1277      y: distance
1278    };
1279  }
1280
1281  function offset(_ref2) {
1282    var state = _ref2.state,
1283        options = _ref2.options,
1284        name = _ref2.name;
1285    var _options$offset = options.offset,
1286        offset = _options$offset === void 0 ? [0, 0] : _options$offset;
1287    var data = placements.reduce(function (acc, placement) {
1288      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
1289      return acc;
1290    }, {});
1291    var _data$state$placement = data[state.placement],
1292        x = _data$state$placement.x,
1293        y = _data$state$placement.y;
1294
1295    if (state.modifiersData.popperOffsets != null) {
1296      state.modifiersData.popperOffsets.x += x;
1297      state.modifiersData.popperOffsets.y += y;
1298    }
1299
1300    state.modifiersData[name] = data;
1301  } // eslint-disable-next-line import/no-unused-modules
1302
1303
1304  var offset$1 = {
1305    name: 'offset',
1306    enabled: true,
1307    phase: 'main',
1308    requires: ['popperOffsets'],
1309    fn: offset
1310  };
1311
1312  var hash$1 = {
1313    left: 'right',
1314    right: 'left',
1315    bottom: 'top',
1316    top: 'bottom'
1317  };
1318  function getOppositePlacement(placement) {
1319    return placement.replace(/left|right|bottom|top/g, function (matched) {
1320      return hash$1[matched];
1321    });
1322  }
1323
1324  var hash = {
1325    start: 'end',
1326    end: 'start'
1327  };
1328  function getOppositeVariationPlacement(placement) {
1329    return placement.replace(/start|end/g, function (matched) {
1330      return hash[matched];
1331    });
1332  }
1333
1334  function computeAutoPlacement(state, options) {
1335    if (options === void 0) {
1336      options = {};
1337    }
1338
1339    var _options = options,
1340        placement = _options.placement,
1341        boundary = _options.boundary,
1342        rootBoundary = _options.rootBoundary,
1343        padding = _options.padding,
1344        flipVariations = _options.flipVariations,
1345        _options$allowedAutoP = _options.allowedAutoPlacements,
1346        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
1347    var variation = getVariation(placement);
1348    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
1349      return getVariation(placement) === variation;
1350    }) : basePlacements;
1351    var allowedPlacements = placements$1.filter(function (placement) {
1352      return allowedAutoPlacements.indexOf(placement) >= 0;
1353    });
1354
1355    if (allowedPlacements.length === 0) {
1356      allowedPlacements = placements$1;
1357    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
1358
1359
1360    var overflows = allowedPlacements.reduce(function (acc, placement) {
1361      acc[placement] = detectOverflow(state, {
1362        placement: placement,
1363        boundary: boundary,
1364        rootBoundary: rootBoundary,
1365        padding: padding
1366      })[getBasePlacement(placement)];
1367      return acc;
1368    }, {});
1369    return Object.keys(overflows).sort(function (a, b) {
1370      return overflows[a] - overflows[b];
1371    });
1372  }
1373
1374  function getExpandedFallbackPlacements(placement) {
1375    if (getBasePlacement(placement) === auto) {
1376      return [];
1377    }
1378
1379    var oppositePlacement = getOppositePlacement(placement);
1380    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
1381  }
1382
1383  function flip(_ref) {
1384    var state = _ref.state,
1385        options = _ref.options,
1386        name = _ref.name;
1387
1388    if (state.modifiersData[name]._skip) {
1389      return;
1390    }
1391
1392    var _options$mainAxis = options.mainAxis,
1393        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
1394        _options$altAxis = options.altAxis,
1395        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
1396        specifiedFallbackPlacements = options.fallbackPlacements,
1397        padding = options.padding,
1398        boundary = options.boundary,
1399        rootBoundary = options.rootBoundary,
1400        altBoundary = options.altBoundary,
1401        _options$flipVariatio = options.flipVariations,
1402        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
1403        allowedAutoPlacements = options.allowedAutoPlacements;
1404    var preferredPlacement = state.options.placement;
1405    var basePlacement = getBasePlacement(preferredPlacement);
1406    var isBasePlacement = basePlacement === preferredPlacement;
1407    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
1408    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
1409      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
1410        placement: placement,
1411        boundary: boundary,
1412        rootBoundary: rootBoundary,
1413        padding: padding,
1414        flipVariations: flipVariations,
1415        allowedAutoPlacements: allowedAutoPlacements
1416      }) : placement);
1417    }, []);
1418    var referenceRect = state.rects.reference;
1419    var popperRect = state.rects.popper;
1420    var checksMap = new Map();
1421    var makeFallbackChecks = true;
1422    var firstFittingPlacement = placements[0];
1423
1424    for (var i = 0; i < placements.length; i++) {
1425      var placement = placements[i];
1426
1427      var _basePlacement = getBasePlacement(placement);
1428
1429      var isStartVariation = getVariation(placement) === start;
1430      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
1431      var len = isVertical ? 'width' : 'height';
1432      var overflow = detectOverflow(state, {
1433        placement: placement,
1434        boundary: boundary,
1435        rootBoundary: rootBoundary,
1436        altBoundary: altBoundary,
1437        padding: padding
1438      });
1439      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
1440
1441      if (referenceRect[len] > popperRect[len]) {
1442        mainVariationSide = getOppositePlacement(mainVariationSide);
1443      }
1444
1445      var altVariationSide = getOppositePlacement(mainVariationSide);
1446      var checks = [];
1447
1448      if (checkMainAxis) {
1449        checks.push(overflow[_basePlacement] <= 0);
1450      }
1451
1452      if (checkAltAxis) {
1453        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
1454      }
1455
1456      if (checks.every(function (check) {
1457        return check;
1458      })) {
1459        firstFittingPlacement = placement;
1460        makeFallbackChecks = false;
1461        break;
1462      }
1463
1464      checksMap.set(placement, checks);
1465    }
1466
1467    if (makeFallbackChecks) {
1468      // `2` may be desired in some cases – research later
1469      var numberOfChecks = flipVariations ? 3 : 1;
1470
1471      var _loop = function _loop(_i) {
1472        var fittingPlacement = placements.find(function (placement) {
1473          var checks = checksMap.get(placement);
1474
1475          if (checks) {
1476            return checks.slice(0, _i).every(function (check) {
1477              return check;
1478            });
1479          }
1480        });
1481
1482        if (fittingPlacement) {
1483          firstFittingPlacement = fittingPlacement;
1484          return "break";
1485        }
1486      };
1487
1488      for (var _i = numberOfChecks; _i > 0; _i--) {
1489        var _ret = _loop(_i);
1490
1491        if (_ret === "break") break;
1492      }
1493    }
1494
1495    if (state.placement !== firstFittingPlacement) {
1496      state.modifiersData[name]._skip = true;
1497      state.placement = firstFittingPlacement;
1498      state.reset = true;
1499    }
1500  } // eslint-disable-next-line import/no-unused-modules
1501
1502
1503  var flip$1 = {
1504    name: 'flip',
1505    enabled: true,
1506    phase: 'main',
1507    fn: flip,
1508    requiresIfExists: ['offset'],
1509    data: {
1510      _skip: false
1511    }
1512  };
1513
1514  function getAltAxis(axis) {
1515    return axis === 'x' ? 'y' : 'x';
1516  }
1517
1518  function within(min$1, value, max$1) {
1519    return max(min$1, min(value, max$1));
1520  }
1521  function withinMaxClamp(min, value, max) {
1522    var v = within(min, value, max);
1523    return v > max ? max : v;
1524  }
1525
1526  function preventOverflow(_ref) {
1527    var state = _ref.state,
1528        options = _ref.options,
1529        name = _ref.name;
1530    var _options$mainAxis = options.mainAxis,
1531        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
1532        _options$altAxis = options.altAxis,
1533        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
1534        boundary = options.boundary,
1535        rootBoundary = options.rootBoundary,
1536        altBoundary = options.altBoundary,
1537        padding = options.padding,
1538        _options$tether = options.tether,
1539        tether = _options$tether === void 0 ? true : _options$tether,
1540        _options$tetherOffset = options.tetherOffset,
1541        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
1542    var overflow = detectOverflow(state, {
1543      boundary: boundary,
1544      rootBoundary: rootBoundary,
1545      padding: padding,
1546      altBoundary: altBoundary
1547    });
1548    var basePlacement = getBasePlacement(state.placement);
1549    var variation = getVariation(state.placement);
1550    var isBasePlacement = !variation;
1551    var mainAxis = getMainAxisFromPlacement(basePlacement);
1552    var altAxis = getAltAxis(mainAxis);
1553    var popperOffsets = state.modifiersData.popperOffsets;
1554    var referenceRect = state.rects.reference;
1555    var popperRect = state.rects.popper;
1556    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
1557      placement: state.placement
1558    })) : tetherOffset;
1559    var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
1560      mainAxis: tetherOffsetValue,
1561      altAxis: tetherOffsetValue
1562    } : Object.assign({
1563      mainAxis: 0,
1564      altAxis: 0
1565    }, tetherOffsetValue);
1566    var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
1567    var data = {
1568      x: 0,
1569      y: 0
1570    };
1571
1572    if (!popperOffsets) {
1573      return;
1574    }
1575
1576    if (checkMainAxis) {
1577      var _offsetModifierState$;
1578
1579      var mainSide = mainAxis === 'y' ? top : left;
1580      var altSide = mainAxis === 'y' ? bottom : right;
1581      var len = mainAxis === 'y' ? 'height' : 'width';
1582      var offset = popperOffsets[mainAxis];
1583      var min$1 = offset + overflow[mainSide];
1584      var max$1 = offset - overflow[altSide];
1585      var additive = tether ? -popperRect[len] / 2 : 0;
1586      var minLen = variation === start ? referenceRect[len] : popperRect[len];
1587      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
1588      // outside the reference bounds
1589
1590      var arrowElement = state.elements.arrow;
1591      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
1592        width: 0,
1593        height: 0
1594      };
1595      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
1596      var arrowPaddingMin = arrowPaddingObject[mainSide];
1597      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
1598      // to include its full size in the calculation. If the reference is small
1599      // and near the edge of a boundary, the popper can overflow even if the
1600      // reference is not overflowing as well (e.g. virtual elements with no
1601      // width or height)
1602
1603      var arrowLen = within(0, referenceRect[len], arrowRect[len]);
1604      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
1605      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
1606      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
1607      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
1608      var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
1609      var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
1610      var tetherMax = offset + maxOffset - offsetModifierValue;
1611      var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
1612      popperOffsets[mainAxis] = preventedOffset;
1613      data[mainAxis] = preventedOffset - offset;
1614    }
1615
1616    if (checkAltAxis) {
1617      var _offsetModifierState$2;
1618
1619      var _mainSide = mainAxis === 'x' ? top : left;
1620
1621      var _altSide = mainAxis === 'x' ? bottom : right;
1622
1623      var _offset = popperOffsets[altAxis];
1624
1625      var _len = altAxis === 'y' ? 'height' : 'width';
1626
1627      var _min = _offset + overflow[_mainSide];
1628
1629      var _max = _offset - overflow[_altSide];
1630
1631      var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
1632
1633      var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
1634
1635      var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
1636
1637      var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
1638
1639      var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
1640
1641      popperOffsets[altAxis] = _preventedOffset;
1642      data[altAxis] = _preventedOffset - _offset;
1643    }
1644
1645    state.modifiersData[name] = data;
1646  } // eslint-disable-next-line import/no-unused-modules
1647
1648
1649  var preventOverflow$1 = {
1650    name: 'preventOverflow',
1651    enabled: true,
1652    phase: 'main',
1653    fn: preventOverflow,
1654    requiresIfExists: ['offset']
1655  };
1656
1657  var toPaddingObject = function toPaddingObject(padding, state) {
1658    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
1659      placement: state.placement
1660    })) : padding;
1661    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
1662  };
1663
1664  function arrow(_ref) {
1665    var _state$modifiersData$;
1666
1667    var state = _ref.state,
1668        name = _ref.name,
1669        options = _ref.options;
1670    var arrowElement = state.elements.arrow;
1671    var popperOffsets = state.modifiersData.popperOffsets;
1672    var basePlacement = getBasePlacement(state.placement);
1673    var axis = getMainAxisFromPlacement(basePlacement);
1674    var isVertical = [left, right].indexOf(basePlacement) >= 0;
1675    var len = isVertical ? 'height' : 'width';
1676
1677    if (!arrowElement || !popperOffsets) {
1678      return;
1679    }
1680
1681    var paddingObject = toPaddingObject(options.padding, state);
1682    var arrowRect = getLayoutRect(arrowElement);
1683    var minProp = axis === 'y' ? top : left;
1684    var maxProp = axis === 'y' ? bottom : right;
1685    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
1686    var startDiff = popperOffsets[axis] - state.rects.reference[axis];
1687    var arrowOffsetParent = getOffsetParent(arrowElement);
1688    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
1689    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
1690    // outside of the popper bounds
1691
1692    var min = paddingObject[minProp];
1693    var max = clientSize - arrowRect[len] - paddingObject[maxProp];
1694    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
1695    var offset = within(min, center, max); // Prevents breaking syntax highlighting...
1696
1697    var axisProp = axis;
1698    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
1699  }
1700
1701  function effect(_ref2) {
1702    var state = _ref2.state,
1703        options = _ref2.options;
1704    var _options$element = options.element,
1705        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
1706
1707    if (arrowElement == null) {
1708      return;
1709    } // CSS selector
1710
1711
1712    if (typeof arrowElement === 'string') {
1713      arrowElement = state.elements.popper.querySelector(arrowElement);
1714
1715      if (!arrowElement) {
1716        return;
1717      }
1718    }
1719
1720    if (!contains(state.elements.popper, arrowElement)) {
1721      return;
1722    }
1723
1724    state.elements.arrow = arrowElement;
1725  } // eslint-disable-next-line import/no-unused-modules
1726
1727
1728  var arrow$1 = {
1729    name: 'arrow',
1730    enabled: true,
1731    phase: 'main',
1732    fn: arrow,
1733    effect: effect,
1734    requires: ['popperOffsets'],
1735    requiresIfExists: ['preventOverflow']
1736  };
1737
1738  function getSideOffsets(overflow, rect, preventedOffsets) {
1739    if (preventedOffsets === void 0) {
1740      preventedOffsets = {
1741        x: 0,
1742        y: 0
1743      };
1744    }
1745
1746    return {
1747      top: overflow.top - rect.height - preventedOffsets.y,
1748      right: overflow.right - rect.width + preventedOffsets.x,
1749      bottom: overflow.bottom - rect.height + preventedOffsets.y,
1750      left: overflow.left - rect.width - preventedOffsets.x
1751    };
1752  }
1753
1754  function isAnySideFullyClipped(overflow) {
1755    return [top, right, bottom, left].some(function (side) {
1756      return overflow[side] >= 0;
1757    });
1758  }
1759
1760  function hide(_ref) {
1761    var state = _ref.state,
1762        name = _ref.name;
1763    var referenceRect = state.rects.reference;
1764    var popperRect = state.rects.popper;
1765    var preventedOffsets = state.modifiersData.preventOverflow;
1766    var referenceOverflow = detectOverflow(state, {
1767      elementContext: 'reference'
1768    });
1769    var popperAltOverflow = detectOverflow(state, {
1770      altBoundary: true
1771    });
1772    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
1773    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
1774    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
1775    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
1776    state.modifiersData[name] = {
1777      referenceClippingOffsets: referenceClippingOffsets,
1778      popperEscapeOffsets: popperEscapeOffsets,
1779      isReferenceHidden: isReferenceHidden,
1780      hasPopperEscaped: hasPopperEscaped
1781    };
1782    state.attributes.popper = Object.assign({}, state.attributes.popper, {
1783      'data-popper-reference-hidden': isReferenceHidden,
1784      'data-popper-escaped': hasPopperEscaped
1785    });
1786  } // eslint-disable-next-line import/no-unused-modules
1787
1788
1789  var hide$1 = {
1790    name: 'hide',
1791    enabled: true,
1792    phase: 'main',
1793    requiresIfExists: ['preventOverflow'],
1794    fn: hide
1795  };
1796
1797  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
1798  var createPopper$1 = /*#__PURE__*/popperGenerator({
1799    defaultModifiers: defaultModifiers$1
1800  }); // eslint-disable-next-line import/no-unused-modules
1801
1802  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
1803  var createPopper = /*#__PURE__*/popperGenerator({
1804    defaultModifiers: defaultModifiers
1805  }); // eslint-disable-next-line import/no-unused-modules
1806
1807  exports.applyStyles = applyStyles$1;
1808  exports.arrow = arrow$1;
1809  exports.computeStyles = computeStyles$1;
1810  exports.createPopper = createPopper;
1811  exports.createPopperLite = createPopper$1;
1812  exports.defaultModifiers = defaultModifiers;
1813  exports.detectOverflow = detectOverflow;
1814  exports.eventListeners = eventListeners;
1815  exports.flip = flip$1;
1816  exports.hide = hide$1;
1817  exports.offset = offset$1;
1818  exports.popperGenerator = popperGenerator;
1819  exports.popperOffsets = popperOffsets$1;
1820  exports.preventOverflow = preventOverflow$1;
1821
1822  Object.defineProperty(exports, '__esModule', { value: true });
1823
1824})));
1825//# sourceMappingURL=popper.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.