summaryrefslogtreecommitdiffstats
path: root/npm_assets/node_modules/popper.js/src/utils
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-02-03 19:17:00 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2021-02-03 19:17:00 -0500
commit3a0d66f07b112b6d2bdc2b57bbf717a89a351ce6 (patch)
treea7cf56282e54f05785243bc1e903d6594f2c06ba /npm_assets/node_modules/popper.js/src/utils
parent787b97a4cb24330b36f11297c6d3a7a473a907d0 (diff)
New upstream version 8.1.2.upstream/8.1.2
Diffstat (limited to 'npm_assets/node_modules/popper.js/src/utils')
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/clockwise.js22
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/computeAutoPlacement.js74
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/debounce.js54
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/find.js18
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/findCommonOffsetParent.js52
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/findIndex.js21
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getBordersSize.js19
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getBoundaries.js81
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getBoundingClientRect.js66
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getClientRect.js14
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getFixedPositionOffsetParent.js22
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getOffsetParent.js40
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getOffsetRect.js32
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getOffsetRectRelativeToArbitraryNode.js60
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getOppositePlacement.js11
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getOppositeVariation.js15
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getOuterSizes.js18
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getParentNode.js13
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getPopperOffsets.js46
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getReferenceNode.js10
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getReferenceOffsets.js19
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getRoot.js14
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getRoundedOffsets.js50
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getScroll.js20
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getScrollParent.js32
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getStyleComputedProperty.js16
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getSupportedPropertyName.js20
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js22
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getWindow.js9
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/getWindowSizes.js27
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/includeScroll.js21
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/index.js100
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/isBrowser.js1
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/isFixed.js25
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/isFunction.js14
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/isIE.js21
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/isModifierEnabled.js11
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/isModifierRequired.js38
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/isNumeric.js10
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/isOffsetContainer.js11
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/removeEventListeners.js24
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/runModifiers.js37
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/setAttributes.js18
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/setStyles.js24
-rw-r--r--npm_assets/node_modules/popper.js/src/utils/setupEventListeners.js48
45 files changed, 1320 insertions, 0 deletions
diff --git a/npm_assets/node_modules/popper.js/src/utils/clockwise.js b/npm_assets/node_modules/popper.js/src/utils/clockwise.js
new file mode 100644
index 0000000..0ff93aa
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/clockwise.js
@@ -0,0 +1,22 @@
+import placements from '../methods/placements';
+
+// Get rid of `auto` `auto-start` and `auto-end`
+const validPlacements = placements.slice(3);
+
+/**
+ * Given an initial placement, returns all the subsequent placements
+ * clockwise (or counter-clockwise).
+ *
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement - A valid placement (it accepts variations)
+ * @argument {Boolean} counter - Set to true to walk the placements counterclockwise
+ * @returns {Array} placements including their variations
+ */
+export default function clockwise(placement, counter = false) {
+ const index = validPlacements.indexOf(placement);
+ const arr = validPlacements
+ .slice(index + 1)
+ .concat(validPlacements.slice(0, index));
+ return counter ? arr.reverse() : arr;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/computeAutoPlacement.js b/npm_assets/node_modules/popper.js/src/utils/computeAutoPlacement.js
new file mode 100644
index 0000000..7fcad2a
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/computeAutoPlacement.js
@@ -0,0 +1,74 @@
+import getBoundaries from '../utils/getBoundaries';
+
+function getArea({ width, height }) {
+ return width * height;
+}
+
+/**
+ * Utility used to transform the `auto` placement to the placement with more
+ * available space.
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} data - The data object generated by update method
+ * @argument {Object} options - Modifiers configuration and options
+ * @returns {Object} The data object, properly modified
+ */
+export default function computeAutoPlacement(
+ placement,
+ refRect,
+ popper,
+ reference,
+ boundariesElement,
+ padding = 0
+) {
+ if (placement.indexOf('auto') === -1) {
+ return placement;
+ }
+
+ const boundaries = getBoundaries(
+ popper,
+ reference,
+ padding,
+ boundariesElement
+ );
+
+ const rects = {
+ top: {
+ width: boundaries.width,
+ height: refRect.top - boundaries.top,
+ },
+ right: {
+ width: boundaries.right - refRect.right,
+ height: boundaries.height,
+ },
+ bottom: {
+ width: boundaries.width,
+ height: boundaries.bottom - refRect.bottom,
+ },
+ left: {
+ width: refRect.left - boundaries.left,
+ height: boundaries.height,
+ },
+ };
+
+ const sortedAreas = Object.keys(rects)
+ .map(key => ({
+ key,
+ ...rects[key],
+ area: getArea(rects[key]),
+ }))
+ .sort((a, b) => b.area - a.area);
+
+ const filteredAreas = sortedAreas.filter(
+ ({ width, height }) =>
+ width >= popper.clientWidth && height >= popper.clientHeight
+ );
+
+ const computedPlacement = filteredAreas.length > 0
+ ? filteredAreas[0].key
+ : sortedAreas[0].key;
+
+ const variation = placement.split('-')[1];
+
+ return computedPlacement + (variation ? `-${variation}` : '');
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/debounce.js b/npm_assets/node_modules/popper.js/src/utils/debounce.js
new file mode 100644
index 0000000..0b9d8d3
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/debounce.js
@@ -0,0 +1,54 @@
+import isBrowser from './isBrowser';
+
+const timeoutDuration = (function(){
+ const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
+ for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {
+ if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
+ return 1;
+ }
+ }
+ return 0;
+}());
+
+export function microtaskDebounce(fn) {
+ let called = false
+ return () => {
+ if (called) {
+ return
+ }
+ called = true
+ window.Promise.resolve().then(() => {
+ called = false
+ fn()
+ })
+ }
+}
+
+export function taskDebounce(fn) {
+ let scheduled = false;
+ return () => {
+ if (!scheduled) {
+ scheduled = true;
+ setTimeout(() => {
+ scheduled = false;
+ fn();
+ }, timeoutDuration);
+ }
+ };
+}
+
+const supportsMicroTasks = isBrowser && window.Promise
+
+
+/**
+* Create a debounced version of a method, that's asynchronously deferred
+* but called in the minimum time possible.
+*
+* @method
+* @memberof Popper.Utils
+* @argument {Function} fn
+* @returns {Function}
+*/
+export default (supportsMicroTasks
+ ? microtaskDebounce
+ : taskDebounce);
diff --git a/npm_assets/node_modules/popper.js/src/utils/find.js b/npm_assets/node_modules/popper.js/src/utils/find.js
new file mode 100644
index 0000000..1ce9949
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/find.js
@@ -0,0 +1,18 @@
+/**
+ * Mimics the `find` method of Array
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+export default function find(arr, check) {
+ // use native find if supported
+ if (Array.prototype.find) {
+ return arr.find(check);
+ }
+
+ // use `filter` to obtain the same behavior of `find`
+ return arr.filter(check)[0];
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/findCommonOffsetParent.js b/npm_assets/node_modules/popper.js/src/utils/findCommonOffsetParent.js
new file mode 100644
index 0000000..ca905fa
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/findCommonOffsetParent.js
@@ -0,0 +1,52 @@
+import isOffsetContainer from './isOffsetContainer';
+import getRoot from './getRoot';
+import getOffsetParent from './getOffsetParent';
+
+/**
+ * Finds the offset parent common to the two provided nodes
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element1
+ * @argument {Element} element2
+ * @returns {Element} common offset parent
+ */
+export default function findCommonOffsetParent(element1, element2) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
+ return document.documentElement;
+ }
+
+ // Here we make sure to give as "start" the element that comes first in the DOM
+ const order =
+ element1.compareDocumentPosition(element2) &
+ Node.DOCUMENT_POSITION_FOLLOWING;
+ const start = order ? element1 : element2;
+ const end = order ? element2 : element1;
+
+ // Get common ancestor container
+ const range = document.createRange();
+ range.setStart(start, 0);
+ range.setEnd(end, 0);
+ const { commonAncestorContainer } = range;
+
+ // Both nodes are inside #document
+ if (
+ (element1 !== commonAncestorContainer &&
+ element2 !== commonAncestorContainer) ||
+ start.contains(end)
+ ) {
+ if (isOffsetContainer(commonAncestorContainer)) {
+ return commonAncestorContainer;
+ }
+
+ return getOffsetParent(commonAncestorContainer);
+ }
+
+ // one of the nodes is inside shadowDOM, find which one
+ const element1root = getRoot(element1);
+ if (element1root.host) {
+ return findCommonOffsetParent(element1root.host, element2);
+ } else {
+ return findCommonOffsetParent(element1, getRoot(element2).host);
+ }
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/findIndex.js b/npm_assets/node_modules/popper.js/src/utils/findIndex.js
new file mode 100644
index 0000000..ebadfcc
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/findIndex.js
@@ -0,0 +1,21 @@
+import find from './find';
+
+/**
+ * Return the index of the matching object
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Array} arr
+ * @argument prop
+ * @argument value
+ * @returns index or -1
+ */
+export default function findIndex(arr, prop, value) {
+ // use native findIndex if supported
+ if (Array.prototype.findIndex) {
+ return arr.findIndex(cur => cur[prop] === value);
+ }
+
+ // use `find` + `indexOf` if `findIndex` isn't supported
+ const match = find(arr, obj => obj[prop] === value);
+ return arr.indexOf(match);
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getBordersSize.js b/npm_assets/node_modules/popper.js/src/utils/getBordersSize.js
new file mode 100644
index 0000000..1fe551d
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getBordersSize.js
@@ -0,0 +1,19 @@
+/*
+ * Helper to detect borders of a given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {CSSStyleDeclaration} styles
+ * Result of `getStyleComputedProperty` on the given element
+ * @param {String} axis - `x` or `y`
+ * @return {number} borders - The borders size of the given axis
+ */
+
+export default function getBordersSize(styles, axis) {
+ const sideA = axis === 'x' ? 'Left' : 'Top';
+ const sideB = sideA === 'Left' ? 'Right' : 'Bottom';
+
+ return (
+ parseFloat(styles[`border${sideA}Width`]) +
+ parseFloat(styles[`border${sideB}Width`])
+ );
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getBoundaries.js b/npm_assets/node_modules/popper.js/src/utils/getBoundaries.js
new file mode 100644
index 0000000..45cb54a
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getBoundaries.js
@@ -0,0 +1,81 @@
+import getScrollParent from './getScrollParent';
+import getParentNode from './getParentNode';
+import getReferenceNode from './getReferenceNode';
+import findCommonOffsetParent from './findCommonOffsetParent';
+import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';
+import getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';
+import getWindowSizes from './getWindowSizes';
+import isFixed from './isFixed';
+import getFixedPositionOffsetParent from './getFixedPositionOffsetParent';
+
+/**
+ * Computed the boundaries limits and return them
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} popper
+ * @param {HTMLElement} reference
+ * @param {number} padding
+ * @param {HTMLElement} boundariesElement - Element used to define the boundaries
+ * @param {Boolean} fixedPosition - Is in fixed position mode
+ * @returns {Object} Coordinates of the boundaries
+ */
+export default function getBoundaries(
+ popper,
+ reference,
+ padding,
+ boundariesElement,
+ fixedPosition = false
+) {
+ // NOTE: 1 DOM access here
+
+ let boundaries = { top: 0, left: 0 };
+ const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));
+
+ // Handle viewport case
+ if (boundariesElement === 'viewport' ) {
+ boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
+ }
+
+ else {
+ // Handle other cases based on DOM element used as boundaries
+ let boundariesNode;
+ if (boundariesElement === 'scrollParent') {
+ boundariesNode = getScrollParent(getParentNode(reference));
+ if (boundariesNode.nodeName === 'BODY') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ }
+ } else if (boundariesElement === 'window') {
+ boundariesNode = popper.ownerDocument.documentElement;
+ } else {
+ boundariesNode = boundariesElement;
+ }
+
+ const offsets = getOffsetRectRelativeToArbitraryNode(
+ boundariesNode,
+ offsetParent,
+ fixedPosition
+ );
+
+ // In case of HTML, we need a different computation
+ if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
+ const { height, width } = getWindowSizes(popper.ownerDocument);
+ boundaries.top += offsets.top - offsets.marginTop;
+ boundaries.bottom = height + offsets.top;
+ boundaries.left += offsets.left - offsets.marginLeft;
+ boundaries.right = width + offsets.left;
+ } else {
+ // for all the other DOM elements, this one is good
+ boundaries = offsets;
+ }
+ }
+
+ // Add paddings
+ padding = padding || 0;
+ const isPaddingNumber = typeof padding === 'number';
+ boundaries.left += isPaddingNumber ? padding : padding.left || 0;
+ boundaries.top += isPaddingNumber ? padding : padding.top || 0;
+ boundaries.right -= isPaddingNumber ? padding : padding.right || 0;
+ boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;
+
+ return boundaries;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getBoundingClientRect.js b/npm_assets/node_modules/popper.js/src/utils/getBoundingClientRect.js
new file mode 100644
index 0000000..f9e0543
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getBoundingClientRect.js
@@ -0,0 +1,66 @@
+import getStyleComputedProperty from './getStyleComputedProperty';
+import getBordersSize from './getBordersSize';
+import getWindowSizes from './getWindowSizes';
+import getScroll from './getScroll';
+import getClientRect from './getClientRect';
+import isIE from './isIE';
+
+/**
+ * Get bounding client rect of given element
+ * @method
+ * @memberof Popper.Utils
+ * @param {HTMLElement} element
+ * @return {Object} client rect
+ */
+export default function getBoundingClientRect(element) {
+ let rect = {};
+
+ // IE10 10 FIX: Please, don't ask, the element isn't
+ // considered in DOM in some circumstances...
+ // This isn't reproducible in IE10 compatibility mode of IE11
+ try {
+ if (isIE(10)) {
+ rect = element.getBoundingClientRect();
+ const scrollTop = getScroll(element, 'top');
+ const scrollLeft = getScroll(element, 'left');
+ rect.top += scrollTop;
+ rect.left += scrollLeft;
+ rect.bottom += scrollTop;
+ rect.right += scrollLeft;
+ }
+ else {
+ rect = element.getBoundingClientRect();
+ }
+ }
+ catch(e){}
+
+ const result = {
+ left: rect.left,
+ top: rect.top,
+ width: rect.right - rect.left,
+ height: rect.bottom - rect.top,
+ };
+
+ // subtract scrollbar size from sizes
+ const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};
+ const width =
+ sizes.width || element.clientWidth || result.width;
+ const height =
+ sizes.height || element.clientHeight || result.height;
+
+ let horizScrollbar = element.offsetWidth - width;
+ let vertScrollbar = element.offsetHeight - height;
+
+ // if an hypothetical scrollbar is detected, we must be sure it's not a `border`
+ // we make this check conditional for performance reasons
+ if (horizScrollbar || vertScrollbar) {
+ const styles = getStyleComputedProperty(element);
+ horizScrollbar -= getBordersSize(styles, 'x');
+ vertScrollbar -= getBordersSize(styles, 'y');
+
+ result.width -= horizScrollbar;
+ result.height -= vertScrollbar;
+ }
+
+ return getClientRect(result);
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getClientRect.js b/npm_assets/node_modules/popper.js/src/utils/getClientRect.js
new file mode 100644
index 0000000..4f659d3
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getClientRect.js
@@ -0,0 +1,14 @@
+/**
+ * Given element offsets, generate an output similar to getBoundingClientRect
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Object} offsets
+ * @returns {Object} ClientRect like output
+ */
+export default function getClientRect(offsets) {
+ return {
+ ...offsets,
+ right: offsets.left + offsets.width,
+ bottom: offsets.top + offsets.height,
+ };
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getFixedPositionOffsetParent.js b/npm_assets/node_modules/popper.js/src/utils/getFixedPositionOffsetParent.js
new file mode 100644
index 0000000..ae6de16
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getFixedPositionOffsetParent.js
@@ -0,0 +1,22 @@
+import getStyleComputedProperty from './getStyleComputedProperty';
+import isIE from './isIE';
+/**
+ * Finds the first parent of an element that has a transformed property defined
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} first transformed parent or documentElement
+ */
+
+export default function getFixedPositionOffsetParent(element) {
+ // This check is needed to avoid errors in case one of the elements isn't defined for any reason
+ if (!element || !element.parentElement || isIE()) {
+ return document.documentElement;
+ }
+ let el = element.parentElement;
+ while (el && getStyleComputedProperty(el, 'transform') === 'none') {
+ el = el.parentElement;
+ }
+ return el || document.documentElement;
+
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getOffsetParent.js b/npm_assets/node_modules/popper.js/src/utils/getOffsetParent.js
new file mode 100644
index 0000000..875aacd
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getOffsetParent.js
@@ -0,0 +1,40 @@
+import getStyleComputedProperty from './getStyleComputedProperty';
+import isIE from './isIE';
+/**
+ * Returns the offset parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} offset parent
+ */
+export default function getOffsetParent(element) {
+ if (!element) {
+ return document.documentElement;
+ }
+
+ const noOffsetParent = isIE(10) ? document.body : null;
+
+ // NOTE: 1 DOM access here
+ let offsetParent = element.offsetParent || null;
+ // Skip hidden elements which don't have an offsetParent
+ while (offsetParent === noOffsetParent && element.nextElementSibling) {
+ offsetParent = (element = element.nextElementSibling).offsetParent;
+ }
+
+ const nodeName = offsetParent && offsetParent.nodeName;
+
+ if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
+ return element ? element.ownerDocument.documentElement : document.documentElement;
+ }
+
+ // .offsetParent will return the closest TH, TD or TABLE in case
+ // no offsetParent is present, I hate this job...
+ if (
+ ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&
+ getStyleComputedProperty(offsetParent, 'position') === 'static'
+ ) {
+ return getOffsetParent(offsetParent);
+ }
+
+ return offsetParent;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getOffsetRect.js b/npm_assets/node_modules/popper.js/src/utils/getOffsetRect.js
new file mode 100644
index 0000000..c14051b
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getOffsetRect.js
@@ -0,0 +1,32 @@
+import getWindowSizes from './getWindowSizes';
+import getClientRect from './getClientRect';
+
+/**
+ * Get the position of the given element, relative to its offset parent
+ * @method
+ * @memberof Popper.Utils
+ * @param {Element} element
+ * @return {Object} position - Coordinates of the element and its `scrollTop`
+ */
+export default function getOffsetRect(element) {
+ let elementRect;
+ if (element.nodeName === 'HTML') {
+ const { width, height } = getWindowSizes(element.ownerDocument);
+ elementRect = {
+ width,
+ height,
+ left: 0,
+ top: 0,
+ };
+ } else {
+ elementRect = {
+ width: element.offsetWidth,
+ height: element.offsetHeight,
+ left: element.offsetLeft,
+ top: element.offsetTop,
+ };
+ }
+
+ // position
+ return getClientRect(elementRect);
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getOffsetRectRelativeToArbitraryNode.js b/npm_assets/node_modules/popper.js/src/utils/getOffsetRectRelativeToArbitraryNode.js
new file mode 100644
index 0000000..362b5b3
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getOffsetRectRelativeToArbitraryNode.js
@@ -0,0 +1,60 @@
+import getStyleComputedProperty from './getStyleComputedProperty';
+import includeScroll from './includeScroll';
+import getScrollParent from './getScrollParent';
+import getBoundingClientRect from './getBoundingClientRect';
+import runIsIE from './isIE';
+import getClientRect from './getClientRect';
+
+export default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {
+ const isIE10 = runIsIE(10);
+ const isHTML = parent.nodeName === 'HTML';
+ const childrenRect = getBoundingClientRect(children);
+ const parentRect = getBoundingClientRect(parent);
+ const scrollParent = getScrollParent(children);
+
+ const styles = getStyleComputedProperty(parent);
+ const borderTopWidth = parseFloat(styles.borderTopWidth);
+ const borderLeftWidth = parseFloat(styles.borderLeftWidth);
+
+ // In cases where the parent is fixed, we must ignore negative scroll in offset calc
+ if(fixedPosition && isHTML) {
+ parentRect.top = Math.max(parentRect.top, 0);
+ parentRect.left = Math.max(parentRect.left, 0);
+ }
+ let offsets = getClientRect({
+ top: childrenRect.top - parentRect.top - borderTopWidth,
+ left: childrenRect.left - parentRect.left - borderLeftWidth,
+ width: childrenRect.width,
+ height: childrenRect.height,
+ });
+ offsets.marginTop = 0;
+ offsets.marginLeft = 0;
+
+ // Subtract margins of documentElement in case it's being used as parent
+ // we do this only on HTML because it's the only element that behaves
+ // differently when margins are applied to it. The margins are included in
+ // the box of the documentElement, in the other cases not.
+ if (!isIE10 && isHTML) {
+ const marginTop = parseFloat(styles.marginTop);
+ const marginLeft = parseFloat(styles.marginLeft);
+
+ offsets.top -= borderTopWidth - marginTop;
+ offsets.bottom -= borderTopWidth - marginTop;
+ offsets.left -= borderLeftWidth - marginLeft;
+ offsets.right -= borderLeftWidth - marginLeft;
+
+ // Attach marginTop and marginLeft because in some circumstances we may need them
+ offsets.marginTop = marginTop;
+ offsets.marginLeft = marginLeft;
+ }
+
+ if (
+ isIE10 && !fixedPosition
+ ? parent.contains(scrollParent)
+ : parent === scrollParent && scrollParent.nodeName !== 'BODY'
+ ) {
+ offsets = includeScroll(offsets, parent);
+ }
+
+ return offsets;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getOppositePlacement.js b/npm_assets/node_modules/popper.js/src/utils/getOppositePlacement.js
new file mode 100644
index 0000000..26a144d
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getOppositePlacement.js
@@ -0,0 +1,11 @@
+/**
+ * Get the opposite placement of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement
+ * @returns {String} flipped placement
+ */
+export default function getOppositePlacement(placement) {
+ const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
+ return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getOppositeVariation.js b/npm_assets/node_modules/popper.js/src/utils/getOppositeVariation.js
new file mode 100644
index 0000000..405cbd6
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getOppositeVariation.js
@@ -0,0 +1,15 @@
+/**
+ * Get the opposite placement variation of the given one
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} placement variation
+ * @returns {String} flipped placement variation
+ */
+export default function getOppositeVariation(variation) {
+ if (variation === 'end') {
+ return 'start';
+ } else if (variation === 'start') {
+ return 'end';
+ }
+ return variation;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getOuterSizes.js b/npm_assets/node_modules/popper.js/src/utils/getOuterSizes.js
new file mode 100644
index 0000000..cf55c3e
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getOuterSizes.js
@@ -0,0 +1,18 @@
+/**
+ * Get the outer sizes of the given element (offset size + margins)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Object} object containing width and height properties
+ */
+export default function getOuterSizes(element) {
+ const window = element.ownerDocument.defaultView;
+ const styles = window.getComputedStyle(element);
+ const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);
+ const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);
+ const result = {
+ width: element.offsetWidth + y,
+ height: element.offsetHeight + x,
+ };
+ return result;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getParentNode.js b/npm_assets/node_modules/popper.js/src/utils/getParentNode.js
new file mode 100644
index 0000000..d90f706
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getParentNode.js
@@ -0,0 +1,13 @@
+/**
+ * Returns the parentNode or the host of the element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} parent
+ */
+export default function getParentNode(element) {
+ if (element.nodeName === 'HTML') {
+ return element;
+ }
+ return element.parentNode || element.host;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getPopperOffsets.js b/npm_assets/node_modules/popper.js/src/utils/getPopperOffsets.js
new file mode 100644
index 0000000..46d9bfb
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getPopperOffsets.js
@@ -0,0 +1,46 @@
+import getOuterSizes from './getOuterSizes';
+import getOppositePlacement from './getOppositePlacement';
+
+/**
+ * Get offsets to the popper
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} position - CSS position the Popper will get applied
+ * @param {HTMLElement} popper - the popper element
+ * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
+ * @param {String} placement - one of the valid placement options
+ * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper
+ */
+export default function getPopperOffsets(popper, referenceOffsets, placement) {
+ placement = placement.split('-')[0];
+
+ // Get popper node sizes
+ const popperRect = getOuterSizes(popper);
+
+ // Add position, width and height to our offsets object
+ const popperOffsets = {
+ width: popperRect.width,
+ height: popperRect.height,
+ };
+
+ // depending by the popper placement we have to compute its offsets slightly differently
+ const isHoriz = ['right', 'left'].indexOf(placement) !== -1;
+ const mainSide = isHoriz ? 'top' : 'left';
+ const secondarySide = isHoriz ? 'left' : 'top';
+ const measurement = isHoriz ? 'height' : 'width';
+ const secondaryMeasurement = !isHoriz ? 'height' : 'width';
+
+ popperOffsets[mainSide] =
+ referenceOffsets[mainSide] +
+ referenceOffsets[measurement] / 2 -
+ popperRect[measurement] / 2;
+ if (placement === secondarySide) {
+ popperOffsets[secondarySide] =
+ referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
+ } else {
+ popperOffsets[secondarySide] =
+ referenceOffsets[getOppositePlacement(secondarySide)];
+ }
+
+ return popperOffsets;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getReferenceNode.js b/npm_assets/node_modules/popper.js/src/utils/getReferenceNode.js
new file mode 100644
index 0000000..25f5604
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getReferenceNode.js
@@ -0,0 +1,10 @@
+/**
+ * Returns the reference node of the reference object, or the reference object itself.
+ * @method
+ * @memberof Popper.Utils
+ * @param {Element|Object} reference - the reference element (the popper will be relative to this)
+ * @returns {Element} parent
+ */
+export default function getReferenceNode(reference) {
+ return reference && reference.referenceNode ? reference.referenceNode : reference;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getReferenceOffsets.js b/npm_assets/node_modules/popper.js/src/utils/getReferenceOffsets.js
new file mode 100644
index 0000000..f1ac32f
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getReferenceOffsets.js
@@ -0,0 +1,19 @@
+import findCommonOffsetParent from './findCommonOffsetParent';
+import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';
+import getFixedPositionOffsetParent from './getFixedPositionOffsetParent';
+import getReferenceNode from './getReferenceNode';
+
+/**
+ * Get offsets to the reference element
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} state
+ * @param {Element} popper - the popper element
+ * @param {Element} reference - the reference element (the popper will be relative to this)
+ * @param {Element} fixedPosition - is in fixed position mode
+ * @returns {Object} An object containing the offsets which will be applied to the popper
+ */
+export default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {
+ const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));
+ return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getRoot.js b/npm_assets/node_modules/popper.js/src/utils/getRoot.js
new file mode 100644
index 0000000..5b60287
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getRoot.js
@@ -0,0 +1,14 @@
+/**
+ * Finds the root node (document, shadowDOM root) of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} node
+ * @returns {Element} root node
+ */
+export default function getRoot(node) {
+ if (node.parentNode !== null) {
+ return getRoot(node.parentNode);
+ }
+
+ return node;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getRoundedOffsets.js b/npm_assets/node_modules/popper.js/src/utils/getRoundedOffsets.js
new file mode 100644
index 0000000..3240dbc
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getRoundedOffsets.js
@@ -0,0 +1,50 @@
+/**
+ * @function
+ * @memberof Popper.Utils
+ * @argument {Object} data - The data object generated by `update` method
+ * @argument {Boolean} shouldRound - If the offsets should be rounded at all
+ * @returns {Object} The popper's position offsets rounded
+ *
+ * The tale of pixel-perfect positioning. It's still not 100% perfect, but as
+ * good as it can be within reason.
+ * Discussion here: https://github.com/FezVrasta/popper.js/pull/715
+ *
+ * Low DPI screens cause a popper to be blurry if not using full pixels (Safari
+ * as well on High DPI screens).
+ *
+ * Firefox prefers no rounding for positioning and does not have blurriness on
+ * high DPI screens.
+ *
+ * Only horizontal placement and left/right values need to be considered.
+ */
+export default function getRoundedOffsets(data, shouldRound) {
+ const { popper, reference } = data.offsets;
+ const { round, floor } = Math;
+ const noRound = v => v;
+
+ const referenceWidth = round(reference.width);
+ const popperWidth = round(popper.width);
+
+ const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
+ const isVariation = data.placement.indexOf('-') !== -1;
+ const sameWidthParity = referenceWidth % 2 === popperWidth % 2;
+ const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
+
+ const horizontalToInteger = !shouldRound
+ ? noRound
+ : isVertical || isVariation || sameWidthParity
+ ? round
+ : floor;
+ const verticalToInteger = !shouldRound ? noRound : round;
+
+ return {
+ left: horizontalToInteger(
+ bothOddWidth && !isVariation && shouldRound
+ ? popper.left - 1
+ : popper.left
+ ),
+ top: verticalToInteger(popper.top),
+ bottom: verticalToInteger(popper.bottom),
+ right: horizontalToInteger(popper.right),
+ };
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getScroll.js b/npm_assets/node_modules/popper.js/src/utils/getScroll.js
new file mode 100644
index 0000000..b94f06a
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getScroll.js
@@ -0,0 +1,20 @@
+/**
+ * Gets the scroll value of the given element in the given side (top and left)
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {String} side `top` or `left`
+ * @returns {number} amount of scrolled pixels
+ */
+export default function getScroll(element, side = 'top') {
+ const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';
+ const nodeName = element.nodeName;
+
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ const html = element.ownerDocument.documentElement;
+ const scrollingElement = element.ownerDocument.scrollingElement || html;
+ return scrollingElement[upperSide];
+ }
+
+ return element[upperSide];
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getScrollParent.js b/npm_assets/node_modules/popper.js/src/utils/getScrollParent.js
new file mode 100644
index 0000000..9dca3cf
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getScrollParent.js
@@ -0,0 +1,32 @@
+import getStyleComputedProperty from './getStyleComputedProperty';
+import getParentNode from './getParentNode';
+
+/**
+ * Returns the scrolling parent of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @returns {Element} scroll parent
+ */
+export default function getScrollParent(element) {
+ // Return body, `getScroll` will take care to get the correct `scrollTop` from it
+ if (!element) {
+ return document.body
+ }
+
+ switch (element.nodeName) {
+ case 'HTML':
+ case 'BODY':
+ return element.ownerDocument.body
+ case '#document':
+ return element.body
+ }
+
+ // Firefox want us to check `-x` and `-y` variations as well
+ const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);
+ if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
+ return element;
+ }
+
+ return getScrollParent(getParentNode(element));
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getStyleComputedProperty.js b/npm_assets/node_modules/popper.js/src/utils/getStyleComputedProperty.js
new file mode 100644
index 0000000..014f32b
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getStyleComputedProperty.js
@@ -0,0 +1,16 @@
+/**
+ * Get CSS computed property of the given element
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Eement} element
+ * @argument {String} property
+ */
+export default function getStyleComputedProperty(element, property) {
+ if (element.nodeType !== 1) {
+ return [];
+ }
+ // NOTE: 1 DOM access here
+ const window = element.ownerDocument.defaultView;
+ const css = window.getComputedStyle(element, null);
+ return property ? css[property] : css;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getSupportedPropertyName.js b/npm_assets/node_modules/popper.js/src/utils/getSupportedPropertyName.js
new file mode 100644
index 0000000..c097e56
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getSupportedPropertyName.js
@@ -0,0 +1,20 @@
+/**
+ * Get the prefixed supported property name
+ * @method
+ * @memberof Popper.Utils
+ * @argument {String} property (camelCase)
+ * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)
+ */
+export default function getSupportedPropertyName(property) {
+ const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
+ const upperProp = property.charAt(0).toUpperCase() + property.slice(1);
+
+ for (let i = 0; i < prefixes.length; i++) {
+ const prefix = prefixes[i];
+ const toCheck = prefix ? `${prefix}${upperProp}` : property;
+ if (typeof document.body.style[toCheck] !== 'undefined') {
+ return toCheck;
+ }
+ }
+ return null;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js b/npm_assets/node_modules/popper.js/src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js
new file mode 100644
index 0000000..f401157
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js
@@ -0,0 +1,22 @@
+import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';
+import getScroll from './getScroll';
+import getClientRect from './getClientRect';
+
+export default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {
+ const html = element.ownerDocument.documentElement;
+ const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
+ const width = Math.max(html.clientWidth, window.innerWidth || 0);
+ const height = Math.max(html.clientHeight, window.innerHeight || 0);
+
+ const scrollTop = !excludeScroll ? getScroll(html) : 0;
+ const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
+
+ const offset = {
+ top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
+ left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,
+ width,
+ height,
+ };
+
+ return getClientRect(offset);
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getWindow.js b/npm_assets/node_modules/popper.js/src/utils/getWindow.js
new file mode 100644
index 0000000..f455522
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getWindow.js
@@ -0,0 +1,9 @@
+/**
+ * Get the window associated with the element
+ * @argument {Element} element
+ * @returns {Window}
+ */
+export default function getWindow(element) {
+ const ownerDocument = element.ownerDocument;
+ return ownerDocument ? ownerDocument.defaultView : window;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/getWindowSizes.js b/npm_assets/node_modules/popper.js/src/utils/getWindowSizes.js
new file mode 100644
index 0000000..1437ad4
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/getWindowSizes.js
@@ -0,0 +1,27 @@
+import isIE from './isIE';
+
+function getSize(axis, body, html, computedStyle) {
+ return Math.max(
+ body[`offset${axis}`],
+ body[`scroll${axis}`],
+ html[`client${axis}`],
+ html[`offset${axis}`],
+ html[`scroll${axis}`],
+ isIE(10)
+ ? (parseInt(html[`offset${axis}`]) +
+ parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) +
+ parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))
+ : 0
+ );
+}
+
+export default function getWindowSizes(document) {
+ const body = document.body;
+ const html = document.documentElement;
+ const computedStyle = isIE(10) && getComputedStyle(html);
+
+ return {
+ height: getSize('Height', body, html, computedStyle),
+ width: getSize('Width', body, html, computedStyle),
+ };
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/includeScroll.js b/npm_assets/node_modules/popper.js/src/utils/includeScroll.js
new file mode 100644
index 0000000..156561c
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/includeScroll.js
@@ -0,0 +1,21 @@
+import getScroll from './getScroll';
+
+/*
+ * Sum or subtract the element scroll values (left and top) from a given rect object
+ * @method
+ * @memberof Popper.Utils
+ * @param {Object} rect - Rect object you want to change
+ * @param {HTMLElement} element - The element from the function reads the scroll values
+ * @param {Boolean} subtract - set to true if you want to subtract the scroll values
+ * @return {Object} rect - The modifier rect object
+ */
+export default function includeScroll(rect, element, subtract = false) {
+ const scrollTop = getScroll(element, 'top');
+ const scrollLeft = getScroll(element, 'left');
+ const modifier = subtract ? -1 : 1;
+ rect.top += scrollTop * modifier;
+ rect.bottom += scrollTop * modifier;
+ rect.left += scrollLeft * modifier;
+ rect.right += scrollLeft * modifier;
+ return rect;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/index.js b/npm_assets/node_modules/popper.js/src/utils/index.js
new file mode 100644
index 0000000..7f38680
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/index.js
@@ -0,0 +1,100 @@
+import computeAutoPlacement from './computeAutoPlacement';
+import debounce from './debounce';
+import findIndex from './findIndex';
+import getBordersSize from './getBordersSize';
+import getBoundaries from './getBoundaries';
+import getBoundingClientRect from './getBoundingClientRect';
+import getClientRect from './getClientRect';
+import getOffsetParent from './getOffsetParent';
+import getOffsetRect from './getOffsetRect';
+import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';
+import getOuterSizes from './getOuterSizes';
+import getParentNode from './getParentNode';
+import getPopperOffsets from './getPopperOffsets';
+import getReferenceOffsets from './getReferenceOffsets';
+import getScroll from './getScroll';
+import getScrollParent from './getScrollParent';
+import getStyleComputedProperty from './getStyleComputedProperty';
+import getSupportedPropertyName from './getSupportedPropertyName';
+import getWindowSizes from './getWindowSizes';
+import isFixed from './isFixed';
+import isFunction from './isFunction';
+import isModifierEnabled from './isModifierEnabled';
+import isModifierRequired from './isModifierRequired';
+import isNumeric from './isNumeric';
+import removeEventListeners from './removeEventListeners';
+import runModifiers from './runModifiers';
+import setAttributes from './setAttributes';
+import setStyles from './setStyles';
+import setupEventListeners from './setupEventListeners';
+
+/** @namespace Popper.Utils */
+export {
+ computeAutoPlacement,
+ debounce,
+ findIndex,
+ getBordersSize,
+ getBoundaries,
+ getBoundingClientRect,
+ getClientRect,
+ getOffsetParent,
+ getOffsetRect,
+ getOffsetRectRelativeToArbitraryNode,
+ getOuterSizes,
+ getParentNode,
+ getPopperOffsets,
+ getReferenceOffsets,
+ getScroll,
+ getScrollParent,
+ getStyleComputedProperty,
+ getSupportedPropertyName,
+ getWindowSizes,
+ isFixed,
+ isFunction,
+ isModifierEnabled,
+ isModifierRequired,
+ isNumeric,
+ removeEventListeners,
+ runModifiers,
+ setAttributes,
+ setStyles,
+ setupEventListeners,
+};
+
+// This is here just for backward compatibility with versions lower than v1.10.3
+// you should import the utilities using named exports, if you want them all use:
+// ```
+// import * as PopperUtils from 'popper-utils';
+// ```
+// The default export will be removed in the next major version.
+export default {
+ computeAutoPlacement,
+ debounce,
+ findIndex,
+ getBordersSize,
+ getBoundaries,
+ getBoundingClientRect,
+ getClientRect,
+ getOffsetParent,
+ getOffsetRect,
+ getOffsetRectRelativeToArbitraryNode,
+ getOuterSizes,
+ getParentNode,
+ getPopperOffsets,
+ getReferenceOffsets,
+ getScroll,
+ getScrollParent,
+ getStyleComputedProperty,
+ getSupportedPropertyName,
+ getWindowSizes,
+ isFixed,
+ isFunction,
+ isModifierEnabled,
+ isModifierRequired,
+ isNumeric,
+ removeEventListeners,
+ runModifiers,
+ setAttributes,
+ setStyles,
+ setupEventListeners,
+};
diff --git a/npm_assets/node_modules/popper.js/src/utils/isBrowser.js b/npm_assets/node_modules/popper.js/src/utils/isBrowser.js
new file mode 100644
index 0000000..173d09f
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/isBrowser.js
@@ -0,0 +1 @@
+export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';
diff --git a/npm_assets/node_modules/popper.js/src/utils/isFixed.js b/npm_assets/node_modules/popper.js/src/utils/isFixed.js
new file mode 100644
index 0000000..b4ad5af
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/isFixed.js
@@ -0,0 +1,25 @@
+import getStyleComputedProperty from './getStyleComputedProperty';
+import getParentNode from './getParentNode';
+
+/**
+ * Check if the given element is fixed or is inside a fixed parent
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element
+ * @argument {Element} customContainer
+ * @returns {Boolean} answer to "isFixed?"
+ */
+export default function isFixed(element) {
+ const nodeName = element.nodeName;
+ if (nodeName === 'BODY' || nodeName === 'HTML') {
+ return false;
+ }
+ if (getStyleComputedProperty(element, 'position') === 'fixed') {
+ return true;
+ }
+ const parentNode = getParentNode(element);
+ if (!parentNode) {
+ return false;
+ }
+ return isFixed(parentNode);
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/isFunction.js b/npm_assets/node_modules/popper.js/src/utils/isFunction.js
new file mode 100644
index 0000000..007a127
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/isFunction.js
@@ -0,0 +1,14 @@
+/**
+ * Check if the given variable is a function
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Any} functionToCheck - variable to check
+ * @returns {Boolean} answer to: is a function?
+ */
+export default function isFunction(functionToCheck) {
+ const getType = {};
+ return (
+ functionToCheck &&
+ getType.toString.call(functionToCheck) === '[object Function]'
+ );
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/isIE.js b/npm_assets/node_modules/popper.js/src/utils/isIE.js
new file mode 100644
index 0000000..6e69d90
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/isIE.js
@@ -0,0 +1,21 @@
+import isBrowser from './isBrowser';
+
+const isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
+const isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
+
+/**
+ * Determines if the browser is Internet Explorer
+ * @method
+ * @memberof Popper.Utils
+ * @param {Number} version to check
+ * @returns {Boolean} isIE
+ */
+export default function isIE(version) {
+ if (version === 11) {
+ return isIE11;
+ }
+ if (version === 10) {
+ return isIE10;
+ }
+ return isIE11 || isIE10;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/isModifierEnabled.js b/npm_assets/node_modules/popper.js/src/utils/isModifierEnabled.js
new file mode 100644
index 0000000..f48bb2d
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/isModifierEnabled.js
@@ -0,0 +1,11 @@
+/**
+ * Helper used to know if the given modifier is enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @returns {Boolean}
+ */
+export default function isModifierEnabled(modifiers, modifierName) {
+ return modifiers.some(
+ ({ name, enabled }) => enabled && name === modifierName
+ );
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/isModifierRequired.js b/npm_assets/node_modules/popper.js/src/utils/isModifierRequired.js
new file mode 100644
index 0000000..31f47e6
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/isModifierRequired.js
@@ -0,0 +1,38 @@
+import find from './find';
+
+/**
+ * Helper used to know if the given modifier depends from another one.<br />
+ * It checks if the needed modifier is listed and enabled.
+ * @method
+ * @memberof Popper.Utils
+ * @param {Array} modifiers - list of modifiers
+ * @param {String} requestingName - name of requesting modifier
+ * @param {String} requestedName - name of requested modifier
+ * @returns {Boolean}
+ */
+export default function isModifierRequired(
+ modifiers,
+ requestingName,
+ requestedName
+) {
+ const requesting = find(modifiers, ({ name }) => name === requestingName);
+
+ const isRequired =
+ !!requesting &&
+ modifiers.some(modifier => {
+ return (
+ modifier.name === requestedName &&
+ modifier.enabled &&
+ modifier.order < requesting.order
+ );
+ });
+
+ if (!isRequired) {
+ const requesting = `\`${requestingName}\``;
+ const requested = `\`${requestedName}\``;
+ console.warn(
+ `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`
+ );
+ }
+ return isRequired;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/isNumeric.js b/npm_assets/node_modules/popper.js/src/utils/isNumeric.js
new file mode 100644
index 0000000..8c7c751
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/isNumeric.js
@@ -0,0 +1,10 @@
+/**
+ * Tells if a given input is a number
+ * @method
+ * @memberof Popper.Utils
+ * @param {*} input to check
+ * @return {Boolean}
+ */
+export default function isNumeric(n) {
+ return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/isOffsetContainer.js b/npm_assets/node_modules/popper.js/src/utils/isOffsetContainer.js
new file mode 100644
index 0000000..ff0532c
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/isOffsetContainer.js
@@ -0,0 +1,11 @@
+import getOffsetParent from './getOffsetParent';
+
+export default function isOffsetContainer(element) {
+ const { nodeName } = element;
+ if (nodeName === 'BODY') {
+ return false;
+ }
+ return (
+ nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element
+ );
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/removeEventListeners.js b/npm_assets/node_modules/popper.js/src/utils/removeEventListeners.js
new file mode 100644
index 0000000..f8fb42d
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/removeEventListeners.js
@@ -0,0 +1,24 @@
+import getWindow from './getWindow';
+
+/**
+ * Remove event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+export default function removeEventListeners(reference, state) {
+ // Remove resize event listener on window
+ getWindow(reference).removeEventListener('resize', state.updateBound);
+
+ // Remove scroll event listener on scroll parents
+ state.scrollParents.forEach(target => {
+ target.removeEventListener('scroll', state.updateBound);
+ });
+
+ // Reset state
+ state.updateBound = null;
+ state.scrollParents = [];
+ state.scrollElement = null;
+ state.eventsEnabled = false;
+ return state;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/runModifiers.js b/npm_assets/node_modules/popper.js/src/utils/runModifiers.js
new file mode 100644
index 0000000..f7bdccc
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/runModifiers.js
@@ -0,0 +1,37 @@
+import isFunction from './isFunction';
+import findIndex from './findIndex';
+import getClientRect from '../utils/getClientRect';
+
+/**
+ * Loop trough the list of modifiers and run them in order,
+ * each of them will then edit the data object.
+ * @method
+ * @memberof Popper.Utils
+ * @param {dataObject} data
+ * @param {Array} modifiers
+ * @param {String} ends - Optional modifier name used as stopper
+ * @returns {dataObject}
+ */
+export default function runModifiers(modifiers, data, ends) {
+ const modifiersToRun = ends === undefined
+ ? modifiers
+ : modifiers.slice(0, findIndex(modifiers, 'name', ends));
+
+ modifiersToRun.forEach(modifier => {
+ if (modifier['function']) { // eslint-disable-line dot-notation
+ console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
+ }
+ const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
+ if (modifier.enabled && isFunction(fn)) {
+ // Add properties to offsets to make them a complete clientRect object
+ // we do this before each modifier to make sure the previous one doesn't
+ // mess with these values
+ data.offsets.popper = getClientRect(data.offsets.popper);
+ data.offsets.reference = getClientRect(data.offsets.reference);
+
+ data = fn(data, modifier);
+ }
+ });
+
+ return data;
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/setAttributes.js b/npm_assets/node_modules/popper.js/src/utils/setAttributes.js
new file mode 100644
index 0000000..912f84e
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/setAttributes.js
@@ -0,0 +1,18 @@
+/**
+ * Set the attributes to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the attributes to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+export default function setAttributes(element, attributes) {
+ Object.keys(attributes).forEach(function(prop) {
+ const value = attributes[prop];
+ if (value !== false) {
+ element.setAttribute(prop, attributes[prop]);
+ } else {
+ element.removeAttribute(prop);
+ }
+ });
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/setStyles.js b/npm_assets/node_modules/popper.js/src/utils/setStyles.js
new file mode 100644
index 0000000..4ae7f79
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/setStyles.js
@@ -0,0 +1,24 @@
+import isNumeric from './isNumeric';
+
+/**
+ * Set the style to the given popper
+ * @method
+ * @memberof Popper.Utils
+ * @argument {Element} element - Element to apply the style to
+ * @argument {Object} styles
+ * Object with a list of properties and values which will be applied to the element
+ */
+export default function setStyles(element, styles) {
+ Object.keys(styles).forEach(prop => {
+ let unit = '';
+ // add unit if the value is numeric and is one of the following
+ if (
+ ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==
+ -1 &&
+ isNumeric(styles[prop])
+ ) {
+ unit = 'px';
+ }
+ element.style[prop] = styles[prop] + unit;
+ });
+}
diff --git a/npm_assets/node_modules/popper.js/src/utils/setupEventListeners.js b/npm_assets/node_modules/popper.js/src/utils/setupEventListeners.js
new file mode 100644
index 0000000..0b1255f
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/utils/setupEventListeners.js
@@ -0,0 +1,48 @@
+import getScrollParent from './getScrollParent';
+import getWindow from './getWindow';
+
+function attachToScrollParents(scrollParent, event, callback, scrollParents) {
+ const isBody = scrollParent.nodeName === 'BODY';
+ const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
+ target.addEventListener(event, callback, { passive: true });
+
+ if (!isBody) {
+ attachToScrollParents(
+ getScrollParent(target.parentNode),
+ event,
+ callback,
+ scrollParents
+ );
+ }
+ scrollParents.push(target);
+}
+
+/**
+ * Setup needed event listeners used to update the popper position
+ * @method
+ * @memberof Popper.Utils
+ * @private
+ */
+export default function setupEventListeners(
+ reference,
+ options,
+ state,
+ updateBound
+) {
+ // Resize event listener on window
+ state.updateBound = updateBound;
+ getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
+
+ // Scroll event listener on scroll parents
+ const scrollElement = getScrollParent(reference);
+ attachToScrollParents(
+ scrollElement,
+ 'scroll',
+ state.updateBound,
+ state.scrollParents
+ );
+ state.scrollElement = scrollElement;
+ state.eventsEnabled = true;
+
+ return state;
+}