4139 lines
		
	
	
		
			309 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			4139 lines
		
	
	
		
			309 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						||
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
 | 
						||
if you want to view the source visit the plugins github repository
 | 
						||
*/
 | 
						||
 | 
						||
'use strict';
 | 
						||
 | 
						||
var obsidian = require('obsidian');
 | 
						||
 | 
						||
/*! *****************************************************************************
 | 
						||
Copyright (c) Microsoft Corporation.
 | 
						||
 | 
						||
Permission to use, copy, modify, and/or distribute this software for any
 | 
						||
purpose with or without fee is hereby granted.
 | 
						||
 | 
						||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
 | 
						||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 | 
						||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
 | 
						||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
 | 
						||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 | 
						||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 | 
						||
PERFORMANCE OF THIS SOFTWARE.
 | 
						||
***************************************************************************** */
 | 
						||
 | 
						||
function __awaiter(thisArg, _arguments, P, generator) {
 | 
						||
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
 | 
						||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
						||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
						||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
						||
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
 | 
						||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
						||
    });
 | 
						||
}
 | 
						||
 | 
						||
const DEFAULT_SETTINGS = {
 | 
						||
    showFnRef: false,
 | 
						||
    smooth: true,
 | 
						||
};
 | 
						||
class BetterFnSettingTab extends obsidian.PluginSettingTab {
 | 
						||
    constructor(plugin) {
 | 
						||
        super(plugin.app, plugin);
 | 
						||
        this.plugin = plugin;
 | 
						||
    }
 | 
						||
    display() {
 | 
						||
        this.containerEl.empty();
 | 
						||
        new obsidian.Setting(this.containerEl)
 | 
						||
            .setName("Show reference")
 | 
						||
            .setDesc("Show reference section at the buttom of document")
 | 
						||
            .addToggle((toggle) => {
 | 
						||
            toggle.setValue(this.plugin.settings.showFnRef);
 | 
						||
            toggle.onChange((value) => __awaiter(this, void 0, void 0, function* () {
 | 
						||
                this.plugin.settings.showFnRef = value;
 | 
						||
                this.plugin.getLoopAllLeavesFunc(this.plugin.refresh)();
 | 
						||
                yield this.plugin.saveSettings();
 | 
						||
            }));
 | 
						||
        });
 | 
						||
        new obsidian.Setting(this.containerEl)
 | 
						||
            .setName("Smooth transition")
 | 
						||
            .setDesc(createFragment((descEl) => {
 | 
						||
            descEl
 | 
						||
                .createEl("video", {
 | 
						||
                attr: {
 | 
						||
                    src: "https://img.aidenlx.top/uPic/SmoothTransition.mp4",
 | 
						||
                    width: "80%",
 | 
						||
                    autoplay: "",
 | 
						||
                },
 | 
						||
            })
 | 
						||
                .onClickEvent(function () {
 | 
						||
                this.play();
 | 
						||
            });
 | 
						||
            descEl.createDiv({}, (el) => {
 | 
						||
                el.appendText("Allow smooth transition between popovers");
 | 
						||
                el.createEl("br");
 | 
						||
                el.appendText("Note: if enabled, only one popover can be shown at a time");
 | 
						||
            });
 | 
						||
        }))
 | 
						||
            .addToggle((toggle) => {
 | 
						||
            toggle.setValue(this.plugin.settings.smooth);
 | 
						||
            toggle.onChange((value) => __awaiter(this, void 0, void 0, function* () {
 | 
						||
                this.plugin.settings.smooth = value;
 | 
						||
                this.plugin.getLoopAllLeavesFunc(this.plugin.clearInfoList, this.plugin.refresh)();
 | 
						||
                yield this.plugin.saveSettings();
 | 
						||
            }));
 | 
						||
        });
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
var top = 'top';
 | 
						||
var bottom = 'bottom';
 | 
						||
var right = 'right';
 | 
						||
var left = 'left';
 | 
						||
var auto = 'auto';
 | 
						||
var basePlacements = [top, bottom, right, left];
 | 
						||
var start = 'start';
 | 
						||
var end = 'end';
 | 
						||
var clippingParents = 'clippingParents';
 | 
						||
var viewport = 'viewport';
 | 
						||
var popper = 'popper';
 | 
						||
var reference = 'reference';
 | 
						||
var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
 | 
						||
  return acc.concat([placement + "-" + start, placement + "-" + end]);
 | 
						||
}, []);
 | 
						||
var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
 | 
						||
  return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
 | 
						||
}, []); // modifiers that need to read the DOM
 | 
						||
 | 
						||
var beforeRead = 'beforeRead';
 | 
						||
var read = 'read';
 | 
						||
var afterRead = 'afterRead'; // pure-logic modifiers
 | 
						||
 | 
						||
var beforeMain = 'beforeMain';
 | 
						||
var main = 'main';
 | 
						||
var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
 | 
						||
 | 
						||
var beforeWrite = 'beforeWrite';
 | 
						||
var write = 'write';
 | 
						||
var afterWrite = 'afterWrite';
 | 
						||
var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
 | 
						||
 | 
						||
function getNodeName(element) {
 | 
						||
  return element ? (element.nodeName || '').toLowerCase() : null;
 | 
						||
}
 | 
						||
 | 
						||
function getWindow(node) {
 | 
						||
  if (node == null) {
 | 
						||
    return window;
 | 
						||
  }
 | 
						||
 | 
						||
  if (node.toString() !== '[object Window]') {
 | 
						||
    var ownerDocument = node.ownerDocument;
 | 
						||
    return ownerDocument ? ownerDocument.defaultView || window : window;
 | 
						||
  }
 | 
						||
 | 
						||
  return node;
 | 
						||
}
 | 
						||
 | 
						||
function isElement$1(node) {
 | 
						||
  var OwnElement = getWindow(node).Element;
 | 
						||
  return node instanceof OwnElement || node instanceof Element;
 | 
						||
}
 | 
						||
 | 
						||
function isHTMLElement(node) {
 | 
						||
  var OwnElement = getWindow(node).HTMLElement;
 | 
						||
  return node instanceof OwnElement || node instanceof HTMLElement;
 | 
						||
}
 | 
						||
 | 
						||
function isShadowRoot(node) {
 | 
						||
  // IE 11 has no ShadowRoot
 | 
						||
  if (typeof ShadowRoot === 'undefined') {
 | 
						||
    return false;
 | 
						||
  }
 | 
						||
 | 
						||
  var OwnElement = getWindow(node).ShadowRoot;
 | 
						||
  return node instanceof OwnElement || node instanceof ShadowRoot;
 | 
						||
}
 | 
						||
 | 
						||
// and applies them to the HTMLElements such as popper and arrow
 | 
						||
 | 
						||
