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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
 |