function applyStyles(_ref) {
 | 
						||
  var state = _ref.state;
 | 
						||
  Object.keys(state.elements).forEach(function (name) {
 | 
						||
    var style = state.styles[name] || {};
 | 
						||
    var attributes = state.attributes[name] || {};
 | 
						||
    var element = state.elements[name]; // arrow is optional + virtual elements
 | 
						||
 | 
						||
    if (!isHTMLElement(element) || !getNodeName(element)) {
 | 
						||
      return;
 | 
						||
    } // Flow doesn't support to extend this property, but it's the most
 | 
						||
    // effective way to apply styles to an HTMLElement
 | 
						||
    // $FlowFixMe[cannot-write]
 | 
						||
 | 
						||
 | 
						||
    Object.assign(element.style, style);
 | 
						||
    Object.keys(attributes).forEach(function (name) {
 | 
						||
      var value = attributes[name];
 | 
						||
 | 
						||
      if (value === false) {
 | 
						||
        element.removeAttribute(name);
 | 
						||
      } else {
 | 
						||
        element.setAttribute(name, value === true ? '' : value);
 | 
						||
      }
 | 
						||
    });
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
function effect$2(_ref2) {
 | 
						||
  var state = _ref2.state;
 | 
						||
  var initialStyles = {
 | 
						||
    popper: {
 | 
						||
      position: state.options.strategy,
 | 
						||
      left: '0',
 | 
						||
      top: '0',
 | 
						||
      margin: '0'
 | 
						||
    },
 | 
						||
    arrow: {
 | 
						||
      position: 'absolute'
 | 
						||
    },
 | 
						||
    reference: {}
 | 
						||
  };
 | 
						||
  Object.assign(state.elements.popper.style, initialStyles.popper);
 | 
						||
  state.styles = initialStyles;
 | 
						||
 | 
						||
  if (state.elements.arrow) {
 | 
						||
    Object.assign(state.elements.arrow.style, initialStyles.arrow);
 | 
						||
  }
 | 
						||
 | 
						||
  return function () {
 | 
						||
    Object.keys(state.elements).forEach(function (name) {
 | 
						||
      var element = state.elements[name];
 | 
						||
      var attributes = state.attributes[name] || {};
 | 
						||
      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
 | 
						||
 | 
						||
      var style = styleProperties.reduce(function (style, property) {
 | 
						||
        style[property] = '';
 | 
						||
        return style;
 | 
						||
      }, {}); // arrow is optional + virtual elements
 | 
						||
 | 
						||
      if (!isHTMLElement(element) || !getNodeName(element)) {
 | 
						||
        return;
 | 
						||
      }
 | 
						||
 | 
						||
      Object.assign(element.style, style);
 | 
						||
      Object.keys(attributes).forEach(function (attribute) {
 | 
						||
        element.removeAttribute(attribute);
 | 
						||
      });
 | 
						||
    });
 | 
						||
  };
 | 
						||
} // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
 | 
						||
var applyStyles$1 = {
 | 
						||
  name: 'applyStyles',
 | 
						||
  enabled: true,
 | 
						||
  phase: 'write',
 | 
						||
  fn: applyStyles,
 | 
						||
  effect: effect$2,
 | 
						||
  requires: ['computeStyles']
 | 
						||
};
 | 
						||
 | 
						||
function getBasePlacement$1(placement) {
 | 
						||
  return placement.split('-')[0];
 | 
						||
}
 | 
						||
 | 
						||
function getBoundingClientRect(element) {
 | 
						||
  var rect = element.getBoundingClientRect();
 | 
						||
  return {
 | 
						||
    width: rect.width,
 | 
						||
    height: rect.height,
 | 
						||
    top: rect.top,
 | 
						||
    right: rect.right,
 | 
						||
    bottom: rect.bottom,
 | 
						||
    left: rect.left,
 | 
						||
    x: rect.left,
 | 
						||
    y: rect.top
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
// means it doesn't take into account transforms.
 | 
						||
 | 
						||
function getLayoutRect(element) {
 | 
						||
  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
 | 
						||
  // Fixes https://github.com/popperjs/popper-core/issues/1223
 | 
						||
 | 
						||
  var width = element.offsetWidth;
 | 
						||
  var height = element.offsetHeight;
 | 
						||
 | 
						||
  if (Math.abs(clientRect.width - width) <= 1) {
 | 
						||
    width = clientRect.width;
 | 
						||
  }
 | 
						||
 | 
						||
  if (Math.abs(clientRect.height - height) <= 1) {
 | 
						||
    height = clientRect.height;
 | 
						||
  }
 | 
						||
 | 
						||
  return {
 | 
						||
    x: element.offsetLeft,
 | 
						||
    y: element.offsetTop,
 | 
						||
    width: width,
 | 
						||
    height: height
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function contains(parent, child) {
 | 
						||
  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
 | 
						||
 | 
						||
  if (parent.contains(child)) {
 | 
						||
    return true;
 | 
						||
  } // then fallback to custom implementation with Shadow DOM support
 | 
						||
  else if (rootNode && isShadowRoot(rootNode)) {
 | 
						||
      var next = child;
 | 
						||
 | 
						||
      do {
 | 
						||
        if (next && parent.isSameNode(next)) {
 | 
						||
          return true;
 | 
						||
        } // $FlowFixMe[prop-missing]: need a better way to handle this...
 | 
						||
 | 
						||
 | 
						||
        next = next.parentNode || next.host;
 | 
						||
      } while (next);
 | 
						||
    } // Give up, the result is false
 | 
						||
 | 
						||
 | 
						||
  return false;
 | 
						||
}
 | 
						||
 | 
						||
function getComputedStyle$1(element) {
 | 
						||
  return getWindow(element).getComputedStyle(element);
 | 
						||
}
 | 
						||
 | 
						||
function isTableElement(element) {
 | 
						||
  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
 | 
						||
}
 | 
						||
 | 
						||
function getDocumentElement(element) {
 | 
						||
  // $FlowFixMe[incompatible-return]: assume body is always available
 | 
						||
  return ((isElement$1(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
 | 
						||
  element.document) || window.document).documentElement;
 | 
						||
}
 | 
						||
 | 
						||
function getParentNode(element) {
 | 
						||
  if (getNodeName(element) === 'html') {
 | 
						||
    return element;
 | 
						||
  }
 | 
						||
 | 
						||
  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
 | 
						||
    // $FlowFixMe[incompatible-return]
 | 
						||
    // $FlowFixMe[prop-missing]
 | 
						||
    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
 | 
						||
    element.parentNode || ( // DOM Element detected
 | 
						||
    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
 | 
						||
    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
 | 
						||
    getDocumentElement(element) // fallback
 | 
						||
 | 
						||
  );
 | 
						||
}
 | 
						||
 | 
						||
function getTrueOffsetParent(element) {
 | 
						||
  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
 | 
						||
  getComputedStyle$1(element).position === 'fixed') {
 | 
						||
    return null;
 | 
						||
  }
 | 
						||
 | 
						||
  return element.offsetParent;
 | 
						||
} // `.offsetParent` reports `null` for fixed elements, while absolute elements
 | 
						||
// return the containing block
 | 
						||
 | 
						||
 | 
						||
function getContainingBlock(element) {
 | 
						||
  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;
 | 
						||
  var isIE = navigator.userAgent.indexOf('Trident') !== -1;
 | 
						||
 | 
						||
  if (isIE && isHTMLElement(element)) {
 | 
						||
    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
 | 
						||
    var elementCss = getComputedStyle$1(element);
 | 
						||
 | 
						||
    if (elementCss.position === 'fixed') {
 | 
						||
      return null;
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  var currentNode = getParentNode(element);
 | 
						||
 | 
						||
  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
 | 
						||
    var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that
 | 
						||
    // create a containing block.
 | 
						||
    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
 | 
						||
 | 
						||
    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') {
 | 
						||
      return currentNode;
 | 
						||
    } else {
 | 
						||
      currentNode = currentNode.parentNode;
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  return null;
 | 
						||
} // Gets the closest ancestor positioned element. Handles some edge cases,
 | 
						||
// such as table ancestors and cross browser bugs.
 | 
						||
 | 
						||
 | 
						||
function getOffsetParent(element) {
 | 
						||
  var window = getWindow(element);
 | 
						||
  var offsetParent = getTrueOffsetParent(element);
 | 
						||
 | 
						||
  while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {
 | 
						||
    offsetParent = getTrueOffsetParent(offsetParent);
 | 
						||
  }
 | 
						||
 | 
						||
  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {
 | 
						||
    return window;
 | 
						||
  }
 | 
						||
 | 
						||
  return offsetParent || getContainingBlock(element) || window;
 | 
						||
}
 | 
						||
 | 
						||
function getMainAxisFromPlacement(placement) {
 | 
						||
  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
 | 
						||
}
 | 
						||
 | 
						||
var max = Math.max;
 | 
						||
var min = Math.min;
 | 
						||
var round = Math.round;
 | 
						||
 | 
						||
function within(min$1, value, max$1) {
 | 
						||
  return max(min$1, min(value, max$1));
 | 
						||
}
 | 
						||
 | 
						||
function getFreshSideObject() {
 | 
						||
  return {
 | 
						||
    top: 0,
 | 
						||
    right: 0,
 | 
						||
    bottom: 0,
 | 
						||
    left: 0
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function mergePaddingObject(paddingObject) {
 | 
						||
  return Object.assign({}, getFreshSideObject(), paddingObject);
 | 
						||
}
 | 
						||
 | 
						||
function expandToHashMap(value, keys) {
 | 
						||
  return keys.reduce(function (hashMap, key) {
 | 
						||
    hashMap[key] = value;
 | 
						||
    return hashMap;
 | 
						||
  }, {});
 | 
						||
}
 | 
						||
 | 
						||
var toPaddingObject = function toPaddingObject(padding, state) {
 | 
						||
  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
 | 
						||
    placement: state.placement
 | 
						||
  })) : padding;
 | 
						||
  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
 | 
						||
};
 | 
						||
 | 
						||
function arrow(_ref) {
 | 
						||
  var _state$modifiersData$;
 | 
						||
 | 
						||
  var state = _ref.state,
 | 
						||
      name = _ref.name,
 | 
						||
      options = _ref.options;
 | 
						||
  var arrowElement = state.elements.arrow;
 | 
						||
  var popperOffsets = state.modifiersData.popperOffsets;
 | 
						||
  var basePlacement = getBasePlacement$1(state.placement);
 | 
						||
  var axis = getMainAxisFromPlacement(basePlacement);
 | 
						||
  var isVertical = [left, right].indexOf(basePlacement) >= 0;
 | 
						||
  var len = isVertical ? 'height' : 'width';
 | 
						||
 | 
						||
  if (!arrowElement || !popperOffsets) {
 | 
						||
    return;
 | 
						||
  }
 | 
						||
 | 
						||
  var paddingObject = toPaddingObject(options.padding, state);
 | 
						||
  var arrowRect = getLayoutRect(arrowElement);
 | 
						||
  var minProp = axis === 'y' ? top : left;
 | 
						||
  var maxProp = axis === 'y' ? bottom : right;
 | 
						||
  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
 | 
						||
  var startDiff = popperOffsets[axis] - state.rects.reference[axis];
 | 
						||
  var arrowOffsetParent = getOffsetParent(arrowElement);
 | 
						||
  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
 | 
						||
  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
 | 
						||
  // outside of the popper bounds
 | 
						||
 | 
						||
  var min = paddingObject[minProp];
 | 
						||
  var max = clientSize - arrowRect[len] - paddingObject[maxProp];
 | 
						||
  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
 | 
						||
  var offset = within(min, center, max); // Prevents breaking syntax highlighting...
 | 
						||
 | 
						||
  var axisProp = axis;
 | 
						||
  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
 | 
						||
}
 | 
						||
 | 
						||
function effect$1(_ref2) {
 | 
						||
  var state = _ref2.state,
 | 
						||
      options = _ref2.options;
 | 
						||
  var _options$element = options.element,
 | 
						||
      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
 | 
						||
 | 
						||
  if (arrowElement == null) {
 | 
						||
    return;
 | 
						||
  } // CSS selector
 | 
						||
 | 
						||
 | 
						||
  if (typeof arrowElement === 'string') {
 | 
						||
    arrowElement = state.elements.popper.querySelector(arrowElement);
 | 
						||
 | 
						||
    if (!arrowElement) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  if (process.env.NODE_ENV !== "production") {
 | 
						||
    if (!isHTMLElement(arrowElement)) {
 | 
						||
      console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  if (!contains(state.elements.popper, arrowElement)) {
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' '));
 | 
						||
    }
 | 
						||
 | 
						||
    return;
 | 
						||
  }
 | 
						||
 | 
						||
  state.elements.arrow = arrowElement;
 | 
						||
} // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
 | 
						||
var arrow$1 = {
 | 
						||
  name: 'arrow',
 | 
						||
  enabled: true,
 | 
						||
  phase: 'main',
 | 
						||
  fn: arrow,
 | 
						||
  effect: effect$1,
 | 
						||
  requires: ['popperOffsets'],
 | 
						||
  requiresIfExists: ['preventOverflow']
 | 
						||
};
 | 
						||
 | 
						||
var unsetSides = {
 | 
						||
  top: 'auto',
 | 
						||
  right: 'auto',
 | 
						||
  bottom: 'auto',
 | 
						||
  left: 'auto'
 | 
						||
}; // Round the offsets to the nearest suitable subpixel based on the DPR.
 | 
						||
// Zooming can change the DPR, but it seems to report a value that will
 | 
						||
// cleanly divide the values into the appropriate subpixels.
 | 
						||
 | 
						||
function roundOffsetsByDPR(_ref) {
 | 
						||
  var x = _ref.x,
 | 
						||
      y = _ref.y;
 | 
						||
  var win = window;
 | 
						||
  var dpr = win.devicePixelRatio || 1;
 | 
						||
  return {
 | 
						||
    x: round(round(x * dpr) / dpr) || 0,
 | 
						||
    y: round(round(y * dpr) / dpr) || 0
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function mapToStyles(_ref2) {
 | 
						||
  var _Object$assign2;
 | 
						||
 | 
						||
  var popper = _ref2.popper,
 | 
						||
      popperRect = _ref2.popperRect,
 | 
						||
      placement = _ref2.placement,
 | 
						||
      offsets = _ref2.offsets,
 | 
						||
      position = _ref2.position,
 | 
						||
      gpuAcceleration = _ref2.gpuAcceleration,
 | 
						||
      adaptive = _ref2.adaptive,
 | 
						||
      roundOffsets = _ref2.roundOffsets;
 | 
						||
 | 
						||
  var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,
 | 
						||
      _ref3$x = _ref3.x,
 | 
						||
      x = _ref3$x === void 0 ? 0 : _ref3$x,
 | 
						||
      _ref3$y = _ref3.y,
 | 
						||
      y = _ref3$y === void 0 ? 0 : _ref3$y;
 | 
						||
 | 
						||
  var hasX = offsets.hasOwnProperty('x');
 | 
						||
  var hasY = offsets.hasOwnProperty('y');
 | 
						||
  var sideX = left;
 | 
						||
  var sideY = top;
 | 
						||
  var win = window;
 | 
						||
 | 
						||
  if (adaptive) {
 | 
						||
    var offsetParent = getOffsetParent(popper);
 | 
						||
    var heightProp = 'clientHeight';
 | 
						||
    var widthProp = 'clientWidth';
 | 
						||
 | 
						||
    if (offsetParent === getWindow(popper)) {
 | 
						||
      offsetParent = getDocumentElement(popper);
 | 
						||
 | 
						||
      if (getComputedStyle$1(offsetParent).position !== 'static') {
 | 
						||
        heightProp = 'scrollHeight';
 | 
						||
        widthProp = 'scrollWidth';
 | 
						||
      }
 | 
						||
    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
 | 
						||
 | 
						||
 | 
						||
    offsetParent = offsetParent;
 | 
						||
 | 
						||
    if (placement === top) {
 | 
						||
      sideY = bottom; // $FlowFixMe[prop-missing]
 | 
						||
 | 
						||
      y -= offsetParent[heightProp] - popperRect.height;
 | 
						||
      y *= gpuAcceleration ? 1 : -1;
 | 
						||
    }
 | 
						||
 | 
						||
    if (placement === left) {
 | 
						||
      sideX = right; // $FlowFixMe[prop-missing]
 | 
						||
 | 
						||
      x -= offsetParent[widthProp] - popperRect.width;
 | 
						||
      x *= gpuAcceleration ? 1 : -1;
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  var commonStyles = Object.assign({
 | 
						||
    position: position
 | 
						||
  }, adaptive && unsetSides);
 | 
						||
 | 
						||
  if (gpuAcceleration) {
 | 
						||
    var _Object$assign;
 | 
						||
 | 
						||
    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
 | 
						||
  }
 | 
						||
 | 
						||
  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
 | 
						||
}
 | 
						||
 | 
						||
function computeStyles(_ref4) {
 | 
						||
  var state = _ref4.state,
 | 
						||
      options = _ref4.options;
 | 
						||
  var _options$gpuAccelerat = options.gpuAcceleration,
 | 
						||
      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
 | 
						||
      _options$adaptive = options.adaptive,
 | 
						||
      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
 | 
						||
      _options$roundOffsets = options.roundOffsets,
 | 
						||
      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
 | 
						||
 | 
						||
  if (process.env.NODE_ENV !== "production") {
 | 
						||
    var transitionProperty = getComputedStyle$1(state.elements.popper).transitionProperty || '';
 | 
						||
 | 
						||
    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {
 | 
						||
      return transitionProperty.indexOf(property) >= 0;
 | 
						||
    })) {
 | 
						||
      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  var commonStyles = {
 | 
						||
    placement: getBasePlacement$1(state.placement),
 | 
						||
    popper: state.elements.popper,
 | 
						||
    popperRect: state.rects.popper,
 | 
						||
    gpuAcceleration: gpuAcceleration
 | 
						||
  };
 | 
						||
 | 
						||
  if (state.modifiersData.popperOffsets != null) {
 | 
						||
    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
 | 
						||
      offsets: state.modifiersData.popperOffsets,
 | 
						||
      position: state.options.strategy,
 | 
						||
      adaptive: adaptive,
 | 
						||
      roundOffsets: roundOffsets
 | 
						||
    })));
 | 
						||
  }
 | 
						||
 | 
						||
  if (state.modifiersData.arrow != null) {
 | 
						||
    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
 | 
						||
      offsets: state.modifiersData.arrow,
 | 
						||
      position: 'absolute',
 | 
						||
      adaptive: false,
 | 
						||
      roundOffsets: roundOffsets
 | 
						||
    })));
 | 
						||
  }
 | 
						||
 | 
						||
  state.attributes.popper = Object.assign({}, state.attributes.popper, {
 | 
						||
    'data-popper-placement': state.placement
 | 
						||
  });
 | 
						||
} // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
 | 
						||
var computeStyles$1 = {
 | 
						||
  name: 'computeStyles',
 | 
						||
  enabled: true,
 | 
						||
  phase: 'beforeWrite',
 | 
						||
  fn: computeStyles,
 | 
						||
  data: {}
 | 
						||
};
 | 
						||
 | 
						||
var passive = {
 | 
						||
  passive: true
 | 
						||
};
 | 
						||
 | 
						||
function effect(_ref) {
 | 
						||
  var state = _ref.state,
 | 
						||
      instance = _ref.instance,
 | 
						||
      options = _ref.options;
 | 
						||
  var _options$scroll = options.scroll,
 | 
						||
      scroll = _options$scroll === void 0 ? true : _options$scroll,
 | 
						||
      _options$resize = options.resize,
 | 
						||
      resize = _options$resize === void 0 ? true : _options$resize;
 | 
						||
  var window = getWindow(state.elements.popper);
 | 
						||
  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
 | 
						||
 | 
						||
  if (scroll) {
 | 
						||
    scrollParents.forEach(function (scrollParent) {
 | 
						||
      scrollParent.addEventListener('scroll', instance.update, passive);
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  if (resize) {
 | 
						||
    window.addEventListener('resize', instance.update, passive);
 | 
						||
  }
 | 
						||
 | 
						||
  return function () {
 | 
						||
    if (scroll) {
 | 
						||
      scrollParents.forEach(function (scrollParent) {
 | 
						||
        scrollParent.removeEventListener('scroll', instance.update, passive);
 | 
						||
      });
 | 
						||
    }
 | 
						||
 | 
						||
    if (resize) {
 | 
						||
      window.removeEventListener('resize', instance.update, passive);
 | 
						||
    }
 | 
						||
  };
 | 
						||
} // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
 | 
						||
var eventListeners = {
 | 
						||
  name: 'eventListeners',
 | 
						||
  enabled: true,
 | 
						||
  phase: 'write',
 | 
						||
  fn: function fn() {},
 | 
						||
  effect: effect,
 | 
						||
  data: {}
 | 
						||
};
 | 
						||
 | 
						||
var hash$1 = {
 | 
						||
  left: 'right',
 | 
						||
  right: 'left',
 | 
						||
  bottom: 'top',
 | 
						||
  top: 'bottom'
 | 
						||
};
 | 
						||
function getOppositePlacement(placement) {
 | 
						||
  return placement.replace(/left|right|bottom|top/g, function (matched) {
 | 
						||
    return hash$1[matched];
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
var hash = {
 | 
						||
  start: 'end',
 | 
						||
  end: 'start'
 | 
						||
};
 | 
						||
function getOppositeVariationPlacement(placement) {
 | 
						||
  return placement.replace(/start|end/g, function (matched) {
 | 
						||
    return hash[matched];
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
function getWindowScroll(node) {
 | 
						||
  var win = getWindow(node);
 | 
						||
  var scrollLeft = win.pageXOffset;
 | 
						||
  var scrollTop = win.pageYOffset;
 | 
						||
  return {
 | 
						||
    scrollLeft: scrollLeft,
 | 
						||
    scrollTop: scrollTop
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function getWindowScrollBarX(element) {
 | 
						||
  // If <html> has a CSS width greater than the viewport, then this will be
 | 
						||
  // incorrect for RTL.
 | 
						||
  // Popper 1 is broken in this case and never had a bug report so let's assume
 | 
						||
  // it's not an issue. I don't think anyone ever specifies width on <html>
 | 
						||
  // anyway.
 | 
						||
  // Browsers where the left scrollbar doesn't cause an issue report `0` for
 | 
						||
  // this (e.g. Edge 2019, IE11, Safari)
 | 
						||
  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
 | 
						||
}
 | 
						||
 | 
						||
function getViewportRect(element) {
 | 
						||
  var win = getWindow(element);
 | 
						||
  var html = getDocumentElement(element);
 | 
						||
  var visualViewport = win.visualViewport;
 | 
						||
  var width = html.clientWidth;
 | 
						||
  var height = html.clientHeight;
 | 
						||
  var x = 0;
 | 
						||
  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper
 | 
						||
  // can be obscured underneath it.
 | 
						||
  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even
 | 
						||
  // if it isn't open, so if this isn't available, the popper will be detected
 | 
						||
  // to overflow the bottom of the screen too early.
 | 
						||
 | 
						||
  if (visualViewport) {
 | 
						||
    width = visualViewport.width;
 | 
						||
    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)
 | 
						||
    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding
 | 
						||
    // errors due to floating point numbers, so we need to check precision.
 | 
						||
    // Safari returns a number <= 0, usually < -1 when pinch-zoomed
 | 
						||
    // Feature detection fails in mobile emulation mode in Chrome.
 | 
						||
    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <
 | 
						||
    // 0.001
 | 
						||
    // Fallback here: "Not Safari" userAgent
 | 
						||
 | 
						||
    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
 | 
						||
      x = visualViewport.offsetLeft;
 | 
						||
      y = visualViewport.offsetTop;
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  return {
 | 
						||
    width: width,
 | 
						||
    height: height,
 | 
						||
    x: x + getWindowScrollBarX(element),
 | 
						||
    y: y
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
// of the `<html>` and `<body>` rect bounds if horizontally scrollable
 | 
						||
 | 
						||
function getDocumentRect(element) {
 | 
						||
  var _element$ownerDocumen;
 | 
						||
 | 
						||
  var html = getDocumentElement(element);
 | 
						||
  var winScroll = getWindowScroll(element);
 | 
						||
  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
 | 
						||
  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
 | 
						||
  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
 | 
						||
  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
 | 
						||
  var y = -winScroll.scrollTop;
 | 
						||
 | 
						||
  if (getComputedStyle$1(body || html).direction === 'rtl') {
 | 
						||
    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
 | 
						||
  }
 | 
						||
 | 
						||
  return {
 | 
						||
    width: width,
 | 
						||
    height: height,
 | 
						||
    x: x,
 | 
						||
    y: y
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function isScrollParent(element) {
 | 
						||
  // Firefox wants us to check `-x` and `-y` variations as well
 | 
						||
  var _getComputedStyle = getComputedStyle$1(element),
 | 
						||
      overflow = _getComputedStyle.overflow,
 | 
						||
      overflowX = _getComputedStyle.overflowX,
 | 
						||
      overflowY = _getComputedStyle.overflowY;
 | 
						||
 | 
						||
  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
 | 
						||
}
 | 
						||
 | 
						||
function getScrollParent(node) {
 | 
						||
  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
 | 
						||
    // $FlowFixMe[incompatible-return]: assume body is always available
 | 
						||
    return node.ownerDocument.body;
 | 
						||
  }
 | 
						||
 | 
						||
  if (isHTMLElement(node) && isScrollParent(node)) {
 | 
						||
    return node;
 | 
						||
  }
 | 
						||
 | 
						||
  return getScrollParent(getParentNode(node));
 | 
						||
}
 | 
						||
 | 
						||
/*
 | 
						||
given a DOM element, return the list of all scroll parents, up the list of ancesors
 | 
						||
until we get to the top window object. This list is what we attach scroll listeners
 | 
						||
to, because if any of these parent elements scroll, we'll need to re-calculate the
 | 
						||
reference element's position.
 | 
						||
*/
 | 
						||
 | 
						||
function listScrollParents(element, list) {
 | 
						||
  var _element$ownerDocumen;
 | 
						||
 | 
						||
  if (list === void 0) {
 | 
						||
    list = [];
 | 
						||
  }
 | 
						||
 | 
						||
  var scrollParent = getScrollParent(element);
 | 
						||
  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
 | 
						||
  var win = getWindow(scrollParent);
 | 
						||
  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
 | 
						||
  var updatedList = list.concat(target);
 | 
						||
  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
 | 
						||
  updatedList.concat(listScrollParents(getParentNode(target)));
 | 
						||
}
 | 
						||
 | 
						||
function rectToClientRect(rect) {
 | 
						||
  return Object.assign({}, rect, {
 | 
						||
    left: rect.x,
 | 
						||
    top: rect.y,
 | 
						||
    right: rect.x + rect.width,
 | 
						||
    bottom: rect.y + rect.height
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
function getInnerBoundingClientRect(element) {
 | 
						||
  var rect = getBoundingClientRect(element);
 | 
						||
  rect.top = rect.top + element.clientTop;
 | 
						||
  rect.left = rect.left + element.clientLeft;
 | 
						||
  rect.bottom = rect.top + element.clientHeight;
 | 
						||
  rect.right = rect.left + element.clientWidth;
 | 
						||
  rect.width = element.clientWidth;
 | 
						||
  rect.height = element.clientHeight;
 | 
						||
  rect.x = rect.left;
 | 
						||
  rect.y = rect.top;
 | 
						||
  return rect;
 | 
						||
}
 | 
						||
 | 
						||
function getClientRectFromMixedType(element, clippingParent) {
 | 
						||
  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
 | 
						||
} // A "clipping parent" is an overflowable container with the characteristic of
 | 
						||
// clipping (or hiding) overflowing elements with a position different from
 | 
						||
// `initial`
 | 
						||
 | 
						||
 | 
						||
function getClippingParents(element) {
 | 
						||
  var clippingParents = listScrollParents(getParentNode(element));
 | 
						||
  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;
 | 
						||
  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
 | 
						||
 | 
						||
  if (!isElement$1(clipperElement)) {
 | 
						||
    return [];
 | 
						||
  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
 | 
						||
 | 
						||
 | 
						||
  return clippingParents.filter(function (clippingParent) {
 | 
						||
    return isElement$1(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
 | 
						||
  });
 | 
						||
} // Gets the maximum area that the element is visible in due to any number of
 | 
						||
// clipping parents
 | 
						||
 | 
						||
 | 
						||
function getClippingRect(element, boundary, rootBoundary) {
 | 
						||
  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
 | 
						||
  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
 | 
						||
  var firstClippingParent = clippingParents[0];
 | 
						||
  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
 | 
						||
    var rect = getClientRectFromMixedType(element, clippingParent);
 | 
						||
    accRect.top = max(rect.top, accRect.top);
 | 
						||
    accRect.right = min(rect.right, accRect.right);
 | 
						||
    accRect.bottom = min(rect.bottom, accRect.bottom);
 | 
						||
    accRect.left = max(rect.left, accRect.left);
 | 
						||
    return accRect;
 | 
						||
  }, getClientRectFromMixedType(element, firstClippingParent));
 | 
						||
  clippingRect.width = clippingRect.right - clippingRect.left;
 | 
						||
  clippingRect.height = clippingRect.bottom - clippingRect.top;
 | 
						||
  clippingRect.x = clippingRect.left;
 | 
						||
  clippingRect.y = clippingRect.top;
 | 
						||
  return clippingRect;
 | 
						||
}
 | 
						||
 | 
						||
function getVariation(placement) {
 | 
						||
  return placement.split('-')[1];
 | 
						||
}
 | 
						||
 | 
						||
function computeOffsets(_ref) {
 | 
						||
  var reference = _ref.reference,
 | 
						||
      element = _ref.element,
 | 
						||
      placement = _ref.placement;
 | 
						||
  var basePlacement = placement ? getBasePlacement$1(placement) : null;
 | 
						||
  var variation = placement ? getVariation(placement) : null;
 | 
						||
  var commonX = reference.x + reference.width / 2 - element.width / 2;
 | 
						||
  var commonY = reference.y + reference.height / 2 - element.height / 2;
 | 
						||
  var offsets;
 | 
						||
 | 
						||
  switch (basePlacement) {
 | 
						||
    case top:
 | 
						||
      offsets = {
 | 
						||
        x: commonX,
 | 
						||
        y: reference.y - element.height
 | 
						||
      };
 | 
						||
      break;
 | 
						||
 | 
						||
    case bottom:
 | 
						||
      offsets = {
 | 
						||
        x: commonX,
 | 
						||
        y: reference.y + reference.height
 | 
						||
      };
 | 
						||
      break;
 | 
						||
 | 
						||
    case right:
 | 
						||
      offsets = {
 | 
						||
        x: reference.x + reference.width,
 | 
						||
        y: commonY
 | 
						||
      };
 | 
						||
      break;
 | 
						||
 | 
						||
    case left:
 | 
						||
      offsets = {
 | 
						||
        x: reference.x - element.width,
 | 
						||
        y: commonY
 | 
						||
      };
 | 
						||
      break;
 | 
						||
 | 
						||
    default:
 | 
						||
      offsets = {
 | 
						||
        x: reference.x,
 | 
						||
        y: reference.y
 | 
						||
      };
 | 
						||
  }
 | 
						||
 | 
						||
  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
 | 
						||
 | 
						||
  if (mainAxis != null) {
 | 
						||
    var len = mainAxis === 'y' ? 'height' : 'width';
 | 
						||
 | 
						||
    switch (variation) {
 | 
						||
      case start:
 | 
						||
        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
 | 
						||
        break;
 | 
						||
 | 
						||
      case end:
 | 
						||
        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
 | 
						||
        break;
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  return offsets;
 | 
						||
}
 | 
						||
 | 
						||
function detectOverflow(state, options) {
 | 
						||
  if (options === void 0) {
 | 
						||
    options = {};
 | 
						||
  }
 | 
						||
 | 
						||
  var _options = options,
 | 
						||
      _options$placement = _options.placement,
 | 
						||
      placement = _options$placement === void 0 ? state.placement : _options$placement,
 | 
						||
      _options$boundary = _options.boundary,
 | 
						||
      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
 | 
						||
      _options$rootBoundary = _options.rootBoundary,
 | 
						||
      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
 | 
						||
      _options$elementConte = _options.elementContext,
 | 
						||
      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
 | 
						||
      _options$altBoundary = _options.altBoundary,
 | 
						||
      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
 | 
						||
      _options$padding = _options.padding,
 | 
						||
      padding = _options$padding === void 0 ? 0 : _options$padding;
 | 
						||
  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
 | 
						||
  var altContext = elementContext === popper ? reference : popper;
 | 
						||
  var referenceElement = state.elements.reference;
 | 
						||
  var popperRect = state.rects.popper;
 | 
						||
  var element = state.elements[altBoundary ? altContext : elementContext];
 | 
						||
  var clippingClientRect = getClippingRect(isElement$1(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);
 | 
						||
  var referenceClientRect = getBoundingClientRect(referenceElement);
 | 
						||
  var popperOffsets = computeOffsets({
 | 
						||
    reference: referenceClientRect,
 | 
						||
    element: popperRect,
 | 
						||
    strategy: 'absolute',
 | 
						||
    placement: placement
 | 
						||
  });
 | 
						||
  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
 | 
						||
  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
 | 
						||
  // 0 or negative = within the clipping rect
 | 
						||
 | 
						||
  var overflowOffsets = {
 | 
						||
    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
 | 
						||
    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
 | 
						||
    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
 | 
						||
    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
 | 
						||
  };
 | 
						||
  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
 | 
						||
 | 
						||
  if (elementContext === popper && offsetData) {
 | 
						||
    var offset = offsetData[placement];
 | 
						||
    Object.keys(overflowOffsets).forEach(function (key) {
 | 
						||
      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
 | 
						||
      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
 | 
						||
      overflowOffsets[key] += offset[axis] * multiply;
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  return overflowOffsets;
 | 
						||
}
 | 
						||
 | 
						||
function computeAutoPlacement(state, options) {
 | 
						||
  if (options === void 0) {
 | 
						||
    options = {};
 | 
						||
  }
 | 
						||
 | 
						||
  var _options = options,
 | 
						||
      placement = _options.placement,
 | 
						||
      boundary = _options.boundary,
 | 
						||
      rootBoundary = _options.rootBoundary,
 | 
						||
      padding = _options.padding,
 | 
						||
      flipVariations = _options.flipVariations,
 | 
						||
      _options$allowedAutoP = _options.allowedAutoPlacements,
 | 
						||
      allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
 | 
						||
  var variation = getVariation(placement);
 | 
						||
  var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
 | 
						||
    return getVariation(placement) === variation;
 | 
						||
  }) : basePlacements;
 | 
						||
  var allowedPlacements = placements$1.filter(function (placement) {
 | 
						||
    return allowedAutoPlacements.indexOf(placement) >= 0;
 | 
						||
  });
 | 
						||
 | 
						||
  if (allowedPlacements.length === 0) {
 | 
						||
    allowedPlacements = placements$1;
 | 
						||
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' '));
 | 
						||
    }
 | 
						||
  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
 | 
						||
 | 
						||
 | 
						||
  var overflows = allowedPlacements.reduce(function (acc, placement) {
 | 
						||
    acc[placement] = detectOverflow(state, {
 | 
						||
      placement: placement,
 | 
						||
      boundary: boundary,
 | 
						||
      rootBoundary: rootBoundary,
 | 
						||
      padding: padding
 | 
						||
    })[getBasePlacement$1(placement)];
 | 
						||
    return acc;
 | 
						||
  }, {});
 | 
						||
  return Object.keys(overflows).sort(function (a, b) {
 | 
						||
    return overflows[a] - overflows[b];
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
function getExpandedFallbackPlacements(placement) {
 | 
						||
  if (getBasePlacement$1(placement) === auto) {
 | 
						||
    return [];
 | 
						||
  }
 | 
						||
 | 
						||
  var oppositePlacement = getOppositePlacement(placement);
 | 
						||
  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
 | 
						||
}
 | 
						||
 | 
						||
function flip(_ref) {
 | 
						||
  var state = _ref.state,
 | 
						||
      options = _ref.options,
 | 
						||
      name = _ref.name;
 | 
						||
 | 
						||
  if (state.modifiersData[name]._skip) {
 | 
						||
    return;
 | 
						||
  }
 | 
						||
 | 
						||
  var _options$mainAxis = options.mainAxis,
 | 
						||
      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
 | 
						||
      _options$altAxis = options.altAxis,
 | 
						||
      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
 | 
						||
      specifiedFallbackPlacements = options.fallbackPlacements,
 | 
						||
      padding = options.padding,
 | 
						||
      boundary = options.boundary,
 | 
						||
      rootBoundary = options.rootBoundary,
 | 
						||
      altBoundary = options.altBoundary,
 | 
						||
      _options$flipVariatio = options.flipVariations,
 | 
						||
      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
 | 
						||
      allowedAutoPlacements = options.allowedAutoPlacements;
 | 
						||
  var preferredPlacement = state.options.placement;
 | 
						||
  var basePlacement = getBasePlacement$1(preferredPlacement);
 | 
						||
  var isBasePlacement = basePlacement === preferredPlacement;
 | 
						||
  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
 | 
						||
  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
 | 
						||
    return acc.concat(getBasePlacement$1(placement) === auto ? computeAutoPlacement(state, {
 | 
						||
      placement: placement,
 | 
						||
      boundary: boundary,
 | 
						||
      rootBoundary: rootBoundary,
 | 
						||
      padding: padding,
 | 
						||
      flipVariations: flipVariations,
 | 
						||
      allowedAutoPlacements: allowedAutoPlacements
 | 
						||
    }) : placement);
 | 
						||
  }, []);
 | 
						||
  var referenceRect = state.rects.reference;
 | 
						||
  var popperRect = state.rects.popper;
 | 
						||
  var checksMap = new Map();
 | 
						||
  var makeFallbackChecks = true;
 | 
						||
  var firstFittingPlacement = placements[0];
 | 
						||
 | 
						||
  for (var i = 0; i < placements.length; i++) {
 | 
						||
    var placement = placements[i];
 | 
						||
 | 
						||
    var _basePlacement = getBasePlacement$1(placement);
 | 
						||
 | 
						||
    var isStartVariation = getVariation(placement) === start;
 | 
						||
    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
 | 
						||
    var len = isVertical ? 'width' : 'height';
 | 
						||
    var overflow = detectOverflow(state, {
 | 
						||
      placement: placement,
 | 
						||
      boundary: boundary,
 | 
						||
      rootBoundary: rootBoundary,
 | 
						||
      altBoundary: altBoundary,
 | 
						||
      padding: padding
 | 
						||
    });
 | 
						||
    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
 | 
						||
 | 
						||
    if (referenceRect[len] > popperRect[len]) {
 | 
						||
      mainVariationSide = getOppositePlacement(mainVariationSide);
 | 
						||
    }
 | 
						||
 | 
						||
    var altVariationSide = getOppositePlacement(mainVariationSide);
 | 
						||
    var checks = [];
 | 
						||
 | 
						||
    if (checkMainAxis) {
 | 
						||
      checks.push(overflow[_basePlacement] <= 0);
 | 
						||
    }
 | 
						||
 | 
						||
    if (checkAltAxis) {
 | 
						||
      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
 | 
						||
    }
 | 
						||
 | 
						||
    if (checks.every(function (check) {
 | 
						||
      return check;
 | 
						||
    })) {
 | 
						||
      firstFittingPlacement = placement;
 | 
						||
      makeFallbackChecks = false;
 | 
						||
      break;
 | 
						||
    }
 | 
						||
 | 
						||
    checksMap.set(placement, checks);
 | 
						||
  }
 | 
						||
 | 
						||
  if (makeFallbackChecks) {
 | 
						||
    // `2` may be desired in some cases – research later
 | 
						||
    var numberOfChecks = flipVariations ? 3 : 1;
 | 
						||
 | 
						||
    var _loop = function _loop(_i) {
 | 
						||
      var fittingPlacement = placements.find(function (placement) {
 | 
						||
        var checks = checksMap.get(placement);
 | 
						||
 | 
						||
        if (checks) {
 | 
						||
          return checks.slice(0, _i).every(function (check) {
 | 
						||
            return check;
 | 
						||
          });
 | 
						||
        }
 | 
						||
      });
 | 
						||
 | 
						||
      if (fittingPlacement) {
 | 
						||
        firstFittingPlacement = fittingPlacement;
 | 
						||
        return "break";
 | 
						||
      }
 | 
						||
    };
 | 
						||
 | 
						||
    for (var _i = numberOfChecks; _i > 0; _i--) {
 | 
						||
      var _ret = _loop(_i);
 | 
						||
 | 
						||
      if (_ret === "break") break;
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  if (state.placement !== firstFittingPlacement) {
 | 
						||
    state.modifiersData[name]._skip = true;
 | 
						||
    state.placement = firstFittingPlacement;
 | 
						||
    state.reset = true;
 | 
						||
  }
 | 
						||
} // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
 | 
						||
var flip$1 = {
 | 
						||
  name: 'flip',
 | 
						||
  enabled: true,
 | 
						||
  phase: 'main',
 | 
						||
  fn: flip,
 | 
						||
  requiresIfExists: ['offset'],
 | 
						||
  data: {
 | 
						||
    _skip: false
 | 
						||
  }
 | 
						||
};
 | 
						||
 | 
						||
function getSideOffsets(overflow, rect, preventedOffsets) {
 | 
						||
  if (preventedOffsets === void 0) {
 | 
						||
    preventedOffsets = {
 | 
						||
      x: 0,
 | 
						||
      y: 0
 | 
						||
    };
 | 
						||
  }
 | 
						||
 | 
						||
  return {
 | 
						||
    top: overflow.top - rect.height - preventedOffsets.y,
 | 
						||
    right: overflow.right - rect.width + preventedOffsets.x,
 | 
						||
    bottom: overflow.bottom - rect.height + preventedOffsets.y,
 | 
						||
    left: overflow.left - rect.width - preventedOffsets.x
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function isAnySideFullyClipped(overflow) {
 | 
						||
  return [top, right, bottom, left].some(function (side) {
 | 
						||
    return overflow[side] >= 0;
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
function hide(_ref) {
 | 
						||
  var state = _ref.state,
 | 
						||
      name = _ref.name;
 | 
						||
  var referenceRect = state.rects.reference;
 | 
						||
  var popperRect = state.rects.popper;
 | 
						||
  var preventedOffsets = state.modifiersData.preventOverflow;
 | 
						||
  var referenceOverflow = detectOverflow(state, {
 | 
						||
    elementContext: 'reference'
 | 
						||
  });
 | 
						||
  var popperAltOverflow = detectOverflow(state, {
 | 
						||
    altBoundary: true
 | 
						||
  });
 | 
						||
  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
 | 
						||
  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
 | 
						||
  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
 | 
						||
  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
 | 
						||
  state.modifiersData[name] = {
 | 
						||
    referenceClippingOffsets: referenceClippingOffsets,
 | 
						||
    popperEscapeOffsets: popperEscapeOffsets,
 | 
						||
    isReferenceHidden: isReferenceHidden,
 | 
						||
    hasPopperEscaped: hasPopperEscaped
 | 
						||
  };
 | 
						||
  state.attributes.popper = Object.assign({}, state.attributes.popper, {
 | 
						||
    'data-popper-reference-hidden': isReferenceHidden,
 | 
						||
    'data-popper-escaped': hasPopperEscaped
 | 
						||
  });
 | 
						||
} // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
 | 
						||
var hide$1 = {
 | 
						||
  name: 'hide',
 | 
						||
  enabled: true,
 | 
						||
  phase: 'main',
 | 
						||
  requiresIfExists: ['preventOverflow'],
 | 
						||
  fn: hide
 | 
						||
};
 | 
						||
 | 
						||
function distanceAndSkiddingToXY(placement, rects, offset) {
 | 
						||
  var basePlacement = getBasePlacement$1(placement);
 | 
						||
  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
 | 
						||
 | 
						||
  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
 | 
						||
    placement: placement
 | 
						||
  })) : offset,
 | 
						||
      skidding = _ref[0],
 | 
						||
      distance = _ref[1];
 | 
						||
 | 
						||
  skidding = skidding || 0;
 | 
						||
  distance = (distance || 0) * invertDistance;
 | 
						||
  return [left, right].indexOf(basePlacement) >= 0 ? {
 | 
						||
    x: distance,
 | 
						||
    y: skidding
 | 
						||
  } : {
 | 
						||
    x: skidding,
 | 
						||
    y: distance
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function offset(_ref2) {
 | 
						||
  var state = _ref2.state,
 | 
						||
      options = _ref2.options,
 | 
						||
      name = _ref2.name;
 | 
						||
  var _options$offset = options.offset,
 | 
						||
      offset = _options$offset === void 0 ? [0, 0] : _options$offset;
 | 
						||
  var data = placements.reduce(function (acc, placement) {
 | 
						||
    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
 | 
						||
    return acc;
 | 
						||
  }, {});
 | 
						||
  var _data$state$placement = data[state.placement],
 | 
						||
      x = _data$state$placement.x,
 | 
						||
      y = _data$state$placement.y;
 | 
						||
 | 
						||
  if (state.modifiersData.popperOffsets != null) {
 | 
						||
    state.modifiersData.popperOffsets.x += x;
 | 
						||
    state.modifiersData.popperOffsets.y += y;
 | 
						||
  }
 | 
						||
 | 
						||
  state.modifiersData[name] = data;
 | 
						||
} // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
 | 
						||
var offset$1 = {
 | 
						||
  name: 'offset',
 | 
						||
  enabled: true,
 | 
						||
  phase: 'main',
 | 
						||
  requires: ['popperOffsets'],
 | 
						||
  fn: offset
 | 
						||
};
 | 
						||
 | 
						||
function popperOffsets(_ref) {
 | 
						||
  var state = _ref.state,
 | 
						||
      name = _ref.name;
 | 
						||
  // Offsets are the actual position the popper needs to have to be
 | 
						||
  // properly positioned near its reference element
 | 
						||
  // This is the most basic placement, and will be adjusted by
 | 
						||
  // the modifiers in the next step
 | 
						||
  state.modifiersData[name] = computeOffsets({
 | 
						||
    reference: state.rects.reference,
 | 
						||
    element: state.rects.popper,
 | 
						||
    strategy: 'absolute',
 | 
						||
    placement: state.placement
 | 
						||
  });
 | 
						||
} // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
 | 
						||
var popperOffsets$1 = {
 | 
						||
  name: 'popperOffsets',
 | 
						||
  enabled: true,
 | 
						||
  phase: 'read',
 | 
						||
  fn: popperOffsets,
 | 
						||
  data: {}
 | 
						||
};
 | 
						||
 | 
						||
function getAltAxis(axis) {
 | 
						||
  return axis === 'x' ? 'y' : 'x';
 | 
						||
}
 | 
						||
 | 
						||
function preventOverflow(_ref) {
 | 
						||
  var state = _ref.state,
 | 
						||
      options = _ref.options,
 | 
						||
      name = _ref.name;
 | 
						||
  var _options$mainAxis = options.mainAxis,
 | 
						||
      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
 | 
						||
      _options$altAxis = options.altAxis,
 | 
						||
      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
 | 
						||
      boundary = options.boundary,
 | 
						||
      rootBoundary = options.rootBoundary,
 | 
						||
      altBoundary = options.altBoundary,
 | 
						||
      padding = options.padding,
 | 
						||
      _options$tether = options.tether,
 | 
						||
      tether = _options$tether === void 0 ? true : _options$tether,
 | 
						||
      _options$tetherOffset = options.tetherOffset,
 | 
						||
      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
 | 
						||
  var overflow = detectOverflow(state, {
 | 
						||
    boundary: boundary,
 | 
						||
    rootBoundary: rootBoundary,
 | 
						||
    padding: padding,
 | 
						||
    altBoundary: altBoundary
 | 
						||
  });
 | 
						||
  var basePlacement = getBasePlacement$1(state.placement);
 | 
						||
  var variation = getVariation(state.placement);
 | 
						||
  var isBasePlacement = !variation;
 | 
						||
  var mainAxis = getMainAxisFromPlacement(basePlacement);
 | 
						||
  var altAxis = getAltAxis(mainAxis);
 | 
						||
  var popperOffsets = state.modifiersData.popperOffsets;
 | 
						||
  var referenceRect = state.rects.reference;
 | 
						||
  var popperRect = state.rects.popper;
 | 
						||
  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
 | 
						||
    placement: state.placement
 | 
						||
  })) : tetherOffset;
 | 
						||
  var data = {
 | 
						||
    x: 0,
 | 
						||
    y: 0
 | 
						||
  };
 | 
						||
 | 
						||
  if (!popperOffsets) {
 | 
						||
    return;
 | 
						||
  }
 | 
						||
 | 
						||
  if (checkMainAxis || checkAltAxis) {
 | 
						||
    var mainSide = mainAxis === 'y' ? top : left;
 | 
						||
    var altSide = mainAxis === 'y' ? bottom : right;
 | 
						||
    var len = mainAxis === 'y' ? 'height' : 'width';
 | 
						||
    var offset = popperOffsets[mainAxis];
 | 
						||
    var min$1 = popperOffsets[mainAxis] + overflow[mainSide];
 | 
						||
    var max$1 = popperOffsets[mainAxis] - overflow[altSide];
 | 
						||
    var additive = tether ? -popperRect[len] / 2 : 0;
 | 
						||
    var minLen = variation === start ? referenceRect[len] : popperRect[len];
 | 
						||
    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
 | 
						||
    // outside the reference bounds
 | 
						||
 | 
						||
    var arrowElement = state.elements.arrow;
 | 
						||
    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
 | 
						||
      width: 0,
 | 
						||
      height: 0
 | 
						||
    };
 | 
						||
    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
 | 
						||
    var arrowPaddingMin = arrowPaddingObject[mainSide];
 | 
						||
    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
 | 
						||
    // to include its full size in the calculation. If the reference is small
 | 
						||
    // and near the edge of a boundary, the popper can overflow even if the
 | 
						||
    // reference is not overflowing as well (e.g. virtual elements with no
 | 
						||
    // width or height)
 | 
						||
 | 
						||
    var arrowLen = within(0, referenceRect[len], arrowRect[len]);
 | 
						||
    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;
 | 
						||
    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;
 | 
						||
    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
 | 
						||
    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
 | 
						||
    var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;
 | 
						||
    var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;
 | 
						||
    var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;
 | 
						||
 | 
						||
    if (checkMainAxis) {
 | 
						||
      var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
 | 
						||
      popperOffsets[mainAxis] = preventedOffset;
 | 
						||
      data[mainAxis] = preventedOffset - offset;
 | 
						||
    }
 | 
						||
 | 
						||
    if (checkAltAxis) {
 | 
						||
      var _mainSide = mainAxis === 'x' ? top : left;
 | 
						||
 | 
						||
      var _altSide = mainAxis === 'x' ? bottom : right;
 | 
						||
 | 
						||
      var _offset = popperOffsets[altAxis];
 | 
						||
 | 
						||
      var _min = _offset + overflow[_mainSide];
 | 
						||
 | 
						||
      var _max = _offset - overflow[_altSide];
 | 
						||
 | 
						||
      var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);
 | 
						||
 | 
						||
      popperOffsets[altAxis] = _preventedOffset;
 | 
						||
      data[altAxis] = _preventedOffset - _offset;
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  state.modifiersData[name] = data;
 | 
						||
} // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
 | 
						||
var preventOverflow$1 = {
 | 
						||
  name: 'preventOverflow',
 | 
						||
  enabled: true,
 | 
						||
  phase: 'main',
 | 
						||
  fn: preventOverflow,
 | 
						||
  requiresIfExists: ['offset']
 | 
						||
};
 | 
						||
 | 
						||
function getHTMLElementScroll(element) {
 | 
						||
  return {
 | 
						||
    scrollLeft: element.scrollLeft,
 | 
						||
    scrollTop: element.scrollTop
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function getNodeScroll(node) {
 | 
						||
  if (node === getWindow(node) || !isHTMLElement(node)) {
 | 
						||
    return getWindowScroll(node);
 | 
						||
  } else {
 | 
						||
    return getHTMLElementScroll(node);
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
// Composite means it takes into account transforms as well as layout.
 | 
						||
 | 
						||
function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
 | 
						||
  if (isFixed === void 0) {
 | 
						||
    isFixed = false;
 | 
						||
  }
 | 
						||
 | 
						||
  var documentElement = getDocumentElement(offsetParent);
 | 
						||
  var rect = getBoundingClientRect(elementOrVirtualElement);
 | 
						||
  var isOffsetParentAnElement = isHTMLElement(offsetParent);
 | 
						||
  var scroll = {
 | 
						||
    scrollLeft: 0,
 | 
						||
    scrollTop: 0
 | 
						||
  };
 | 
						||
  var offsets = {
 | 
						||
    x: 0,
 | 
						||
    y: 0
 | 
						||
  };
 | 
						||
 | 
						||
  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
 | 
						||
    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
 | 
						||
    isScrollParent(documentElement)) {
 | 
						||
      scroll = getNodeScroll(offsetParent);
 | 
						||
    }
 | 
						||
 | 
						||
    if (isHTMLElement(offsetParent)) {
 | 
						||
      offsets = getBoundingClientRect(offsetParent);
 | 
						||
      offsets.x += offsetParent.clientLeft;
 | 
						||
      offsets.y += offsetParent.clientTop;
 | 
						||
    } else if (documentElement) {
 | 
						||
      offsets.x = getWindowScrollBarX(documentElement);
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  return {
 | 
						||
    x: rect.left + scroll.scrollLeft - offsets.x,
 | 
						||
    y: rect.top + scroll.scrollTop - offsets.y,
 | 
						||
    width: rect.width,
 | 
						||
    height: rect.height
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function order(modifiers) {
 | 
						||
  var map = new Map();
 | 
						||
  var visited = new Set();
 | 
						||
  var result = [];
 | 
						||
  modifiers.forEach(function (modifier) {
 | 
						||
    map.set(modifier.name, modifier);
 | 
						||
  }); // On visiting object, check for its dependencies and visit them recursively
 | 
						||
 | 
						||
  function sort(modifier) {
 | 
						||
    visited.add(modifier.name);
 | 
						||
    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
 | 
						||
    requires.forEach(function (dep) {
 | 
						||
      if (!visited.has(dep)) {
 | 
						||
        var depModifier = map.get(dep);
 | 
						||
 | 
						||
        if (depModifier) {
 | 
						||
          sort(depModifier);
 | 
						||
        }
 | 
						||
      }
 | 
						||
    });
 | 
						||
    result.push(modifier);
 | 
						||
  }
 | 
						||
 | 
						||
  modifiers.forEach(function (modifier) {
 | 
						||
    if (!visited.has(modifier.name)) {
 | 
						||
      // check for visited object
 | 
						||
      sort(modifier);
 | 
						||
    }
 | 
						||
  });
 | 
						||
  return result;
 | 
						||
}
 | 
						||
 | 
						||
function orderModifiers(modifiers) {
 | 
						||
  // order based on dependencies
 | 
						||
  var orderedModifiers = order(modifiers); // order based on phase
 | 
						||
 | 
						||
  return modifierPhases.reduce(function (acc, phase) {
 | 
						||
    return acc.concat(orderedModifiers.filter(function (modifier) {
 | 
						||
      return modifier.phase === phase;
 | 
						||
    }));
 | 
						||
  }, []);
 | 
						||
}
 | 
						||
 | 
						||
function debounce$1(fn) {
 | 
						||
  var pending;
 | 
						||
  return function () {
 | 
						||
    if (!pending) {
 | 
						||
      pending = new Promise(function (resolve) {
 | 
						||
        Promise.resolve().then(function () {
 | 
						||
          pending = undefined;
 | 
						||
          resolve(fn());
 | 
						||
        });
 | 
						||
      });
 | 
						||
    }
 | 
						||
 | 
						||
    return pending;
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
function format(str) {
 | 
						||
  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
 | 
						||
    args[_key - 1] = arguments[_key];
 | 
						||
  }
 | 
						||
 | 
						||
  return [].concat(args).reduce(function (p, c) {
 | 
						||
    return p.replace(/%s/, c);
 | 
						||
  }, str);
 | 
						||
}
 | 
						||
 | 
						||
var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s';
 | 
						||
var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available';
 | 
						||
var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];
 | 
						||
function validateModifiers(modifiers) {
 | 
						||
  modifiers.forEach(function (modifier) {
 | 
						||
    Object.keys(modifier).forEach(function (key) {
 | 
						||
      switch (key) {
 | 
						||
        case 'name':
 | 
						||
          if (typeof modifier.name !== 'string') {
 | 
						||
            console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\""));
 | 
						||
          }
 | 
						||
 | 
						||
          break;
 | 
						||
 | 
						||
        case 'enabled':
 | 
						||
          if (typeof modifier.enabled !== 'boolean') {
 | 
						||
            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\""));
 | 
						||
          }
 | 
						||
 | 
						||
        case 'phase':
 | 
						||
          if (modifierPhases.indexOf(modifier.phase) < 0) {
 | 
						||
            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\""));
 | 
						||
          }
 | 
						||
 | 
						||
          break;
 | 
						||
 | 
						||
        case 'fn':
 | 
						||
          if (typeof modifier.fn !== 'function') {
 | 
						||
            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\""));
 | 
						||
          }
 | 
						||
 | 
						||
          break;
 | 
						||
 | 
						||
        case 'effect':
 | 
						||
          if (typeof modifier.effect !== 'function') {
 | 
						||
            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\""));
 | 
						||
          }
 | 
						||
 | 
						||
          break;
 | 
						||
 | 
						||
        case 'requires':
 | 
						||
          if (!Array.isArray(modifier.requires)) {
 | 
						||
            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\""));
 | 
						||
          }
 | 
						||
 | 
						||
          break;
 | 
						||
 | 
						||
        case 'requiresIfExists':
 | 
						||
          if (!Array.isArray(modifier.requiresIfExists)) {
 | 
						||
            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\""));
 | 
						||
          }
 | 
						||
 | 
						||
          break;
 | 
						||
 | 
						||
        case 'options':
 | 
						||
        case 'data':
 | 
						||
          break;
 | 
						||
 | 
						||
        default:
 | 
						||
          console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) {
 | 
						||
            return "\"" + s + "\"";
 | 
						||
          }).join(', ') + "; but \"" + key + "\" was provided.");
 | 
						||
      }
 | 
						||
 | 
						||
      modifier.requires && modifier.requires.forEach(function (requirement) {
 | 
						||
        if (modifiers.find(function (mod) {
 | 
						||
          return mod.name === requirement;
 | 
						||
        }) == null) {
 | 
						||
          console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));
 | 
						||
        }
 | 
						||
      });
 | 
						||
    });
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
function uniqueBy(arr, fn) {
 | 
						||
  var identifiers = new Set();
 | 
						||
  return arr.filter(function (item) {
 | 
						||
    var identifier = fn(item);
 | 
						||
 | 
						||
    if (!identifiers.has(identifier)) {
 | 
						||
      identifiers.add(identifier);
 | 
						||
      return true;
 | 
						||
    }
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
function mergeByName(modifiers) {
 | 
						||
  var merged = modifiers.reduce(function (merged, current) {
 | 
						||
    var existing = merged[current.name];
 | 
						||
    merged[current.name] = existing ? Object.assign({}, existing, current, {
 | 
						||
      options: Object.assign({}, existing.options, current.options),
 | 
						||
      data: Object.assign({}, existing.data, current.data)
 | 
						||
    }) : current;
 | 
						||
    return merged;
 | 
						||
  }, {}); // IE11 does not support Object.values
 | 
						||
 | 
						||
  return Object.keys(merged).map(function (key) {
 | 
						||
    return merged[key];
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';
 | 
						||
var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';
 | 
						||
var DEFAULT_OPTIONS = {
 | 
						||
  placement: 'bottom',
 | 
						||
  modifiers: [],
 | 
						||
  strategy: 'absolute'
 | 
						||
};
 | 
						||
 | 
						||
function areValidElements() {
 | 
						||
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
 | 
						||
    args[_key] = arguments[_key];
 | 
						||
  }
 | 
						||
 | 
						||
  return !args.some(function (element) {
 | 
						||
    return !(element && typeof element.getBoundingClientRect === 'function');
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
function popperGenerator(generatorOptions) {
 | 
						||
  if (generatorOptions === void 0) {
 | 
						||
    generatorOptions = {};
 | 
						||
  }
 | 
						||
 | 
						||
  var _generatorOptions = generatorOptions,
 | 
						||
      _generatorOptions$def = _generatorOptions.defaultModifiers,
 | 
						||
      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
 | 
						||
      _generatorOptions$def2 = _generatorOptions.defaultOptions,
 | 
						||
      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
 | 
						||
  return function createPopper(reference, popper, options) {
 | 
						||
    if (options === void 0) {
 | 
						||
      options = defaultOptions;
 | 
						||
    }
 | 
						||
 | 
						||
    var state = {
 | 
						||
      placement: 'bottom',
 | 
						||
      orderedModifiers: [],
 | 
						||
      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
 | 
						||
      modifiersData: {},
 | 
						||
      elements: {
 | 
						||
        reference: reference,
 | 
						||
        popper: popper
 | 
						||
      },
 | 
						||
      attributes: {},
 | 
						||
      styles: {}
 | 
						||
    };
 | 
						||
    var effectCleanupFns = [];
 | 
						||
    var isDestroyed = false;
 | 
						||
    var instance = {
 | 
						||
      state: state,
 | 
						||
      setOptions: function setOptions(options) {
 | 
						||
        cleanupModifierEffects();
 | 
						||
        state.options = Object.assign({}, defaultOptions, state.options, options);
 | 
						||
        state.scrollParents = {
 | 
						||
          reference: isElement$1(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
 | 
						||
          popper: listScrollParents(popper)
 | 
						||
        }; // Orders the modifiers based on their dependencies and `phase`
 | 
						||
        // properties
 | 
						||
 | 
						||
        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
 | 
						||
 | 
						||
        state.orderedModifiers = orderedModifiers.filter(function (m) {
 | 
						||
          return m.enabled;
 | 
						||
        }); // Validate the provided modifiers so that the consumer will get warned
 | 
						||
        // if one of the modifiers is invalid for any reason
 | 
						||
 | 
						||
        if (process.env.NODE_ENV !== "production") {
 | 
						||
          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {
 | 
						||
            var name = _ref.name;
 | 
						||
            return name;
 | 
						||
          });
 | 
						||
          validateModifiers(modifiers);
 | 
						||
 | 
						||
          if (getBasePlacement$1(state.options.placement) === auto) {
 | 
						||
            var flipModifier = state.orderedModifiers.find(function (_ref2) {
 | 
						||
              var name = _ref2.name;
 | 
						||
              return name === 'flip';
 | 
						||
            });
 | 
						||
 | 
						||
            if (!flipModifier) {
 | 
						||
              console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' '));
 | 
						||
            }
 | 
						||
          }
 | 
						||
 | 
						||
          var _getComputedStyle = getComputedStyle$1(popper),
 | 
						||
              marginTop = _getComputedStyle.marginTop,
 | 
						||
              marginRight = _getComputedStyle.marginRight,
 | 
						||
              marginBottom = _getComputedStyle.marginBottom,
 | 
						||
              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can
 | 
						||
          // cause bugs with positioning, so we'll warn the consumer
 | 
						||
 | 
						||
 | 
						||
          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {
 | 
						||
            return parseFloat(margin);
 | 
						||
          })) {
 | 
						||
            console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));
 | 
						||
          }
 | 
						||
        }
 | 
						||
 | 
						||
        runModifierEffects();
 | 
						||
        return instance.update();
 | 
						||
      },
 | 
						||
      // Sync update – it will always be executed, even if not necessary. This
 | 
						||
      // is useful for low frequency updates where sync behavior simplifies the
 | 
						||
      // logic.
 | 
						||
      // For high frequency updates (e.g. `resize` and `scroll` events), always
 | 
						||
      // prefer the async Popper#update method
 | 
						||
      forceUpdate: function forceUpdate() {
 | 
						||
        if (isDestroyed) {
 | 
						||
          return;
 | 
						||
        }
 | 
						||
 | 
						||
        var _state$elements = state.elements,
 | 
						||
            reference = _state$elements.reference,
 | 
						||
            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
 | 
						||
        // anymore
 | 
						||
 | 
						||
        if (!areValidElements(reference, popper)) {
 | 
						||
          if (process.env.NODE_ENV !== "production") {
 | 
						||
            console.error(INVALID_ELEMENT_ERROR);
 | 
						||
          }
 | 
						||
 | 
						||
          return;
 | 
						||
        } // Store the reference and popper rects to be read by modifiers
 | 
						||
 | 
						||
 | 
						||
        state.rects = {
 | 
						||
          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
 | 
						||
          popper: getLayoutRect(popper)
 | 
						||
        }; // Modifiers have the ability to reset the current update cycle. The
 | 
						||
        // most common use case for this is the `flip` modifier changing the
 | 
						||
        // placement, which then needs to re-run all the modifiers, because the
 | 
						||
        // logic was previously ran for the previous placement and is therefore
 | 
						||
        // stale/incorrect
 | 
						||
 | 
						||
        state.reset = false;
 | 
						||
        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
 | 
						||
        // is filled with the initial data specified by the modifier. This means
 | 
						||
        // it doesn't persist and is fresh on each update.
 | 
						||
        // To ensure persistent data, use `${name}#persistent`
 | 
						||
 | 
						||
        state.orderedModifiers.forEach(function (modifier) {
 | 
						||
          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
 | 
						||
        });
 | 
						||
        var __debug_loops__ = 0;
 | 
						||
 | 
						||
        for (var index = 0; index < state.orderedModifiers.length; index++) {
 | 
						||
          if (process.env.NODE_ENV !== "production") {
 | 
						||
            __debug_loops__ += 1;
 | 
						||
 | 
						||
            if (__debug_loops__ > 100) {
 | 
						||
              console.error(INFINITE_LOOP_ERROR);
 | 
						||
              break;
 | 
						||
            }
 | 
						||
          }
 | 
						||
 | 
						||
          if (state.reset === true) {
 | 
						||
            state.reset = false;
 | 
						||
            index = -1;
 | 
						||
            continue;
 | 
						||
          }
 | 
						||
 | 
						||
          var _state$orderedModifie = state.orderedModifiers[index],
 | 
						||
              fn = _state$orderedModifie.fn,
 | 
						||
              _state$orderedModifie2 = _state$orderedModifie.options,
 | 
						||
              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
 | 
						||
              name = _state$orderedModifie.name;
 | 
						||
 | 
						||
          if (typeof fn === 'function') {
 | 
						||
            state = fn({
 | 
						||
              state: state,
 | 
						||
              options: _options,
 | 
						||
              name: name,
 | 
						||
              instance: instance
 | 
						||
            }) || state;
 | 
						||
          }
 | 
						||
        }
 | 
						||
      },
 | 
						||
      // Async and optimistically optimized update – it will not be executed if
 | 
						||
      // not necessary (debounced to run at most once-per-tick)
 | 
						||
      update: debounce$1(function () {
 | 
						||
        return new Promise(function (resolve) {
 | 
						||
          instance.forceUpdate();
 | 
						||
          resolve(state);
 | 
						||
        });
 | 
						||
      }),
 | 
						||
      destroy: function destroy() {
 | 
						||
        cleanupModifierEffects();
 | 
						||
        isDestroyed = true;
 | 
						||
      }
 | 
						||
    };
 | 
						||
 | 
						||
    if (!areValidElements(reference, popper)) {
 | 
						||
      if (process.env.NODE_ENV !== "production") {
 | 
						||
        console.error(INVALID_ELEMENT_ERROR);
 | 
						||
      }
 | 
						||
 | 
						||
      return instance;
 | 
						||
    }
 | 
						||
 | 
						||
    instance.setOptions(options).then(function (state) {
 | 
						||
      if (!isDestroyed && options.onFirstUpdate) {
 | 
						||
        options.onFirstUpdate(state);
 | 
						||
      }
 | 
						||
    }); // Modifiers have the ability to execute arbitrary code before the first
 | 
						||
    // update cycle runs. They will be executed in the same order as the update
 | 
						||
    // cycle. This is useful when a modifier adds some persistent data that
 | 
						||
    // other modifiers need to use, but the modifier is run after the dependent
 | 
						||
    // one.
 | 
						||
 | 
						||
    function runModifierEffects() {
 | 
						||
      state.orderedModifiers.forEach(function (_ref3) {
 | 
						||
        var name = _ref3.name,
 | 
						||
            _ref3$options = _ref3.options,
 | 
						||
            options = _ref3$options === void 0 ? {} : _ref3$options,
 | 
						||
            effect = _ref3.effect;
 | 
						||
 | 
						||
        if (typeof effect === 'function') {
 | 
						||
          var cleanupFn = effect({
 | 
						||
            state: state,
 | 
						||
            name: name,
 | 
						||
            instance: instance,
 | 
						||
            options: options
 | 
						||
          });
 | 
						||
 | 
						||
          var noopFn = function noopFn() {};
 | 
						||
 | 
						||
          effectCleanupFns.push(cleanupFn || noopFn);
 | 
						||
        }
 | 
						||
      });
 | 
						||
    }
 | 
						||
 | 
						||
    function cleanupModifierEffects() {
 | 
						||
      effectCleanupFns.forEach(function (fn) {
 | 
						||
        return fn();
 | 
						||
      });
 | 
						||
      effectCleanupFns = [];
 | 
						||
    }
 | 
						||
 | 
						||
    return instance;
 | 
						||
  };
 | 
						||
}
 | 
						||
 | 
						||
var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
 | 
						||
var createPopper = /*#__PURE__*/popperGenerator({
 | 
						||
  defaultModifiers: defaultModifiers
 | 
						||
}); // eslint-disable-next-line import/no-unused-modules
 | 
						||
 | 
						||
/**!
 | 
						||
* tippy.js v6.3.1
 | 
						||
* (c) 2017-2021 atomiks
 | 
						||
* MIT License
 | 
						||
*/
 | 
						||
var BOX_CLASS = "tippy-box";
 | 
						||
var CONTENT_CLASS = "tippy-content";
 | 
						||
var BACKDROP_CLASS = "tippy-backdrop";
 | 
						||
var ARROW_CLASS = "tippy-arrow";
 | 
						||
var SVG_ARROW_CLASS = "tippy-svg-arrow";
 | 
						||
var TOUCH_OPTIONS = {
 | 
						||
  passive: true,
 | 
						||
  capture: true
 | 
						||
};
 | 
						||
 | 
						||
function hasOwnProperty(obj, key) {
 | 
						||
  return {}.hasOwnProperty.call(obj, key);
 | 
						||
}
 | 
						||
function getValueAtIndexOrReturn(value, index, defaultValue) {
 | 
						||
  if (Array.isArray(value)) {
 | 
						||
    var v = value[index];
 | 
						||
    return v == null ? Array.isArray(defaultValue) ? defaultValue[index] : defaultValue : v;
 | 
						||
  }
 | 
						||
 | 
						||
  return value;
 | 
						||
}
 | 
						||
function isType(value, type) {
 | 
						||
  var str = {}.toString.call(value);
 | 
						||
  return str.indexOf('[object') === 0 && str.indexOf(type + "]") > -1;
 | 
						||
}
 | 
						||
function invokeWithArgsOrReturn(value, args) {
 | 
						||
  return typeof value === 'function' ? value.apply(void 0, args) : value;
 | 
						||
}
 | 
						||
function debounce(fn, ms) {
 | 
						||
  // Avoid wrapping in `setTimeout` if ms is 0 anyway
 | 
						||
  if (ms === 0) {
 | 
						||
    return fn;
 | 
						||
  }
 | 
						||
 | 
						||
  var timeout;
 | 
						||
  return function (arg) {
 | 
						||
    clearTimeout(timeout);
 | 
						||
    timeout = setTimeout(function () {
 | 
						||
      fn(arg);
 | 
						||
    }, ms);
 | 
						||
  };
 | 
						||
}
 | 
						||
function removeProperties(obj, keys) {
 | 
						||
  var clone = Object.assign({}, obj);
 | 
						||
  keys.forEach(function (key) {
 | 
						||
    delete clone[key];
 | 
						||
  });
 | 
						||
  return clone;
 | 
						||
}
 | 
						||
function splitBySpaces(value) {
 | 
						||
  return value.split(/\s+/).filter(Boolean);
 | 
						||
}
 | 
						||
function normalizeToArray(value) {
 | 
						||
  return [].concat(value);
 | 
						||
}
 | 
						||
function pushIfUnique(arr, value) {
 | 
						||
  if (arr.indexOf(value) === -1) {
 | 
						||
    arr.push(value);
 | 
						||
  }
 | 
						||
}
 | 
						||
function unique(arr) {
 | 
						||
  return arr.filter(function (item, index) {
 | 
						||
    return arr.indexOf(item) === index;
 | 
						||
  });
 | 
						||
}
 | 
						||
function getBasePlacement(placement) {
 | 
						||
  return placement.split('-')[0];
 | 
						||
}
 | 
						||
function arrayFrom(value) {
 | 
						||
  return [].slice.call(value);
 | 
						||
}
 | 
						||
function removeUndefinedProps(obj) {
 | 
						||
  return Object.keys(obj).reduce(function (acc, key) {
 | 
						||
    if (obj[key] !== undefined) {
 | 
						||
      acc[key] = obj[key];
 | 
						||
    }
 | 
						||
 | 
						||
    return acc;
 | 
						||
  }, {});
 | 
						||
}
 | 
						||
 | 
						||
function div() {
 | 
						||
  return document.createElement('div');
 | 
						||
}
 | 
						||
function isElement(value) {
 | 
						||
  return ['Element', 'Fragment'].some(function (type) {
 | 
						||
    return isType(value, type);
 | 
						||
  });
 | 
						||
}
 | 
						||
function isNodeList(value) {
 | 
						||
  return isType(value, 'NodeList');
 | 
						||
}
 | 
						||
function isMouseEvent(value) {
 | 
						||
  return isType(value, 'MouseEvent');
 | 
						||
}
 | 
						||
function isReferenceElement(value) {
 | 
						||
  return !!(value && value._tippy && value._tippy.reference === value);
 | 
						||
}
 | 
						||
function getArrayOfElements(value) {
 | 
						||
  if (isElement(value)) {
 | 
						||
    return [value];
 | 
						||
  }
 | 
						||
 | 
						||
  if (isNodeList(value)) {
 | 
						||
    return arrayFrom(value);
 | 
						||
  }
 | 
						||
 | 
						||
  if (Array.isArray(value)) {
 | 
						||
    return value;
 | 
						||
  }
 | 
						||
 | 
						||
  return arrayFrom(document.querySelectorAll(value));
 | 
						||
}
 | 
						||
function setTransitionDuration(els, value) {
 | 
						||
  els.forEach(function (el) {
 | 
						||
    if (el) {
 | 
						||
      el.style.transitionDuration = value + "ms";
 | 
						||
    }
 | 
						||
  });
 | 
						||
}
 | 
						||
function setVisibilityState(els, state) {
 | 
						||
  els.forEach(function (el) {
 | 
						||
    if (el) {
 | 
						||
      el.setAttribute('data-state', state);
 | 
						||
    }
 | 
						||
  });
 | 
						||
}
 | 
						||
function getOwnerDocument(elementOrElements) {
 | 
						||
  var _element$ownerDocumen;
 | 
						||
 | 
						||
  var _normalizeToArray = normalizeToArray(elementOrElements),
 | 
						||
      element = _normalizeToArray[0]; // Elements created via a <template> have an ownerDocument with no reference to the body
 | 
						||
 | 
						||
 | 
						||
  return (element == null ? void 0 : (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body) ? element.ownerDocument : document;
 | 
						||
}
 | 
						||
function isCursorOutsideInteractiveBorder(popperTreeData, event) {
 | 
						||
  var clientX = event.clientX,
 | 
						||
      clientY = event.clientY;
 | 
						||
  return popperTreeData.every(function (_ref) {
 | 
						||
    var popperRect = _ref.popperRect,
 | 
						||
        popperState = _ref.popperState,
 | 
						||
        props = _ref.props;
 | 
						||
    var interactiveBorder = props.interactiveBorder;
 | 
						||
    var basePlacement = getBasePlacement(popperState.placement);
 | 
						||
    var offsetData = popperState.modifiersData.offset;
 | 
						||
 | 
						||
    if (!offsetData) {
 | 
						||
      return true;
 | 
						||
    }
 | 
						||
 | 
						||
    var topDistance = basePlacement === 'bottom' ? offsetData.top.y : 0;
 | 
						||
    var bottomDistance = basePlacement === 'top' ? offsetData.bottom.y : 0;
 | 
						||
    var leftDistance = basePlacement === 'right' ? offsetData.left.x : 0;
 | 
						||
    var rightDistance = basePlacement === 'left' ? offsetData.right.x : 0;
 | 
						||
    var exceedsTop = popperRect.top - clientY + topDistance > interactiveBorder;
 | 
						||
    var exceedsBottom = clientY - popperRect.bottom - bottomDistance > interactiveBorder;
 | 
						||
    var exceedsLeft = popperRect.left - clientX + leftDistance > interactiveBorder;
 | 
						||
    var exceedsRight = clientX - popperRect.right - rightDistance > interactiveBorder;
 | 
						||
    return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;
 | 
						||
  });
 | 
						||
}
 | 
						||
function updateTransitionEndListener(box, action, listener) {
 | 
						||
  var method = action + "EventListener"; // some browsers apparently support `transition` (unprefixed) but only fire
 | 
						||
  // `webkitTransitionEnd`...
 | 
						||
 | 
						||
  ['transitionend', 'webkitTransitionEnd'].forEach(function (event) {
 | 
						||
    box[method](event, listener);
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
var currentInput = {
 | 
						||
  isTouch: false
 | 
						||
};
 | 
						||
var lastMouseMoveTime = 0;
 | 
						||
/**
 | 
						||
 * When a `touchstart` event is fired, it's assumed the user is using touch
 | 
						||
 * input. We'll bind a `mousemove` event listener to listen for mouse input in
 | 
						||
 * the future. This way, the `isTouch` property is fully dynamic and will handle
 | 
						||
 * hybrid devices that use a mix of touch + mouse input.
 | 
						||
 */
 | 
						||
 | 
						||
function onDocumentTouchStart() {
 | 
						||
  if (currentInput.isTouch) {
 | 
						||
    return;
 | 
						||
  }
 | 
						||
 | 
						||
  currentInput.isTouch = true;
 | 
						||
 | 
						||
  if (window.performance) {
 | 
						||
    document.addEventListener('mousemove', onDocumentMouseMove);
 | 
						||
  }
 | 
						||
}
 | 
						||
/**
 | 
						||
 * When two `mousemove` event are fired consecutively within 20ms, it's assumed
 | 
						||
 * the user is using mouse input again. `mousemove` can fire on touch devices as
 | 
						||
 * well, but very rarely that quickly.
 | 
						||
 */
 | 
						||
 | 
						||
function onDocumentMouseMove() {
 | 
						||
  var now = performance.now();
 | 
						||
 | 
						||
  if (now - lastMouseMoveTime < 20) {
 | 
						||
    currentInput.isTouch = false;
 | 
						||
    document.removeEventListener('mousemove', onDocumentMouseMove);
 | 
						||
  }
 | 
						||
 | 
						||
  lastMouseMoveTime = now;
 | 
						||
}
 | 
						||
/**
 | 
						||
 * When an element is in focus and has a tippy, leaving the tab/window and
 | 
						||
 * returning causes it to show again. For mouse users this is unexpected, but
 | 
						||
 * for keyboard use it makes sense.
 | 
						||
 * TODO: find a better technique to solve this problem
 | 
						||
 */
 | 
						||
 | 
						||
function onWindowBlur() {
 | 
						||
  var activeElement = document.activeElement;
 | 
						||
 | 
						||
  if (isReferenceElement(activeElement)) {
 | 
						||
    var instance = activeElement._tippy;
 | 
						||
 | 
						||
    if (activeElement.blur && !instance.state.isVisible) {
 | 
						||
      activeElement.blur();
 | 
						||
    }
 | 
						||
  }
 | 
						||
}
 | 
						||
function bindGlobalEventListeners() {
 | 
						||
  document.addEventListener('touchstart', onDocumentTouchStart, TOUCH_OPTIONS);
 | 
						||
  window.addEventListener('blur', onWindowBlur);
 | 
						||
}
 | 
						||
 | 
						||
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
 | 
						||
var ua = isBrowser ? navigator.userAgent : '';
 | 
						||
var isIE = /MSIE |Trident\//.test(ua);
 | 
						||
 | 
						||
function createMemoryLeakWarning(method) {
 | 
						||
  var txt = method === 'destroy' ? 'n already-' : ' ';
 | 
						||
  return [method + "() was called on a" + txt + "destroyed instance. This is a no-op but", 'indicates a potential memory leak.'].join(' ');
 | 
						||
}
 | 
						||
function clean(value) {
 | 
						||
  var spacesAndTabs = /[ \t]{2,}/g;
 | 
						||
  var lineStartWithSpaces = /^[ \t]*/gm;
 | 
						||
  return value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();
 | 
						||
}
 | 
						||
 | 
						||
function getDevMessage(message) {
 | 
						||
  return clean("\n  %ctippy.js\n\n  %c" + clean(message) + "\n\n  %c\uD83D\uDC77\u200D This is a development-only message. It will be removed in production.\n  ");
 | 
						||
}
 | 
						||
 | 
						||
function getFormattedMessage(message) {
 | 
						||
  return [getDevMessage(message), // title
 | 
						||
  'color: #00C584; font-size: 1.3em; font-weight: bold;', // message
 | 
						||
  'line-height: 1.5', // footer
 | 
						||
  'color: #a6a095;'];
 | 
						||
} // Assume warnings and errors never have the same message
 | 
						||
 | 
						||
var visitedMessages;
 | 
						||
 | 
						||
if (process.env.NODE_ENV !== "production") {
 | 
						||
  resetVisitedMessages();
 | 
						||
}
 | 
						||
 | 
						||
function resetVisitedMessages() {
 | 
						||
  visitedMessages = new Set();
 | 
						||
}
 | 
						||
function warnWhen(condition, message) {
 | 
						||
  if (condition && !visitedMessages.has(message)) {
 | 
						||
    var _console;
 | 
						||
 | 
						||
    visitedMessages.add(message);
 | 
						||
 | 
						||
    (_console = console).warn.apply(_console, getFormattedMessage(message));
 | 
						||
  }
 | 
						||
}
 | 
						||
function errorWhen(condition, message) {
 | 
						||
  if (condition && !visitedMessages.has(message)) {
 | 
						||
    var _console2;
 | 
						||
 | 
						||
    visitedMessages.add(message);
 | 
						||
 | 
						||
    (_console2 = console).error.apply(_console2, getFormattedMessage(message));
 | 
						||
  }
 | 
						||
}
 | 
						||
function validateTargets(targets) {
 | 
						||
  var didPassFalsyValue = !targets;
 | 
						||
  var didPassPlainObject = Object.prototype.toString.call(targets) === '[object Object]' && !targets.addEventListener;
 | 
						||
  errorWhen(didPassFalsyValue, ['tippy() was passed', '`' + String(targets) + '`', 'as its targets (first) argument. Valid types are: String, Element,', 'Element[], or NodeList.'].join(' '));
 | 
						||
  errorWhen(didPassPlainObject, ['tippy() was passed a plain object which is not supported as an argument', 'for virtual positioning. Use props.getReferenceClientRect instead.'].join(' '));
 | 
						||
}
 | 
						||
 | 
						||
var pluginProps = {
 | 
						||
  animateFill: false,
 | 
						||
  followCursor: false,
 | 
						||
  inlinePositioning: false,
 | 
						||
  sticky: false
 | 
						||
};
 | 
						||
var renderProps = {
 | 
						||
  allowHTML: false,
 | 
						||
  animation: 'fade',
 | 
						||
  arrow: true,
 | 
						||
  content: '',
 | 
						||
  inertia: false,
 | 
						||
  maxWidth: 350,
 | 
						||
  role: 'tooltip',
 | 
						||
  theme: '',
 | 
						||
  zIndex: 9999
 | 
						||
};
 | 
						||
var defaultProps = Object.assign({
 | 
						||
  appendTo: function appendTo() {
 | 
						||
    return document.body;
 | 
						||
  },
 | 
						||
  aria: {
 | 
						||
    content: 'auto',
 | 
						||
    expanded: 'auto'
 | 
						||
  },
 | 
						||
  delay: 0,
 | 
						||
  duration: [300, 250],
 | 
						||
  getReferenceClientRect: null,
 | 
						||
  hideOnClick: true,
 | 
						||
  ignoreAttributes: false,
 | 
						||
  interactive: false,
 | 
						||
  interactiveBorder: 2,
 | 
						||
  interactiveDebounce: 0,
 | 
						||
  moveTransition: '',
 | 
						||
  offset: [0, 10],
 | 
						||
  onAfterUpdate: function onAfterUpdate() {},
 | 
						||
  onBeforeUpdate: function onBeforeUpdate() {},
 | 
						||
  onCreate: function onCreate() {},
 | 
						||
  onDestroy: function onDestroy() {},
 | 
						||
  onHidden: function onHidden() {},
 | 
						||
  onHide: function onHide() {},
 | 
						||
  onMount: function onMount() {},
 | 
						||
  onShow: function onShow() {},
 | 
						||
  onShown: function onShown() {},
 | 
						||
  onTrigger: function onTrigger() {},
 | 
						||
  onUntrigger: function onUntrigger() {},
 | 
						||
  onClickOutside: function onClickOutside() {},
 | 
						||
  placement: 'top',
 | 
						||
  plugins: [],
 | 
						||
  popperOptions: {},
 | 
						||
  render: null,
 | 
						||
  showOnCreate: false,
 | 
						||
  touch: true,
 | 
						||
  trigger: 'mouseenter focus',
 | 
						||
  triggerTarget: null
 | 
						||
}, pluginProps, {}, renderProps);
 | 
						||
var defaultKeys = Object.keys(defaultProps);
 | 
						||
var setDefaultProps = function setDefaultProps(partialProps) {
 | 
						||
  /* istanbul ignore else */
 | 
						||
  if (process.env.NODE_ENV !== "production") {
 | 
						||
    validateProps(partialProps, []);
 | 
						||
  }
 | 
						||
 | 
						||
  var keys = Object.keys(partialProps);
 | 
						||
  keys.forEach(function (key) {
 | 
						||
    defaultProps[key] = partialProps[key];
 | 
						||
  });
 | 
						||
};
 | 
						||
function getExtendedPassedProps(passedProps) {
 | 
						||
  var plugins = passedProps.plugins || [];
 | 
						||
  var pluginProps = plugins.reduce(function (acc, plugin) {
 | 
						||
    var name = plugin.name,
 | 
						||
        defaultValue = plugin.defaultValue;
 | 
						||
 | 
						||
    if (name) {
 | 
						||
      acc[name] = passedProps[name] !== undefined ? passedProps[name] : defaultValue;
 | 
						||
    }
 | 
						||
 | 
						||
    return acc;
 | 
						||
  }, {});
 | 
						||
  return Object.assign({}, passedProps, {}, pluginProps);
 | 
						||
}
 | 
						||
function getDataAttributeProps(reference, plugins) {
 | 
						||
  var propKeys = plugins ? Object.keys(getExtendedPassedProps(Object.assign({}, defaultProps, {
 | 
						||
    plugins: plugins
 | 
						||
  }))) : defaultKeys;
 | 
						||
  var props = propKeys.reduce(function (acc, key) {
 | 
						||
    var valueAsString = (reference.getAttribute("data-tippy-" + key) || '').trim();
 | 
						||
 | 
						||
    if (!valueAsString) {
 | 
						||
      return acc;
 | 
						||
    }
 | 
						||
 | 
						||
    if (key === 'content') {
 | 
						||
      acc[key] = valueAsString;
 | 
						||
    } else {
 | 
						||
      try {
 | 
						||
        acc[key] = JSON.parse(valueAsString);
 | 
						||
      } catch (e) {
 | 
						||
        acc[key] = valueAsString;
 | 
						||
      }
 | 
						||
    }
 | 
						||
 | 
						||
    return acc;
 | 
						||
  }, {});
 | 
						||
  return props;
 | 
						||
}
 | 
						||
function evaluateProps(reference, props) {
 | 
						||
  var out = Object.assign({}, props, {
 | 
						||
    content: invokeWithArgsOrReturn(props.content, [reference])
 | 
						||
  }, props.ignoreAttributes ? {} : getDataAttributeProps(reference, props.plugins));
 | 
						||
  out.aria = Object.assign({}, defaultProps.aria, {}, out.aria);
 | 
						||
  out.aria = {
 | 
						||
    expanded: out.aria.expanded === 'auto' ? props.interactive : out.aria.expanded,
 | 
						||
    content: out.aria.content === 'auto' ? props.interactive ? null : 'describedby' : out.aria.content
 | 
						||
  };
 | 
						||
  return out;
 | 
						||
}
 | 
						||
function validateProps(partialProps, plugins) {
 | 
						||
  if (partialProps === void 0) {
 | 
						||
    partialProps = {};
 | 
						||
  }
 | 
						||
 | 
						||
  if (plugins === void 0) {
 | 
						||
    plugins = [];
 | 
						||
  }
 | 
						||
 | 
						||
  var keys = Object.keys(partialProps);
 | 
						||
  keys.forEach(function (prop) {
 | 
						||
    var nonPluginProps = removeProperties(defaultProps, Object.keys(pluginProps));
 | 
						||
    var didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop); // Check if the prop exists in `plugins`
 | 
						||
 | 
						||
    if (didPassUnknownProp) {
 | 
						||
      didPassUnknownProp = plugins.filter(function (plugin) {
 | 
						||
        return plugin.name === prop;
 | 
						||
      }).length === 0;
 | 
						||
    }
 | 
						||
 | 
						||
    warnWhen(didPassUnknownProp, ["`" + prop + "`", "is not a valid prop. You may have spelled it incorrectly, or if it's", 'a plugin, forgot to pass it in an array as props.plugins.', '\n\n', 'All props: https://atomiks.github.io/tippyjs/v6/all-props/\n', 'Plugins: https://atomiks.github.io/tippyjs/v6/plugins/'].join(' '));
 | 
						||
  });
 | 
						||
}
 | 
						||
 | 
						||
var innerHTML = function innerHTML() {
 | 
						||
  return 'innerHTML';
 | 
						||
};
 | 
						||
 | 
						||
function dangerouslySetInnerHTML(element, html) {
 | 
						||
  element[innerHTML()] = html;
 | 
						||
}
 | 
						||
 | 
						||
function createArrowElement(value) {
 | 
						||
  var arrow = div();
 | 
						||
 | 
						||
  if (value === true) {
 | 
						||
    arrow.className = ARROW_CLASS;
 | 
						||
  } else {
 | 
						||
    arrow.className = SVG_ARROW_CLASS;
 | 
						||
 | 
						||
    if (isElement(value)) {
 | 
						||
      arrow.appendChild(value);
 | 
						||
    } else {
 | 
						||
      dangerouslySetInnerHTML(arrow, value);
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  return arrow;
 | 
						||
}
 | 
						||
 | 
						||
function setContent(content, props) {
 | 
						||
  if (isElement(props.content)) {
 | 
						||
    dangerouslySetInnerHTML(content, '');
 | 
						||
    content.appendChild(props.content);
 | 
						||
  } else if (typeof props.content !== 'function') {
 | 
						||
    if (props.allowHTML) {
 | 
						||
      dangerouslySetInnerHTML(content, props.content);
 | 
						||
    } else {
 | 
						||
      content.textContent = props.content;
 | 
						||
    }
 | 
						||
  }
 | 
						||
}
 | 
						||
function getChildren(popper) {
 | 
						||
  var box = popper.firstElementChild;
 | 
						||
  var boxChildren = arrayFrom(box.children);
 | 
						||
  return {
 | 
						||
    box: box,
 | 
						||
    content: boxChildren.find(function (node) {
 | 
						||
      return node.classList.contains(CONTENT_CLASS);
 | 
						||
    }),
 | 
						||
    arrow: boxChildren.find(function (node) {
 | 
						||
      return node.classList.contains(ARROW_CLASS) || node.classList.contains(SVG_ARROW_CLASS);
 | 
						||
    }),
 | 
						||
    backdrop: boxChildren.find(function (node) {
 | 
						||
      return node.classList.contains(BACKDROP_CLASS);
 | 
						||
    })
 | 
						||
  };
 | 
						||
}
 | 
						||
function render(instance) {
 | 
						||
  var popper = div();
 | 
						||
  var box = div();
 | 
						||
  box.className = BOX_CLASS;
 | 
						||
  box.setAttribute('data-state', 'hidden');
 | 
						||
  box.setAttribute('tabindex', '-1');
 | 
						||
  var content = div();
 | 
						||
  content.className = CONTENT_CLASS;
 | 
						||
  content.setAttribute('data-state', 'hidden');
 | 
						||
  setContent(content, instance.props);
 | 
						||
  popper.appendChild(box);
 | 
						||
  box.appendChild(content);
 | 
						||
  onUpdate(instance.props, instance.props);
 | 
						||
 | 
						||
  function onUpdate(prevProps, nextProps) {
 | 
						||
    var _getChildren = getChildren(popper),
 | 
						||
        box = _getChildren.box,
 | 
						||
        content = _getChildren.content,
 | 
						||
        arrow = _getChildren.arrow;
 | 
						||
 | 
						||
    if (nextProps.theme) {
 | 
						||
      box.setAttribute('data-theme', nextProps.theme);
 | 
						||
    } else {
 | 
						||
      box.removeAttribute('data-theme');
 | 
						||
    }
 | 
						||
 | 
						||
    if (typeof nextProps.animation === 'string') {
 | 
						||
      box.setAttribute('data-animation', nextProps.animation);
 | 
						||
    } else {
 | 
						||
      box.removeAttribute('data-animation');
 | 
						||
    }
 | 
						||
 | 
						||
    if (nextProps.inertia) {
 | 
						||
      box.setAttribute('data-inertia', '');
 | 
						||
    } else {
 | 
						||
      box.removeAttribute('data-inertia');
 | 
						||
    }
 | 
						||
 | 
						||
    box.style.maxWidth = typeof nextProps.maxWidth === 'number' ? nextProps.maxWidth + "px" : nextProps.maxWidth;
 | 
						||
 | 
						||
    if (nextProps.role) {
 | 
						||
      box.setAttribute('role', nextProps.role);
 | 
						||
    } else {
 | 
						||
      box.removeAttribute('role');
 | 
						||
    }
 | 
						||
 | 
						||
    if (prevProps.content !== nextProps.content || prevProps.allowHTML !== nextProps.allowHTML) {
 | 
						||
      setContent(content, instance.props);
 | 
						||
    }
 | 
						||
 | 
						||
    if (nextProps.arrow) {
 | 
						||
      if (!arrow) {
 | 
						||
        box.appendChild(createArrowElement(nextProps.arrow));
 | 
						||
      } else if (prevProps.arrow !== nextProps.arrow) {
 | 
						||
        box.removeChild(arrow);
 | 
						||
        box.appendChild(createArrowElement(nextProps.arrow));
 | 
						||
      }
 | 
						||
    } else if (arrow) {
 | 
						||
      box.removeChild(arrow);
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  return {
 | 
						||
    popper: popper,
 | 
						||
    onUpdate: onUpdate
 | 
						||
  };
 | 
						||
} // Runtime check to identify if the render function is the default one; this
 | 
						||
// way we can apply default CSS transitions logic and it can be tree-shaken away
 | 
						||
 | 
						||
render.$$tippy = true;
 | 
						||
 | 
						||
var idCounter = 1;
 | 
						||
var mouseMoveListeners = []; // Used by `hideAll()`
 | 
						||
 | 
						||
var mountedInstances = [];
 | 
						||
function createTippy(reference, passedProps) {
 | 
						||
  var props = evaluateProps(reference, Object.assign({}, defaultProps, {}, getExtendedPassedProps(removeUndefinedProps(passedProps)))); // ===========================================================================
 | 
						||
  // 🔒 Private members
 | 
						||
  // ===========================================================================
 | 
						||
 | 
						||
  var showTimeout;
 | 
						||
  var hideTimeout;
 | 
						||
  var scheduleHideAnimationFrame;
 | 
						||
  var isVisibleFromClick = false;
 | 
						||
  var didHideDueToDocumentMouseDown = false;
 | 
						||
  var didTouchMove = false;
 | 
						||
  var ignoreOnFirstUpdate = false;
 | 
						||
  var lastTriggerEvent;
 | 
						||
  var currentTransitionEndListener;
 | 
						||
  var onFirstUpdate;
 | 
						||
  var listeners = [];
 | 
						||
  var debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce);
 | 
						||
  var currentTarget; // ===========================================================================
 | 
						||
  // 🔑 Public members
 | 
						||
  // ===========================================================================
 | 
						||
 | 
						||
  var id = idCounter++;
 | 
						||
  var popperInstance = null;
 | 
						||
  var plugins = unique(props.plugins);
 | 
						||
  var state = {
 | 
						||
    // Is the instance currently enabled?
 | 
						||
    isEnabled: true,
 | 
						||
    // Is the tippy currently showing and not transitioning out?
 | 
						||
    isVisible: false,
 | 
						||
    // Has the instance been destroyed?
 | 
						||
    isDestroyed: false,
 | 
						||
    // Is the tippy currently mounted to the DOM?
 | 
						||
    isMounted: false,
 | 
						||
    // Has the tippy finished transitioning in?
 | 
						||
    isShown: false
 | 
						||
  };
 | 
						||
  var instance = {
 | 
						||
    // properties
 | 
						||
    id: id,
 | 
						||
    reference: reference,
 | 
						||
    popper: div(),
 | 
						||
    popperInstance: popperInstance,
 | 
						||
    props: props,
 | 
						||
    state: state,
 | 
						||
    plugins: plugins,
 | 
						||
    // methods
 | 
						||
    clearDelayTimeouts: clearDelayTimeouts,
 | 
						||
    setProps: setProps,
 | 
						||
    setContent: setContent,
 | 
						||
    show: show,
 | 
						||
    hide: hide,
 | 
						||
    hideWithInteractivity: hideWithInteractivity,
 | 
						||
    enable: enable,
 | 
						||
    disable: disable,
 | 
						||
    unmount: unmount,
 | 
						||
    destroy: destroy
 | 
						||
  }; // TODO: Investigate why this early return causes a TDZ error in the tests —
 | 
						||
  // it doesn't seem to happen in the browser
 | 
						||
 | 
						||
  /* istanbul ignore if */
 | 
						||
 | 
						||
  if (!props.render) {
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      errorWhen(true, 'render() function has not been supplied.');
 | 
						||
    }
 | 
						||
 | 
						||
    return instance;
 | 
						||
  } // ===========================================================================
 | 
						||
  // Initial mutations
 | 
						||
  // ===========================================================================
 | 
						||
 | 
						||
 | 
						||
  var _props$render = props.render(instance),
 | 
						||
      popper = _props$render.popper,
 | 
						||
      onUpdate = _props$render.onUpdate;
 | 
						||
 | 
						||
  popper.setAttribute('data-tippy-root', '');
 | 
						||
  popper.id = "tippy-" + instance.id;
 | 
						||
  instance.popper = popper;
 | 
						||
  reference._tippy = instance;
 | 
						||
  popper._tippy = instance;
 | 
						||
  var pluginsHooks = plugins.map(function (plugin) {
 | 
						||
    return plugin.fn(instance);
 | 
						||
  });
 | 
						||
  var hasAriaExpanded = reference.hasAttribute('aria-expanded');
 | 
						||
  addListeners();
 | 
						||
  handleAriaExpandedAttribute();
 | 
						||
  handleStyles();
 | 
						||
  invokeHook('onCreate', [instance]);
 | 
						||
 | 
						||
  if (props.showOnCreate) {
 | 
						||
    scheduleShow();
 | 
						||
  } // Prevent a tippy with a delay from hiding if the cursor left then returned
 | 
						||
  // before it started hiding
 | 
						||
 | 
						||
 | 
						||
  popper.addEventListener('mouseenter', function () {
 | 
						||
    if (instance.props.interactive && instance.state.isVisible) {
 | 
						||
      instance.clearDelayTimeouts();
 | 
						||
    }
 | 
						||
  });
 | 
						||
  popper.addEventListener('mouseleave', function (event) {
 | 
						||
    if (instance.props.interactive && instance.props.trigger.indexOf('mouseenter') >= 0) {
 | 
						||
      getDocument().addEventListener('mousemove', debouncedOnMouseMove);
 | 
						||
      debouncedOnMouseMove(event);
 | 
						||
    }
 | 
						||
  });
 | 
						||
  return instance; // ===========================================================================
 | 
						||
  // 🔒 Private methods
 | 
						||
  // ===========================================================================
 | 
						||
 | 
						||
  function getNormalizedTouchSettings() {
 | 
						||
    var touch = instance.props.touch;
 | 
						||
    return Array.isArray(touch) ? touch : [touch, 0];
 | 
						||
  }
 | 
						||
 | 
						||
  function getIsCustomTouchBehavior() {
 | 
						||
    return getNormalizedTouchSettings()[0] === 'hold';
 | 
						||
  }
 | 
						||
 | 
						||
  function getIsDefaultRenderFn() {
 | 
						||
    var _instance$props$rende;
 | 
						||
 | 
						||
    // @ts-ignore
 | 
						||
    return !!((_instance$props$rende = instance.props.render) == null ? void 0 : _instance$props$rende.$$tippy);
 | 
						||
  }
 | 
						||
 | 
						||
  function getCurrentTarget() {
 | 
						||
    return currentTarget || reference;
 | 
						||
  }
 | 
						||
 | 
						||
  function getDocument() {
 | 
						||
    var parent = getCurrentTarget().parentNode;
 | 
						||
    return parent ? getOwnerDocument(parent) : document;
 | 
						||
  }
 | 
						||
 | 
						||
  function getDefaultTemplateChildren() {
 | 
						||
    return getChildren(popper);
 | 
						||
  }
 | 
						||
 | 
						||
  function getDelay(isShow) {
 | 
						||
    // For touch or keyboard input, force `0` delay for UX reasons
 | 
						||
    // Also if the instance is mounted but not visible (transitioning out),
 | 
						||
    // ignore delay
 | 
						||
    if (instance.state.isMounted && !instance.state.isVisible || currentInput.isTouch || lastTriggerEvent && lastTriggerEvent.type === 'focus') {
 | 
						||
      return 0;
 | 
						||
    }
 | 
						||
 | 
						||
    return getValueAtIndexOrReturn(instance.props.delay, isShow ? 0 : 1, defaultProps.delay);
 | 
						||
  }
 | 
						||
 | 
						||
  function handleStyles() {
 | 
						||
    popper.style.pointerEvents = instance.props.interactive && instance.state.isVisible ? '' : 'none';
 | 
						||
    popper.style.zIndex = "" + instance.props.zIndex;
 | 
						||
  }
 | 
						||
 | 
						||
  function invokeHook(hook, args, shouldInvokePropsHook) {
 | 
						||
    if (shouldInvokePropsHook === void 0) {
 | 
						||
      shouldInvokePropsHook = true;
 | 
						||
    }
 | 
						||
 | 
						||
    pluginsHooks.forEach(function (pluginHooks) {
 | 
						||
      if (pluginHooks[hook]) {
 | 
						||
        pluginHooks[hook].apply(void 0, args);
 | 
						||
      }
 | 
						||
    });
 | 
						||
 | 
						||
    if (shouldInvokePropsHook) {
 | 
						||
      var _instance$props;
 | 
						||
 | 
						||
      (_instance$props = instance.props)[hook].apply(_instance$props, args);
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  function handleAriaContentAttribute() {
 | 
						||
    var aria = instance.props.aria;
 | 
						||
 | 
						||
    if (!aria.content) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    var attr = "aria-" + aria.content;
 | 
						||
    var id = popper.id;
 | 
						||
    var nodes = normalizeToArray(instance.props.triggerTarget || reference);
 | 
						||
    nodes.forEach(function (node) {
 | 
						||
      var currentValue = node.getAttribute(attr);
 | 
						||
 | 
						||
      if (instance.state.isVisible) {
 | 
						||
        node.setAttribute(attr, currentValue ? currentValue + " " + id : id);
 | 
						||
      } else {
 | 
						||
        var nextValue = currentValue && currentValue.replace(id, '').trim();
 | 
						||
 | 
						||
        if (nextValue) {
 | 
						||
          node.setAttribute(attr, nextValue);
 | 
						||
        } else {
 | 
						||
          node.removeAttribute(attr);
 | 
						||
        }
 | 
						||
      }
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  function handleAriaExpandedAttribute() {
 | 
						||
    if (hasAriaExpanded || !instance.props.aria.expanded) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    var nodes = normalizeToArray(instance.props.triggerTarget || reference);
 | 
						||
    nodes.forEach(function (node) {
 | 
						||
      if (instance.props.interactive) {
 | 
						||
        node.setAttribute('aria-expanded', instance.state.isVisible && node === getCurrentTarget() ? 'true' : 'false');
 | 
						||
      } else {
 | 
						||
        node.removeAttribute('aria-expanded');
 | 
						||
      }
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  function cleanupInteractiveMouseListeners() {
 | 
						||
    getDocument().removeEventListener('mousemove', debouncedOnMouseMove);
 | 
						||
    mouseMoveListeners = mouseMoveListeners.filter(function (listener) {
 | 
						||
      return listener !== debouncedOnMouseMove;
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  function onDocumentPress(event) {
 | 
						||
    // Moved finger to scroll instead of an intentional tap outside
 | 
						||
    if (currentInput.isTouch) {
 | 
						||
      if (didTouchMove || event.type === 'mousedown') {
 | 
						||
        return;
 | 
						||
      }
 | 
						||
    } // Clicked on interactive popper
 | 
						||
 | 
						||
 | 
						||
    if (instance.props.interactive && popper.contains(event.target)) {
 | 
						||
      return;
 | 
						||
    } // Clicked on the event listeners target
 | 
						||
 | 
						||
 | 
						||
    if (getCurrentTarget().contains(event.target)) {
 | 
						||
      if (currentInput.isTouch) {
 | 
						||
        return;
 | 
						||
      }
 | 
						||
 | 
						||
      if (instance.state.isVisible && instance.props.trigger.indexOf('click') >= 0) {
 | 
						||
        return;
 | 
						||
      }
 | 
						||
    } else {
 | 
						||
      invokeHook('onClickOutside', [instance, event]);
 | 
						||
    }
 | 
						||
 | 
						||
    if (instance.props.hideOnClick === true) {
 | 
						||
      instance.clearDelayTimeouts();
 | 
						||
      instance.hide(); // `mousedown` event is fired right before `focus` if pressing the
 | 
						||
      // currentTarget. This lets a tippy with `focus` trigger know that it
 | 
						||
      // should not show
 | 
						||
 | 
						||
      didHideDueToDocumentMouseDown = true;
 | 
						||
      setTimeout(function () {
 | 
						||
        didHideDueToDocumentMouseDown = false;
 | 
						||
      }); // The listener gets added in `scheduleShow()`, but this may be hiding it
 | 
						||
      // before it shows, and hide()'s early bail-out behavior can prevent it
 | 
						||
      // from being cleaned up
 | 
						||
 | 
						||
      if (!instance.state.isMounted) {
 | 
						||
        removeDocumentPress();
 | 
						||
      }
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  function onTouchMove() {
 | 
						||
    didTouchMove = true;
 | 
						||
  }
 | 
						||
 | 
						||
  function onTouchStart() {
 | 
						||
    didTouchMove = false;
 | 
						||
  }
 | 
						||
 | 
						||
  function addDocumentPress() {
 | 
						||
    var doc = getDocument();
 | 
						||
    doc.addEventListener('mousedown', onDocumentPress, true);
 | 
						||
    doc.addEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);
 | 
						||
    doc.addEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);
 | 
						||
    doc.addEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);
 | 
						||
  }
 | 
						||
 | 
						||
  function removeDocumentPress() {
 | 
						||
    var doc = getDocument();
 | 
						||
    doc.removeEventListener('mousedown', onDocumentPress, true);
 | 
						||
    doc.removeEventListener('touchend', onDocumentPress, TOUCH_OPTIONS);
 | 
						||
    doc.removeEventListener('touchstart', onTouchStart, TOUCH_OPTIONS);
 | 
						||
    doc.removeEventListener('touchmove', onTouchMove, TOUCH_OPTIONS);
 | 
						||
  }
 | 
						||
 | 
						||
  function onTransitionedOut(duration, callback) {
 | 
						||
    onTransitionEnd(duration, function () {
 | 
						||
      if (!instance.state.isVisible && popper.parentNode && popper.parentNode.contains(popper)) {
 | 
						||
        callback();
 | 
						||
      }
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  function onTransitionedIn(duration, callback) {
 | 
						||
    onTransitionEnd(duration, callback);
 | 
						||
  }
 | 
						||
 | 
						||
  function onTransitionEnd(duration, callback) {
 | 
						||
    var box = getDefaultTemplateChildren().box;
 | 
						||
 | 
						||
    function listener(event) {
 | 
						||
      if (event.target === box) {
 | 
						||
        updateTransitionEndListener(box, 'remove', listener);
 | 
						||
        callback();
 | 
						||
      }
 | 
						||
    } // Make callback synchronous if duration is 0
 | 
						||
    // `transitionend` won't fire otherwise
 | 
						||
 | 
						||
 | 
						||
    if (duration === 0) {
 | 
						||
      return callback();
 | 
						||
    }
 | 
						||
 | 
						||
    updateTransitionEndListener(box, 'remove', currentTransitionEndListener);
 | 
						||
    updateTransitionEndListener(box, 'add', listener);
 | 
						||
    currentTransitionEndListener = listener;
 | 
						||
  }
 | 
						||
 | 
						||
  function on(eventType, handler, options) {
 | 
						||
    if (options === void 0) {
 | 
						||
      options = false;
 | 
						||
    }
 | 
						||
 | 
						||
    var nodes = normalizeToArray(instance.props.triggerTarget || reference);
 | 
						||
    nodes.forEach(function (node) {
 | 
						||
      node.addEventListener(eventType, handler, options);
 | 
						||
      listeners.push({
 | 
						||
        node: node,
 | 
						||
        eventType: eventType,
 | 
						||
        handler: handler,
 | 
						||
        options: options
 | 
						||
      });
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  function addListeners() {
 | 
						||
    if (getIsCustomTouchBehavior()) {
 | 
						||
      on('touchstart', onTrigger, {
 | 
						||
        passive: true
 | 
						||
      });
 | 
						||
      on('touchend', onMouseLeave, {
 | 
						||
        passive: true
 | 
						||
      });
 | 
						||
    }
 | 
						||
 | 
						||
    splitBySpaces(instance.props.trigger).forEach(function (eventType) {
 | 
						||
      if (eventType === 'manual') {
 | 
						||
        return;
 | 
						||
      }
 | 
						||
 | 
						||
      on(eventType, onTrigger);
 | 
						||
 | 
						||
      switch (eventType) {
 | 
						||
        case 'mouseenter':
 | 
						||
          on('mouseleave', onMouseLeave);
 | 
						||
          break;
 | 
						||
 | 
						||
        case 'focus':
 | 
						||
          on(isIE ? 'focusout' : 'blur', onBlurOrFocusOut);
 | 
						||
          break;
 | 
						||
 | 
						||
        case 'focusin':
 | 
						||
          on('focusout', onBlurOrFocusOut);
 | 
						||
          break;
 | 
						||
      }
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  function removeListeners() {
 | 
						||
    listeners.forEach(function (_ref) {
 | 
						||
      var node = _ref.node,
 | 
						||
          eventType = _ref.eventType,
 | 
						||
          handler = _ref.handler,
 | 
						||
          options = _ref.options;
 | 
						||
      node.removeEventListener(eventType, handler, options);
 | 
						||
    });
 | 
						||
    listeners = [];
 | 
						||
  }
 | 
						||
 | 
						||
  function onTrigger(event) {
 | 
						||
    var _lastTriggerEvent;
 | 
						||
 | 
						||
    var shouldScheduleClickHide = false;
 | 
						||
 | 
						||
    if (!instance.state.isEnabled || isEventListenerStopped(event) || didHideDueToDocumentMouseDown) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    var wasFocused = ((_lastTriggerEvent = lastTriggerEvent) == null ? void 0 : _lastTriggerEvent.type) === 'focus';
 | 
						||
    lastTriggerEvent = event;
 | 
						||
    currentTarget = event.currentTarget;
 | 
						||
    handleAriaExpandedAttribute();
 | 
						||
 | 
						||
    if (!instance.state.isVisible && isMouseEvent(event)) {
 | 
						||
      // If scrolling, `mouseenter` events can be fired if the cursor lands
 | 
						||
      // over a new target, but `mousemove` events don't get fired. This
 | 
						||
      // causes interactive tooltips to get stuck open until the cursor is
 | 
						||
      // moved
 | 
						||
      mouseMoveListeners.forEach(function (listener) {
 | 
						||
        return listener(event);
 | 
						||
      });
 | 
						||
    } // Toggle show/hide when clicking click-triggered tooltips
 | 
						||
 | 
						||
 | 
						||
    if (event.type === 'click' && (instance.props.trigger.indexOf('mouseenter') < 0 || isVisibleFromClick) && instance.props.hideOnClick !== false && instance.state.isVisible) {
 | 
						||
      shouldScheduleClickHide = true;
 | 
						||
    } else {
 | 
						||
      scheduleShow(event);
 | 
						||
    }
 | 
						||
 | 
						||
    if (event.type === 'click') {
 | 
						||
      isVisibleFromClick = !shouldScheduleClickHide;
 | 
						||
    }
 | 
						||
 | 
						||
    if (shouldScheduleClickHide && !wasFocused) {
 | 
						||
      scheduleHide(event);
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  function onMouseMove(event) {
 | 
						||
    var target = event.target;
 | 
						||
    var isCursorOverReferenceOrPopper = getCurrentTarget().contains(target) || popper.contains(target);
 | 
						||
 | 
						||
    if (event.type === 'mousemove' && isCursorOverReferenceOrPopper) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    var popperTreeData = getNestedPopperTree().concat(popper).map(function (popper) {
 | 
						||
      var _instance$popperInsta;
 | 
						||
 | 
						||
      var instance = popper._tippy;
 | 
						||
      var state = (_instance$popperInsta = instance.popperInstance) == null ? void 0 : _instance$popperInsta.state;
 | 
						||
 | 
						||
      if (state) {
 | 
						||
        return {
 | 
						||
          popperRect: popper.getBoundingClientRect(),
 | 
						||
          popperState: state,
 | 
						||
          props: props
 | 
						||
        };
 | 
						||
      }
 | 
						||
 | 
						||
      return null;
 | 
						||
    }).filter(Boolean);
 | 
						||
 | 
						||
    if (isCursorOutsideInteractiveBorder(popperTreeData, event)) {
 | 
						||
      cleanupInteractiveMouseListeners();
 | 
						||
      scheduleHide(event);
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  function onMouseLeave(event) {
 | 
						||
    var shouldBail = isEventListenerStopped(event) || instance.props.trigger.indexOf('click') >= 0 && isVisibleFromClick;
 | 
						||
 | 
						||
    if (shouldBail) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    if (instance.props.interactive) {
 | 
						||
      instance.hideWithInteractivity(event);
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    scheduleHide(event);
 | 
						||
  }
 | 
						||
 | 
						||
  function onBlurOrFocusOut(event) {
 | 
						||
    if (instance.props.trigger.indexOf('focusin') < 0 && event.target !== getCurrentTarget()) {
 | 
						||
      return;
 | 
						||
    } // If focus was moved to within the popper
 | 
						||
 | 
						||
 | 
						||
    if (instance.props.interactive && event.relatedTarget && popper.contains(event.relatedTarget)) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    scheduleHide(event);
 | 
						||
  }
 | 
						||
 | 
						||
  function isEventListenerStopped(event) {
 | 
						||
    return currentInput.isTouch ? getIsCustomTouchBehavior() !== event.type.indexOf('touch') >= 0 : false;
 | 
						||
  }
 | 
						||
 | 
						||
  function createPopperInstance() {
 | 
						||
    destroyPopperInstance();
 | 
						||
    var _instance$props2 = instance.props,
 | 
						||
        popperOptions = _instance$props2.popperOptions,
 | 
						||
        placement = _instance$props2.placement,
 | 
						||
        offset = _instance$props2.offset,
 | 
						||
        getReferenceClientRect = _instance$props2.getReferenceClientRect,
 | 
						||
        moveTransition = _instance$props2.moveTransition;
 | 
						||
    var arrow = getIsDefaultRenderFn() ? getChildren(popper).arrow : null;
 | 
						||
    var computedReference = getReferenceClientRect ? {
 | 
						||
      getBoundingClientRect: getReferenceClientRect,
 | 
						||
      contextElement: getReferenceClientRect.contextElement || getCurrentTarget()
 | 
						||
    } : reference;
 | 
						||
    var tippyModifier = {
 | 
						||
      name: '$$tippy',
 | 
						||
      enabled: true,
 | 
						||
      phase: 'beforeWrite',
 | 
						||
      requires: ['computeStyles'],
 | 
						||
      fn: function fn(_ref2) {
 | 
						||
        var state = _ref2.state;
 | 
						||
 | 
						||
        if (getIsDefaultRenderFn()) {
 | 
						||
          var _getDefaultTemplateCh = getDefaultTemplateChildren(),
 | 
						||
              box = _getDefaultTemplateCh.box;
 | 
						||
 | 
						||
          ['placement', 'reference-hidden', 'escaped'].forEach(function (attr) {
 | 
						||
            if (attr === 'placement') {
 | 
						||
              box.setAttribute('data-placement', state.placement);
 | 
						||
            } else {
 | 
						||
              if (state.attributes.popper["data-popper-" + attr]) {
 | 
						||
                box.setAttribute("data-" + attr, '');
 | 
						||
              } else {
 | 
						||
                box.removeAttribute("data-" + attr);
 | 
						||
              }
 | 
						||
            }
 | 
						||
          });
 | 
						||
          state.attributes.popper = {};
 | 
						||
        }
 | 
						||
      }
 | 
						||
    };
 | 
						||
    var modifiers = [{
 | 
						||
      name: 'offset',
 | 
						||
      options: {
 | 
						||
        offset: offset
 | 
						||
      }
 | 
						||
    }, {
 | 
						||
      name: 'preventOverflow',
 | 
						||
      options: {
 | 
						||
        padding: {
 | 
						||
          top: 2,
 | 
						||
          bottom: 2,
 | 
						||
          left: 5,
 | 
						||
          right: 5
 | 
						||
        }
 | 
						||
      }
 | 
						||
    }, {
 | 
						||
      name: 'flip',
 | 
						||
      options: {
 | 
						||
        padding: 5
 | 
						||
      }
 | 
						||
    }, {
 | 
						||
      name: 'computeStyles',
 | 
						||
      options: {
 | 
						||
        adaptive: !moveTransition
 | 
						||
      }
 | 
						||
    }, tippyModifier];
 | 
						||
 | 
						||
    if (getIsDefaultRenderFn() && arrow) {
 | 
						||
      modifiers.push({
 | 
						||
        name: 'arrow',
 | 
						||
        options: {
 | 
						||
          element: arrow,
 | 
						||
          padding: 3
 | 
						||
        }
 | 
						||
      });
 | 
						||
    }
 | 
						||
 | 
						||
    modifiers.push.apply(modifiers, (popperOptions == null ? void 0 : popperOptions.modifiers) || []);
 | 
						||
    instance.popperInstance = createPopper(computedReference, popper, Object.assign({}, popperOptions, {
 | 
						||
      placement: placement,
 | 
						||
      onFirstUpdate: onFirstUpdate,
 | 
						||
      modifiers: modifiers
 | 
						||
    }));
 | 
						||
  }
 | 
						||
 | 
						||
  function destroyPopperInstance() {
 | 
						||
    if (instance.popperInstance) {
 | 
						||
      instance.popperInstance.destroy();
 | 
						||
      instance.popperInstance = null;
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  function mount() {
 | 
						||
    var appendTo = instance.props.appendTo;
 | 
						||
    var parentNode; // By default, we'll append the popper to the triggerTargets's parentNode so
 | 
						||
    // it's directly after the reference element so the elements inside the
 | 
						||
    // tippy can be tabbed to
 | 
						||
    // If there are clipping issues, the user can specify a different appendTo
 | 
						||
    // and ensure focus management is handled correctly manually
 | 
						||
 | 
						||
    var node = getCurrentTarget();
 | 
						||
 | 
						||
    if (instance.props.interactive && appendTo === defaultProps.appendTo || appendTo === 'parent') {
 | 
						||
      parentNode = node.parentNode;
 | 
						||
    } else {
 | 
						||
      parentNode = invokeWithArgsOrReturn(appendTo, [node]);
 | 
						||
    } // The popper element needs to exist on the DOM before its position can be
 | 
						||
    // updated as Popper needs to read its dimensions
 | 
						||
 | 
						||
 | 
						||
    if (!parentNode.contains(popper)) {
 | 
						||
      parentNode.appendChild(popper);
 | 
						||
    }
 | 
						||
 | 
						||
    createPopperInstance();
 | 
						||
    /* istanbul ignore else */
 | 
						||
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      // Accessibility check
 | 
						||
      warnWhen(instance.props.interactive && appendTo === defaultProps.appendTo && node.nextElementSibling !== popper, ['Interactive tippy element may not be accessible via keyboard', 'navigation because it is not directly after the reference element', 'in the DOM source order.', '\n\n', 'Using a wrapper <div> or <span> tag around the reference element', 'solves this by creating a new parentNode context.', '\n\n', 'Specifying `appendTo: document.body` silences this warning, but it', 'assumes you are using a focus management solution to handle', 'keyboard navigation.', '\n\n', 'See: https://atomiks.github.io/tippyjs/v6/accessibility/#interactivity'].join(' '));
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  function getNestedPopperTree() {
 | 
						||
    return arrayFrom(popper.querySelectorAll('[data-tippy-root]'));
 | 
						||
  }
 | 
						||
 | 
						||
  function scheduleShow(event) {
 | 
						||
    instance.clearDelayTimeouts();
 | 
						||
 | 
						||
    if (event) {
 | 
						||
      invokeHook('onTrigger', [instance, event]);
 | 
						||
    }
 | 
						||
 | 
						||
    addDocumentPress();
 | 
						||
    var delay = getDelay(true);
 | 
						||
 | 
						||
    var _getNormalizedTouchSe = getNormalizedTouchSettings(),
 | 
						||
        touchValue = _getNormalizedTouchSe[0],
 | 
						||
        touchDelay = _getNormalizedTouchSe[1];
 | 
						||
 | 
						||
    if (currentInput.isTouch && touchValue === 'hold' && touchDelay) {
 | 
						||
      delay = touchDelay;
 | 
						||
    }
 | 
						||
 | 
						||
    if (delay) {
 | 
						||
      showTimeout = setTimeout(function () {
 | 
						||
        instance.show();
 | 
						||
      }, delay);
 | 
						||
    } else {
 | 
						||
      instance.show();
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  function scheduleHide(event) {
 | 
						||
    instance.clearDelayTimeouts();
 | 
						||
    invokeHook('onUntrigger', [instance, event]);
 | 
						||
 | 
						||
    if (!instance.state.isVisible) {
 | 
						||
      removeDocumentPress();
 | 
						||
      return;
 | 
						||
    } // For interactive tippies, scheduleHide is added to a document.body handler
 | 
						||
    // from onMouseLeave so must intercept scheduled hides from mousemove/leave
 | 
						||
    // events when trigger contains mouseenter and click, and the tip is
 | 
						||
    // currently shown as a result of a click.
 | 
						||
 | 
						||
 | 
						||
    if (instance.props.trigger.indexOf('mouseenter') >= 0 && instance.props.trigger.indexOf('click') >= 0 && ['mouseleave', 'mousemove'].indexOf(event.type) >= 0 && isVisibleFromClick) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    var delay = getDelay(false);
 | 
						||
 | 
						||
    if (delay) {
 | 
						||
      hideTimeout = setTimeout(function () {
 | 
						||
        if (instance.state.isVisible) {
 | 
						||
          instance.hide();
 | 
						||
        }
 | 
						||
      }, delay);
 | 
						||
    } else {
 | 
						||
      // Fixes a `transitionend` problem when it fires 1 frame too
 | 
						||
      // late sometimes, we don't want hide() to be called.
 | 
						||
      scheduleHideAnimationFrame = requestAnimationFrame(function () {
 | 
						||
        instance.hide();
 | 
						||
      });
 | 
						||
    }
 | 
						||
  } // ===========================================================================
 | 
						||
  // 🔑 Public methods
 | 
						||
  // ===========================================================================
 | 
						||
 | 
						||
 | 
						||
  function enable() {
 | 
						||
    instance.state.isEnabled = true;
 | 
						||
  }
 | 
						||
 | 
						||
  function disable() {
 | 
						||
    // Disabling the instance should also hide it
 | 
						||
    // https://github.com/atomiks/tippy.js-react/issues/106
 | 
						||
    instance.hide();
 | 
						||
    instance.state.isEnabled = false;
 | 
						||
  }
 | 
						||
 | 
						||
  function clearDelayTimeouts() {
 | 
						||
    clearTimeout(showTimeout);
 | 
						||
    clearTimeout(hideTimeout);
 | 
						||
    cancelAnimationFrame(scheduleHideAnimationFrame);
 | 
						||
  }
 | 
						||
 | 
						||
  function setProps(partialProps) {
 | 
						||
    /* istanbul ignore else */
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('setProps'));
 | 
						||
    }
 | 
						||
 | 
						||
    if (instance.state.isDestroyed) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    invokeHook('onBeforeUpdate', [instance, partialProps]);
 | 
						||
    removeListeners();
 | 
						||
    var prevProps = instance.props;
 | 
						||
    var nextProps = evaluateProps(reference, Object.assign({}, instance.props, {}, partialProps, {
 | 
						||
      ignoreAttributes: true
 | 
						||
    }));
 | 
						||
    instance.props = nextProps;
 | 
						||
    addListeners();
 | 
						||
 | 
						||
    if (prevProps.interactiveDebounce !== nextProps.interactiveDebounce) {
 | 
						||
      cleanupInteractiveMouseListeners();
 | 
						||
      debouncedOnMouseMove = debounce(onMouseMove, nextProps.interactiveDebounce);
 | 
						||
    } // Ensure stale aria-expanded attributes are removed
 | 
						||
 | 
						||
 | 
						||
    if (prevProps.triggerTarget && !nextProps.triggerTarget) {
 | 
						||
      normalizeToArray(prevProps.triggerTarget).forEach(function (node) {
 | 
						||
        node.removeAttribute('aria-expanded');
 | 
						||
      });
 | 
						||
    } else if (nextProps.triggerTarget) {
 | 
						||
      reference.removeAttribute('aria-expanded');
 | 
						||
    }
 | 
						||
 | 
						||
    handleAriaExpandedAttribute();
 | 
						||
    handleStyles();
 | 
						||
 | 
						||
    if (onUpdate) {
 | 
						||
      onUpdate(prevProps, nextProps);
 | 
						||
    }
 | 
						||
 | 
						||
    if (instance.popperInstance) {
 | 
						||
      createPopperInstance(); // Fixes an issue with nested tippies if they are all getting re-rendered,
 | 
						||
      // and the nested ones get re-rendered first.
 | 
						||
      // https://github.com/atomiks/tippyjs-react/issues/177
 | 
						||
      // TODO: find a cleaner / more efficient solution(!)
 | 
						||
 | 
						||
      getNestedPopperTree().forEach(function (nestedPopper) {
 | 
						||
        // React (and other UI libs likely) requires a rAF wrapper as it flushes
 | 
						||
        // its work in one
 | 
						||
        requestAnimationFrame(nestedPopper._tippy.popperInstance.forceUpdate);
 | 
						||
      });
 | 
						||
    }
 | 
						||
 | 
						||
    invokeHook('onAfterUpdate', [instance, partialProps]);
 | 
						||
  }
 | 
						||
 | 
						||
  function setContent(content) {
 | 
						||
    instance.setProps({
 | 
						||
      content: content
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  function show() {
 | 
						||
    /* istanbul ignore else */
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('show'));
 | 
						||
    } // Early bail-out
 | 
						||
 | 
						||
 | 
						||
    var isAlreadyVisible = instance.state.isVisible;
 | 
						||
    var isDestroyed = instance.state.isDestroyed;
 | 
						||
    var isDisabled = !instance.state.isEnabled;
 | 
						||
    var isTouchAndTouchDisabled = currentInput.isTouch && !instance.props.touch;
 | 
						||
    var duration = getValueAtIndexOrReturn(instance.props.duration, 0, defaultProps.duration);
 | 
						||
 | 
						||
    if (isAlreadyVisible || isDestroyed || isDisabled || isTouchAndTouchDisabled) {
 | 
						||
      return;
 | 
						||
    } // Normalize `disabled` behavior across browsers.
 | 
						||
    // Firefox allows events on disabled elements, but Chrome doesn't.
 | 
						||
    // Using a wrapper element (i.e. <span>) is recommended.
 | 
						||
 | 
						||
 | 
						||
    if (getCurrentTarget().hasAttribute('disabled')) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    invokeHook('onShow', [instance], false);
 | 
						||
 | 
						||
    if (instance.props.onShow(instance) === false) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    instance.state.isVisible = true;
 | 
						||
 | 
						||
    if (getIsDefaultRenderFn()) {
 | 
						||
      popper.style.visibility = 'visible';
 | 
						||
    }
 | 
						||
 | 
						||
    handleStyles();
 | 
						||
    addDocumentPress();
 | 
						||
 | 
						||
    if (!instance.state.isMounted) {
 | 
						||
      popper.style.transition = 'none';
 | 
						||
    } // If flipping to the opposite side after hiding at least once, the
 | 
						||
    // animation will use the wrong placement without resetting the duration
 | 
						||
 | 
						||
 | 
						||
    if (getIsDefaultRenderFn()) {
 | 
						||
      var _getDefaultTemplateCh2 = getDefaultTemplateChildren(),
 | 
						||
          box = _getDefaultTemplateCh2.box,
 | 
						||
          content = _getDefaultTemplateCh2.content;
 | 
						||
 | 
						||
      setTransitionDuration([box, content], 0);
 | 
						||
    }
 | 
						||
 | 
						||
    onFirstUpdate = function onFirstUpdate() {
 | 
						||
      var _instance$popperInsta2;
 | 
						||
 | 
						||
      if (!instance.state.isVisible || ignoreOnFirstUpdate) {
 | 
						||
        return;
 | 
						||
      }
 | 
						||
 | 
						||
      ignoreOnFirstUpdate = true; // reflow
 | 
						||
 | 
						||
      void popper.offsetHeight;
 | 
						||
      popper.style.transition = instance.props.moveTransition;
 | 
						||
 | 
						||
      if (getIsDefaultRenderFn() && instance.props.animation) {
 | 
						||
        var _getDefaultTemplateCh3 = getDefaultTemplateChildren(),
 | 
						||
            _box = _getDefaultTemplateCh3.box,
 | 
						||
            _content = _getDefaultTemplateCh3.content;
 | 
						||
 | 
						||
        setTransitionDuration([_box, _content], duration);
 | 
						||
        setVisibilityState([_box, _content], 'visible');
 | 
						||
      }
 | 
						||
 | 
						||
      handleAriaContentAttribute();
 | 
						||
      handleAriaExpandedAttribute();
 | 
						||
      pushIfUnique(mountedInstances, instance); // certain modifiers (e.g. `maxSize`) require a second update after the
 | 
						||
      // popper has been positioned for the first time
 | 
						||
 | 
						||
      (_instance$popperInsta2 = instance.popperInstance) == null ? void 0 : _instance$popperInsta2.forceUpdate();
 | 
						||
      instance.state.isMounted = true;
 | 
						||
      invokeHook('onMount', [instance]);
 | 
						||
 | 
						||
      if (instance.props.animation && getIsDefaultRenderFn()) {
 | 
						||
        onTransitionedIn(duration, function () {
 | 
						||
          instance.state.isShown = true;
 | 
						||
          invokeHook('onShown', [instance]);
 | 
						||
        });
 | 
						||
      }
 | 
						||
    };
 | 
						||
 | 
						||
    mount();
 | 
						||
  }
 | 
						||
 | 
						||
  function hide() {
 | 
						||
    /* istanbul ignore else */
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hide'));
 | 
						||
    } // Early bail-out
 | 
						||
 | 
						||
 | 
						||
    var isAlreadyHidden = !instance.state.isVisible;
 | 
						||
    var isDestroyed = instance.state.isDestroyed;
 | 
						||
    var isDisabled = !instance.state.isEnabled;
 | 
						||
    var duration = getValueAtIndexOrReturn(instance.props.duration, 1, defaultProps.duration);
 | 
						||
 | 
						||
    if (isAlreadyHidden || isDestroyed || isDisabled) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    invokeHook('onHide', [instance], false);
 | 
						||
 | 
						||
    if (instance.props.onHide(instance) === false) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    instance.state.isVisible = false;
 | 
						||
    instance.state.isShown = false;
 | 
						||
    ignoreOnFirstUpdate = false;
 | 
						||
    isVisibleFromClick = false;
 | 
						||
 | 
						||
    if (getIsDefaultRenderFn()) {
 | 
						||
      popper.style.visibility = 'hidden';
 | 
						||
    }
 | 
						||
 | 
						||
    cleanupInteractiveMouseListeners();
 | 
						||
    removeDocumentPress();
 | 
						||
    handleStyles();
 | 
						||
 | 
						||
    if (getIsDefaultRenderFn()) {
 | 
						||
      var _getDefaultTemplateCh4 = getDefaultTemplateChildren(),
 | 
						||
          box = _getDefaultTemplateCh4.box,
 | 
						||
          content = _getDefaultTemplateCh4.content;
 | 
						||
 | 
						||
      if (instance.props.animation) {
 | 
						||
        setTransitionDuration([box, content], duration);
 | 
						||
        setVisibilityState([box, content], 'hidden');
 | 
						||
      }
 | 
						||
    }
 | 
						||
 | 
						||
    handleAriaContentAttribute();
 | 
						||
    handleAriaExpandedAttribute();
 | 
						||
 | 
						||
    if (instance.props.animation) {
 | 
						||
      if (getIsDefaultRenderFn()) {
 | 
						||
        onTransitionedOut(duration, instance.unmount);
 | 
						||
      }
 | 
						||
    } else {
 | 
						||
      instance.unmount();
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  function hideWithInteractivity(event) {
 | 
						||
    /* istanbul ignore else */
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('hideWithInteractivity'));
 | 
						||
    }
 | 
						||
 | 
						||
    getDocument().addEventListener('mousemove', debouncedOnMouseMove);
 | 
						||
    pushIfUnique(mouseMoveListeners, debouncedOnMouseMove);
 | 
						||
    debouncedOnMouseMove(event);
 | 
						||
  }
 | 
						||
 | 
						||
  function unmount() {
 | 
						||
    /* istanbul ignore else */
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('unmount'));
 | 
						||
    }
 | 
						||
 | 
						||
    if (instance.state.isVisible) {
 | 
						||
      instance.hide();
 | 
						||
    }
 | 
						||
 | 
						||
    if (!instance.state.isMounted) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    destroyPopperInstance(); // If a popper is not interactive, it will be appended outside the popper
 | 
						||
    // tree by default. This seems mainly for interactive tippies, but we should
 | 
						||
    // find a workaround if possible
 | 
						||
 | 
						||
    getNestedPopperTree().forEach(function (nestedPopper) {
 | 
						||
      nestedPopper._tippy.unmount();
 | 
						||
    });
 | 
						||
 | 
						||
    if (popper.parentNode) {
 | 
						||
      popper.parentNode.removeChild(popper);
 | 
						||
    }
 | 
						||
 | 
						||
    mountedInstances = mountedInstances.filter(function (i) {
 | 
						||
      return i !== instance;
 | 
						||
    });
 | 
						||
    instance.state.isMounted = false;
 | 
						||
    invokeHook('onHidden', [instance]);
 | 
						||
  }
 | 
						||
 | 
						||
  function destroy() {
 | 
						||
    /* istanbul ignore else */
 | 
						||
    if (process.env.NODE_ENV !== "production") {
 | 
						||
      warnWhen(instance.state.isDestroyed, createMemoryLeakWarning('destroy'));
 | 
						||
    }
 | 
						||
 | 
						||
    if (instance.state.isDestroyed) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    instance.clearDelayTimeouts();
 | 
						||
    instance.unmount();
 | 
						||
    removeListeners();
 | 
						||
    delete reference._tippy;
 | 
						||
    instance.state.isDestroyed = true;
 | 
						||
    invokeHook('onDestroy', [instance]);
 | 
						||
  }
 | 
						||
}
 | 
						||
 | 
						||
function tippy(targets, optionalProps) {
 | 
						||
  if (optionalProps === void 0) {
 | 
						||
    optionalProps = {};
 | 
						||
  }
 | 
						||
 | 
						||
  var plugins = defaultProps.plugins.concat(optionalProps.plugins || []);
 | 
						||
  /* istanbul ignore else */
 | 
						||
 | 
						||
  if (process.env.NODE_ENV !== "production") {
 | 
						||
    validateTargets(targets);
 | 
						||
    validateProps(optionalProps, plugins);
 | 
						||
  }
 | 
						||
 | 
						||
  bindGlobalEventListeners();
 | 
						||
  var passedProps = Object.assign({}, optionalProps, {
 | 
						||
    plugins: plugins
 | 
						||
  });
 | 
						||
  var elements = getArrayOfElements(targets);
 | 
						||
  /* istanbul ignore else */
 | 
						||
 | 
						||
  if (process.env.NODE_ENV !== "production") {
 | 
						||
    var isSingleContentElement = isElement(passedProps.content);
 | 
						||
    var isMoreThanOneReferenceElement = elements.length > 1;
 | 
						||
    warnWhen(isSingleContentElement && isMoreThanOneReferenceElement, ['tippy() was passed an Element as the `content` prop, but more than', 'one tippy instance was created by this invocation. This means the', 'content element will only be appended to the last tippy instance.', '\n\n', 'Instead, pass the .innerHTML of the element, or use a function that', 'returns a cloned version of the element instead.', '\n\n', '1) content: element.innerHTML\n', '2) content: () => element.cloneNode(true)'].join(' '));
 | 
						||
  }
 | 
						||
 | 
						||
  var instances = elements.reduce(function (acc, reference) {
 | 
						||
    var instance = reference && createTippy(reference, passedProps);
 | 
						||
 | 
						||
    if (instance) {
 | 
						||
      acc.push(instance);
 | 
						||
    }
 | 
						||
 | 
						||
    return acc;
 | 
						||
  }, []);
 | 
						||
  return isElement(targets) ? instances[0] : instances;
 | 
						||
}
 | 
						||
 | 
						||
tippy.defaultProps = defaultProps;
 | 
						||
tippy.setDefaultProps = setDefaultProps;
 | 
						||
tippy.currentInput = currentInput;
 | 
						||
 | 
						||
// every time the popper is destroyed (i.e. a new target), removing the styles
 | 
						||
// and causing transitions to break for singletons when the console is open, but
 | 
						||
// most notably for non-transform styles being used, `gpuAcceleration: false`.
 | 
						||
 | 
						||
var applyStylesModifier = Object.assign({}, applyStyles$1, {
 | 
						||
  effect: function effect(_ref) {
 | 
						||
    var state = _ref.state;
 | 
						||
    var initialStyles = {
 | 
						||
      popper: {
 | 
						||
        position: state.options.strategy,
 | 
						||
        left: '0',
 | 
						||
        top: '0',
 | 
						||
        margin: '0'
 | 
						||
      },
 | 
						||
      arrow: {
 | 
						||
        position: 'absolute'
 | 
						||
      },
 | 
						||
      reference: {}
 | 
						||
    };
 | 
						||
    Object.assign(state.elements.popper.style, initialStyles.popper);
 | 
						||
    state.styles = initialStyles;
 | 
						||
 | 
						||
    if (state.elements.arrow) {
 | 
						||
      Object.assign(state.elements.arrow.style, initialStyles.arrow);
 | 
						||
    } // intentionally return no cleanup function
 | 
						||
    // return () => { ... }
 | 
						||
 | 
						||
  }
 | 
						||
});
 | 
						||
 | 
						||
var createSingleton = function createSingleton(tippyInstances, optionalProps) {
 | 
						||
  var _optionalProps$popper;
 | 
						||
 | 
						||
  if (optionalProps === void 0) {
 | 
						||
    optionalProps = {};
 | 
						||
  }
 | 
						||
 | 
						||
  /* istanbul ignore else */
 | 
						||
  if (process.env.NODE_ENV !== "production") {
 | 
						||
    errorWhen(!Array.isArray(tippyInstances), ['The first argument passed to createSingleton() must be an array of', 'tippy instances. The passed value was', String(tippyInstances)].join(' '));
 | 
						||
  }
 | 
						||
 | 
						||
  var individualInstances = tippyInstances;
 | 
						||
  var references = [];
 | 
						||
  var currentTarget;
 | 
						||
  var overrides = optionalProps.overrides;
 | 
						||
  var interceptSetPropsCleanups = [];
 | 
						||
  var shownOnCreate = false;
 | 
						||
 | 
						||
  function setReferences() {
 | 
						||
    references = individualInstances.map(function (instance) {
 | 
						||
      return instance.reference;
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  function enableInstances(isEnabled) {
 | 
						||
    individualInstances.forEach(function (instance) {
 | 
						||
      if (isEnabled) {
 | 
						||
        instance.enable();
 | 
						||
      } else {
 | 
						||
        instance.disable();
 | 
						||
      }
 | 
						||
    });
 | 
						||
  }
 | 
						||
 | 
						||
  function interceptSetProps(singleton) {
 | 
						||
    return individualInstances.map(function (instance) {
 | 
						||
      var originalSetProps = instance.setProps;
 | 
						||
 | 
						||
      instance.setProps = function (props) {
 | 
						||
        originalSetProps(props);
 | 
						||
 | 
						||
        if (instance.reference === currentTarget) {
 | 
						||
          singleton.setProps(props);
 | 
						||
        }
 | 
						||
      };
 | 
						||
 | 
						||
      return function () {
 | 
						||
        instance.setProps = originalSetProps;
 | 
						||
      };
 | 
						||
    });
 | 
						||
  } // have to pass singleton, as it maybe undefined on first call
 | 
						||
 | 
						||
 | 
						||
  function prepareInstance(singleton, target) {
 | 
						||
    var index = references.indexOf(target); // bail-out
 | 
						||
 | 
						||
    if (target === currentTarget) {
 | 
						||
      return;
 | 
						||
    }
 | 
						||
 | 
						||
    currentTarget = target;
 | 
						||
    var overrideProps = (overrides || []).concat('content').reduce(function (acc, prop) {
 | 
						||
      acc[prop] = individualInstances[index].props[prop];
 | 
						||
      return acc;
 | 
						||
    }, {});
 | 
						||
    singleton.setProps(Object.assign({}, overrideProps, {
 | 
						||
      getReferenceClientRect: typeof overrideProps.getReferenceClientRect === 'function' ? overrideProps.getReferenceClientRect : function () {
 | 
						||
        return target.getBoundingClientRect();
 | 
						||
      }
 | 
						||
    }));
 | 
						||
  }
 | 
						||
 | 
						||
  enableInstances(false);
 | 
						||
  setReferences();
 | 
						||
  var plugin = {
 | 
						||
    fn: function fn() {
 | 
						||
      return {
 | 
						||
        onDestroy: function onDestroy() {
 | 
						||
          enableInstances(true);
 | 
						||
        },
 | 
						||
        onHidden: function onHidden() {
 | 
						||
          currentTarget = null;
 | 
						||
        },
 | 
						||
        onClickOutside: function onClickOutside(instance) {
 | 
						||
          if (instance.props.showOnCreate && !shownOnCreate) {
 | 
						||
            shownOnCreate = true;
 | 
						||
            currentTarget = null;
 | 
						||
          }
 | 
						||
        },
 | 
						||
        onShow: function onShow(instance) {
 | 
						||
          if (instance.props.showOnCreate && !shownOnCreate) {
 | 
						||
            shownOnCreate = true;
 | 
						||
            prepareInstance(instance, references[0]);
 | 
						||
          }
 | 
						||
        },
 | 
						||
        onTrigger: function onTrigger(instance, event) {
 | 
						||
          prepareInstance(instance, event.currentTarget);
 | 
						||
        }
 | 
						||
      };
 | 
						||
    }
 | 
						||
  };
 | 
						||
  var singleton = tippy(div(), Object.assign({}, removeProperties(optionalProps, ['overrides']), {
 | 
						||
    plugins: [plugin].concat(optionalProps.plugins || []),
 | 
						||
    triggerTarget: references,
 | 
						||
    popperOptions: Object.assign({}, optionalProps.popperOptions, {
 | 
						||
      modifiers: [].concat(((_optionalProps$popper = optionalProps.popperOptions) == null ? void 0 : _optionalProps$popper.modifiers) || [], [applyStylesModifier])
 | 
						||
    })
 | 
						||
  }));
 | 
						||
  var originalShow = singleton.show;
 | 
						||
 | 
						||
  singleton.show = function (target) {
 | 
						||
    originalShow(); // first time, showOnCreate or programmatic call with no params
 | 
						||
    // default to showing first instance
 | 
						||
 | 
						||
    if (!currentTarget && target == null) {
 | 
						||
      return prepareInstance(singleton, references[0]);
 | 
						||
    } // triggered from event (do nothing as prepareInstance already called by onTrigger)
 | 
						||
    // programmatic call with no params when already visible (do nothing again)
 | 
						||
 | 
						||
 | 
						||
    if (currentTarget && target == null) {
 | 
						||
      return;
 | 
						||
    } // target is index of instance
 | 
						||
 | 
						||
 | 
						||
    if (typeof target === 'number') {
 | 
						||
      return references[target] && prepareInstance(singleton, references[target]);
 | 
						||
    } // target is a child tippy instance
 | 
						||
 | 
						||
 | 
						||
    if (individualInstances.includes(target)) {
 | 
						||
      var ref = target.reference;
 | 
						||
      return prepareInstance(singleton, ref);
 | 
						||
    } // target is a ReferenceElement
 | 
						||
 | 
						||
 | 
						||
    if (references.includes(target)) {
 | 
						||
      return prepareInstance(singleton, target);
 | 
						||
    }
 | 
						||
  };
 | 
						||
 | 
						||
  singleton.showNext = function () {
 | 
						||
    var first = references[0];
 | 
						||
 | 
						||
    if (!currentTarget) {
 | 
						||
      return singleton.show(0);
 | 
						||
    }
 | 
						||
 | 
						||
    var index = references.indexOf(currentTarget);
 | 
						||
    singleton.show(references[index + 1] || first);
 | 
						||
  };
 | 
						||
 | 
						||
  singleton.showPrevious = function () {
 | 
						||
    var last = references[references.length - 1];
 | 
						||
 | 
						||
    if (!currentTarget) {
 | 
						||
      return singleton.show(last);
 | 
						||
    }
 | 
						||
 | 
						||
    var index = references.indexOf(currentTarget);
 | 
						||
    var target = references[index - 1] || last;
 | 
						||
    singleton.show(target);
 | 
						||
  };
 | 
						||
 | 
						||
  var originalSetProps = singleton.setProps;
 | 
						||
 | 
						||
  singleton.setProps = function (props) {
 | 
						||
    overrides = props.overrides || overrides;
 | 
						||
    originalSetProps(props);
 | 
						||
  };
 | 
						||
 | 
						||
  singleton.setInstances = function (nextInstances) {
 | 
						||
    enableInstances(true);
 | 
						||
    interceptSetPropsCleanups.forEach(function (fn) {
 | 
						||
      return fn();
 | 
						||
    });
 | 
						||
    individualInstances = nextInstances;
 | 
						||
    enableInstances(false);
 | 
						||
    setReferences();
 | 
						||
    interceptSetProps(singleton);
 | 
						||
    singleton.setProps({
 | 
						||
      triggerTarget: references
 | 
						||
    });
 | 
						||
  };
 | 
						||
 | 
						||
  interceptSetPropsCleanups = interceptSetProps(singleton);
 | 
						||
  return singleton;
 | 
						||
};
 | 
						||
 | 
						||
tippy.setDefaultProps({
 | 
						||
  render: render
 | 
						||
});
 | 
						||
 | 
						||
const unwarp = (el) => {
 | 
						||
    // get the element's parent node
 | 
						||
    const parent = el.parentNode;
 | 
						||
    if (parent) {
 | 
						||
        // move all children out of the element
 | 
						||
        while (el.firstChild)
 | 
						||
            parent.insertBefore(el.firstChild, el);
 | 
						||
        // remove the empty element
 | 
						||
        parent.removeChild(el);
 | 
						||
    }
 | 
						||
};
 | 
						||
 | 
						||
var _a;
 | 
						||
tippy.setDefaultProps({
 | 
						||
    interactive: true,
 | 
						||
    arrow: true,
 | 
						||
    theme: "obsidian",
 | 
						||
    placement: "bottom",
 | 
						||
    delay: [100, 0],
 | 
						||
    trigger: "mouseenter click",
 | 
						||
    hideOnClick: true,
 | 
						||
    animation: "shift-toward-subtle",
 | 
						||
    duration: [200, 150],
 | 
						||
    allowHTML: true,
 | 
						||
    zIndex: (_a = +getComputedStyle(document.body)
 | 
						||
        .getPropertyValue("--layer-popover")
 | 
						||
        .trim()) !== null && _a !== void 0 ? _a : 30,
 | 
						||
});
 | 
						||
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
 | 
						||
function createPopover(infoList, elOrHtml, keyOrEl, showButtom = false) {
 | 
						||
    let html;
 | 
						||
    const contentEl = typeof elOrHtml !== "string" ? elOrHtml : null;
 | 
						||
    if (contentEl) {
 | 
						||
        // unwarp <p>
 | 
						||
        const warpped = contentEl.querySelector("p");
 | 
						||
        if (warpped)
 | 
						||
            unwarp(warpped);
 | 
						||
        html = contentEl.innerHTML;
 | 
						||
    }
 | 
						||
    else
 | 
						||
        html = elOrHtml;
 | 
						||
    if (typeof keyOrEl === "string" && !infoList.has(keyOrEl)) {
 | 
						||
        console.error("no info for key %s in %o", keyOrEl, infoList);
 | 
						||
        throw new TypeError("no info for key");
 | 
						||
    }
 | 
						||
    const refEl = typeof keyOrEl === "string"
 | 
						||
        ? infoList.get(keyOrEl).refEl
 | 
						||
        : keyOrEl;
 | 
						||
    const key = typeof keyOrEl === "string" ? keyOrEl : keyOrEl.id;
 | 
						||
    if (!refEl.parentElement)
 | 
						||
        throw new Error("no parent for refEl");
 | 
						||
    const warpper = createSpan();
 | 
						||
    refEl.parentElement.insertBefore(warpper, refEl);
 | 
						||
    warpper.appendChild(refEl);
 | 
						||
    const instance = tippy(refEl, {
 | 
						||
        content: html,
 | 
						||
        appendTo: warpper,
 | 
						||
        onTrigger: (inst, evt) => {
 | 
						||
            if (evt.type === "click") {
 | 
						||
                const defaultValue = tippy.defaultProps.zIndex;
 | 
						||
                inst.popper.style.zIndex = (defaultValue - 1).toString();
 | 
						||
            }
 | 
						||
        },
 | 
						||
    });
 | 
						||
    refEl.addEventListener("dblclick", (evt) => {
 | 
						||
        const child = refEl.firstElementChild;
 | 
						||
        if (child instanceof HTMLAnchorElement && showButtom) {
 | 
						||
            child.click();
 | 
						||
        }
 | 
						||
    });
 | 
						||
    // Monitor internal embed loadings
 | 
						||
    if (typeof elOrHtml !== "string") {
 | 
						||
        const srcEl = elOrHtml;
 | 
						||
        let allInternalEmbeds;
 | 
						||
        if ((allInternalEmbeds = srcEl.querySelectorAll("span.internal-embed"))) {
 | 
						||
            const markdownEmbed = {
 | 
						||
                // observer should keep connected to track updates in embeded content
 | 
						||
                callback: () => instance.setContent(srcEl.innerHTML),
 | 
						||
                // If the element being observed is removed from the DOM,
 | 
						||
                // and then subsequently released by the browser's garbage collection mechanism,
 | 
						||
                // the MutationObserver is likewise deleted.
 | 
						||
                option: {
 | 
						||
                    childList: true,
 | 
						||
                    subtree: true,
 | 
						||
                },
 | 
						||
            };
 | 
						||
            const internalEmbed = {
 | 
						||
                callback: (list, obs) => {
 | 
						||
                    var _a;
 | 
						||
                    for (const mutation of list) {
 | 
						||
                        const span = mutation.target;
 | 
						||
                        if (span.hasClass("is-loaded")) {
 | 
						||
                            if ((_a = span.firstElementChild) === null || _a === void 0 ? void 0 : _a.matches("div.markdown-embed")) {
 | 
						||
                                const mdObs = new MutationObserver(markdownEmbed.callback);
 | 
						||
                                mdObs.observe(span.firstElementChild, markdownEmbed.option);
 | 
						||
                            }
 | 
						||
                            else
 | 
						||
                                instance.setContent(srcEl.innerHTML);
 | 
						||
                            obs.disconnect();
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                },
 | 
						||
                option: { attributeFilter: ["class"] },
 | 
						||
            };
 | 
						||
            for (const span of allInternalEmbeds) {
 | 
						||
                const ieObs = new MutationObserver(internalEmbed.callback);
 | 
						||
                ieObs.observe(span, internalEmbed.option);
 | 
						||
            }
 | 
						||
        }
 | 
						||
        let allMathEmbeds;
 | 
						||
        if ((allMathEmbeds = srcEl.querySelectorAll("span.math"))) {
 | 
						||
            const mathEmbed = {
 | 
						||
                callback: (list, obs) => {
 | 
						||
                    for (const mutation of list) {
 | 
						||
                        const span = mutation.target;
 | 
						||
                        if (span.hasClass("is-loaded")) {
 | 
						||
                            instance.setContent(srcEl.innerHTML);
 | 
						||
                            obs.disconnect();
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                },
 | 
						||
                option: { attributeFilter: ["class"] },
 | 
						||
            };
 | 
						||
            for (const span of allMathEmbeds) {
 | 
						||
                const mathObs = new MutationObserver(mathEmbed.callback);
 | 
						||
                mathObs.observe(span, mathEmbed.option);
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
    const info = infoList.get(key);
 | 
						||
    if (info.popover)
 | 
						||
        info.popover.tippy.destroy();
 | 
						||
    const out = {
 | 
						||
        tippy: instance,
 | 
						||
        html: html,
 | 
						||
    };
 | 
						||
    info.popover = out;
 | 
						||
    return out;
 | 
						||
}
 | 
						||
 | 
						||
/**
 | 
						||
 * @param id id from .footnote/.footnote-ref ("fnref-" or "fn-")
 | 
						||
 */
 | 
						||
const findInfoKeys = (id, from) => {
 | 
						||
    if (from.has(id))
 | 
						||
        return [id];
 | 
						||
    else {
 | 
						||
        const keys = [...from.keys()];
 | 
						||
        const match = keys.filter((key) => key.replace(/(?<=^fnref-\d+?-)\d+?-/, "") ===
 | 
						||
            id.replace(/^fn-/, "fnref-"));
 | 
						||
        if (match.length)
 | 
						||
            return match;
 | 
						||
        else
 | 
						||
            return null;
 | 
						||
    }
 | 
						||
};
 | 
						||
// prettier-ignore
 | 
						||
const PopoverHandler = function (el, ctx) {
 | 
						||
    var _a;
 | 
						||
    // @ts-ignore
 | 
						||
    const bridge = ctx.containerEl;
 | 
						||
    if (!bridge.infoList)
 | 
						||
        bridge.infoList = new Map();
 | 
						||
    if (!bridge.singleton)
 | 
						||
        bridge.singleton = null;
 | 
						||
    const { infoList, singleton } = bridge;
 | 
						||
    /**
 | 
						||
     * Performs the specified action for each node that matches given selector in current element.
 | 
						||
     * @param selector Used to match element descendants of node
 | 
						||
     * @param callback A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the list.
 | 
						||
     * @returns whether selector has any match
 | 
						||
     */
 | 
						||
    const forEach = (selector, callback) => {
 | 
						||
        const result = el.querySelectorAll(selector);
 | 
						||
        if (result.length !== 0)
 | 
						||
            result.forEach(callback);
 | 
						||
        return result.length !== 0;
 | 
						||
    };
 | 
						||
    let shouldCreateSingleton = false;
 | 
						||
    const callbackRef = (v) => {
 | 
						||
        // <sup
 | 
						||
        //   data-footnote-id="fnref-1-aa7e756d44d79c16"
 | 
						||
        //   class="footnote-ref"
 | 
						||
        //   id="fnref-1-aa7e756d44d79c16"
 | 
						||
        //   ><a
 | 
						||
        //     href="#fn-1-aa7e756d44d79c16"
 | 
						||
        //     class="footnote-link"
 | 
						||
        //     target="_blank"
 | 
						||
        //     rel="noopener"
 | 
						||
        //     >[1]</a
 | 
						||
        //   ></sup
 | 
						||
        // >
 | 
						||
        const sup = v;
 | 
						||
        const { id: refId } = sup;
 | 
						||
        const { sourcePath } = ctx;
 | 
						||
        const child = sup.firstElementChild;
 | 
						||
        if (child instanceof HTMLAnchorElement) {
 | 
						||
            sup.appendText(child.innerText);
 | 
						||
            child.innerText = "";
 | 
						||
        }
 | 
						||
        else
 | 
						||
            console.error("first child not anchor");
 | 
						||
        sup.setAttr("aria-describedby", refId.replace(/^fnref-/, "pp-"));
 | 
						||
        if (infoList.has(refId)) {
 | 
						||
            // if rendered before (only rerender changed paragraph)
 | 
						||
            const info = infoList.get(refId);
 | 
						||
            const { popover } = info;
 | 
						||
            info.refEl = sup;
 | 
						||
            if (!popover) {
 | 
						||
                console.error("refEl %o found in %o, pop null", sup, infoList);
 | 
						||
                return;
 | 
						||
            }
 | 
						||
            const { html } = popover;
 | 
						||
            createPopover(infoList, html, sup, this.settings.showFnRef);
 | 
						||
            shouldCreateSingleton = true;
 | 
						||
        }
 | 
						||
        else {
 | 
						||
            // if never render (full render)
 | 
						||
            infoList.set(refId, {
 | 
						||
                sourcePath,
 | 
						||
                refEl: sup,
 | 
						||
                popover: null,
 | 
						||
            });
 | 
						||
        }
 | 
						||
    };
 | 
						||
    const refProcess = forEach("sup.footnote-ref", callbackRef);
 | 
						||
    // <li
 | 
						||
    //   data-line="0"
 | 
						||
    //   data-footnote-id="fn-1-aa7e756d44d79c16"
 | 
						||
    //   id="fn-1-aa7e756d44d79c16"
 | 
						||
    // >
 | 
						||
    //   content
 | 
						||
    //   <a
 | 
						||
    //     href="#fnref-1-aa7e756d44d79c16"
 | 
						||
    //     class="footnote-backref footnote-link"
 | 
						||
    //     target="_blank"
 | 
						||
    //     rel="noopener"
 | 
						||
    //     >↩︎</a
 | 
						||
    //   >
 | 
						||
    // </li>
 | 
						||
    if (!refProcess &&
 | 
						||
        el.children.length === 1 &&
 | 
						||
        ((_a = el.firstElementChild) === null || _a === void 0 ? void 0 : _a.matches("section.footnotes"))) {
 | 
						||
        const section = el.firstElementChild;
 | 
						||
        for (const v of section.querySelectorAll("li")) {
 | 
						||
            const li = v;
 | 
						||
            const { id: fnId } = li;
 | 
						||
            const keys = findInfoKeys(fnId, infoList);
 | 
						||
            if (keys) {
 | 
						||
                for (const k of keys) {
 | 
						||
                    createPopover(infoList, li, k, this.settings.showFnRef);
 | 
						||
                }
 | 
						||
            }
 | 
						||
            else
 | 
						||
                console.error("Unable to create popover: ref info not found in %o", infoList);
 | 
						||
        }
 | 
						||
        shouldCreateSingleton = true;
 | 
						||
        // NOTE: using "display:none" or hidden will block markdown-preview-pusher
 | 
						||
        if (!this.settings.showFnRef)
 | 
						||
            section.addClass("visuallyhidden");
 | 
						||
    }
 | 
						||
    if (this.settings.smooth && shouldCreateSingleton) {
 | 
						||
        if (singleton)
 | 
						||
            singleton.destroy();
 | 
						||
        bridge.singleton = createSingleton([...infoList.values()]
 | 
						||
            .filter((info) => Boolean(info.popover))
 | 
						||
            // @ts-ignore
 | 
						||
            .map((info) => info.popover.tippy), {
 | 
						||
            delay: [100, 0],
 | 
						||
            moveTransition: "transform 0.2s ease-out",
 | 
						||
        });
 | 
						||
    }
 | 
						||
};
 | 
						||
 | 
						||
/** check if given view's onload is intact */
 | 
						||
const isIntact = (view) => view instanceof obsidian.MarkdownView &&
 | 
						||
    view.onUnloadFile.bak === undefined;
 | 
						||
const isModified = (view) => view instanceof obsidian.MarkdownView &&
 | 
						||
    view.onUnloadFile.bak !== undefined;
 | 
						||
class BetterFn extends obsidian.Plugin {
 | 
						||
    constructor() {
 | 
						||
        // settings: BetterFnSettings = DEFAULT_SETTINGS;
 | 
						||
        super(...arguments);
 | 
						||
        this.PopoverHandler = PopoverHandler.bind(this);
 | 
						||
        this.settings = DEFAULT_SETTINGS;
 | 
						||
        /** Remove redundant element from fnInfo */
 | 
						||
        this.modifyOnUnloadFile = (leaf) => {
 | 
						||
            if (!isIntact(leaf.view))
 | 
						||
                return;
 | 
						||
            const view = leaf.view;
 | 
						||
            const src = leaf.view.onUnloadFile;
 | 
						||
            view.onUnloadFile = (file) => {
 | 
						||
                // custom code here
 | 
						||
                const bridgeEl = view.previewMode.containerEl.querySelector(".markdown-preview-section");
 | 
						||
                const { infoList, singleton } = bridgeEl;
 | 
						||
                if (infoList) {
 | 
						||
                    infoList.forEach((info) => { var _a; return (_a = info.popover) === null || _a === void 0 ? void 0 : _a.tippy.destroy(); });
 | 
						||
                    infoList.clear();
 | 
						||
                }
 | 
						||
                if (singleton) {
 | 
						||
                    singleton.destroy();
 | 
						||
                    bridgeEl.singleton = null;
 | 
						||
                }
 | 
						||
                return src.call(view, file);
 | 
						||
            };
 | 
						||
            leaf.view.onUnloadFile.bak = src;
 | 
						||
        };
 | 
						||
        this.revertOnUnloadFile = (leaf) => {
 | 
						||
            if (isModified(leaf.view)) {
 | 
						||
                leaf.view.onUnloadFile =
 | 
						||
                    leaf.view.onUnloadFile.bak.bind(leaf.view);
 | 
						||
            }
 | 
						||
        };
 | 
						||
        this.clearInfoList = (leaf) => {
 | 
						||
            if (leaf.view instanceof obsidian.MarkdownView) {
 | 
						||
                const bridgeEl = leaf.view.previewMode.containerEl.querySelector(".markdown-preview-section");
 | 
						||
                const { infoList, singleton } = bridgeEl;
 | 
						||
                if (infoList) {
 | 
						||
                    infoList.forEach((info) => { var _a; return (_a = info.popover) === null || _a === void 0 ? void 0 : _a.tippy.destroy(); });
 | 
						||
                    bridgeEl.infoList = undefined;
 | 
						||
                }
 | 
						||
                if (singleton) {
 | 
						||
                    singleton.destroy();
 | 
						||
                    bridgeEl.singleton = undefined;
 | 
						||
                }
 | 
						||
            }
 | 
						||
        };
 | 
						||
        /** refresh opened MarkdownView */
 | 
						||
        this.refresh = (leaf) => {
 | 
						||
            setTimeout(() => {
 | 
						||
                if (leaf.view instanceof obsidian.MarkdownView) {
 | 
						||
                    leaf.view.previewMode.rerender(true);
 | 
						||
                }
 | 
						||
            }, 200);
 | 
						||
        };
 | 
						||
        /** get the function that perform given actions on all leaves */
 | 
						||
        this.getLoopAllLeavesFunc = (...actions) => () => actions.forEach((action) => this.app.workspace.iterateAllLeaves(action));
 | 
						||
        this.layoutChangeCallback = this.getLoopAllLeavesFunc(this.modifyOnUnloadFile);
 | 
						||
    }
 | 
						||
    onload() {
 | 
						||
        return __awaiter(this, void 0, void 0, function* () {
 | 
						||
            console.log("loading BetterFn");
 | 
						||
            yield this.loadSettings();
 | 
						||
            this.registerMarkdownPostProcessor(this.PopoverHandler);
 | 
						||
            this.registerEvent(this.app.workspace.on("layout-change", this.layoutChangeCallback));
 | 
						||
            this.getLoopAllLeavesFunc(this.modifyOnUnloadFile, this.refresh)();
 | 
						||
            this.addSettingTab(new BetterFnSettingTab(this));
 | 
						||
        });
 | 
						||
    }
 | 
						||
    onunload() {
 | 
						||
        console.log("unloading BetterFn");
 | 
						||
        this.getLoopAllLeavesFunc(this.revertOnUnloadFile, this.clearInfoList, this.refresh)();
 | 
						||
    }
 | 
						||
    loadSettings() {
 | 
						||
        return __awaiter(this, void 0, void 0, function* () {
 | 
						||
            this.settings = Object.assign(Object.assign({}, this.settings), (yield this.loadData()));
 | 
						||
        });
 | 
						||
    }
 | 
						||
    saveSettings() {
 | 
						||
        return __awaiter(this, void 0, void 0, function* () {
 | 
						||
            yield this.saveData(this.settings);
 | 
						||
        });
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
module.exports = BetterFn;
 | 
						||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9zcmMvc2V0dGluZ3MudHMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Vmlld3BvcnRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRTY3JvbGxQYXJlbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy91bmlxdWVCeS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwibm9kZV9tb2R1bGVzL3RpcHB5LmpzL2Rpc3QvdGlwcHkuZXNtLmpzIiwic3JjL3NyYy9tb2R1bGVzL3Rvb2xzLnRzIiwic3JjL3NyYy9tb2R1bGVzL3JlbmRlckNoaWxkLnRzIiwic3JjL3NyYy9wcm9jZXNzb3IudHMiLCJzcmMvc3JjL21haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIlBsdWdpblNldHRpbmdUYWIiLCJTZXR0aW5nIiwiaXNFbGVtZW50IiwiZWZmZWN0IiwiZ2V0QmFzZVBsYWNlbWVudCIsImdldENvbXB1dGVkU3R5bGUiLCJtaW4iLCJtYXgiLCJtYXRoTWF4IiwibWF0aE1pbiIsImhhc2giLCJhbGxQbGFjZW1lbnRzIiwicGxhY2VtZW50cyIsImRlYm91bmNlIiwicG9wcGVyT2Zmc2V0cyIsImNvbXB1dGVTdHlsZXMiLCJhcHBseVN0eWxlcyIsIm9mZnNldCIsImZsaXAiLCJwcmV2ZW50T3ZlcmZsb3ciLCJhcnJvdyIsImhpZGUiLCJNYXJrZG93blZpZXciLCJQbHVnaW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF1REE7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFD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
 |