1/**! 2 * @fileOverview Kickass library to create and place poppers near their reference elements. 3 * @version 1.16.1 4 * @license 5 * Copyright (c) 2016 Federico Zivolo and contributors 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal 9 * in the Software without restriction, including without limitation the rights 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 * copies of the Software, and to permit persons to whom the Software is 12 * furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included in all 15 * copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 * SOFTWARE. 24 */ 25var e="undefined"!==typeof window&&"undefined"!==typeof document&&"undefined"!==typeof navigator;var t=function(){var t=["Edge","Trident","Firefox"];for(var r=0;r<t.length;r+=1)if(e&&navigator.userAgent.indexOf(t[r])>=0)return 1;return 0}();function microtaskDebounce(e){var t=false;return function(){if(!t){t=true;window.Promise.resolve().then((function(){t=false;e()}))}}}function taskDebounce(e){var r=false;return function(){if(!r){r=true;setTimeout((function(){r=false;e()}),t)}}}var r=e&&window.Promise; 26/** 27* Create a debounced version of a method, that's asynchronously deferred 28* but called in the minimum time possible. 29* 30* @method 31* @memberof Popper.Utils 32* @argument {Function} fn 33* @returns {Function} 34*/var n=r?microtaskDebounce:taskDebounce; 35/** 36 * Check if the given variable is a function 37 * @method 38 * @memberof Popper.Utils 39 * @argument {Any} functionToCheck - variable to check 40 * @returns {Boolean} answer to: is a function? 41 */function isFunction(e){var t={};return e&&"[object Function]"===t.toString.call(e)}function getStyleComputedProperty(e,t){if(1!==e.nodeType)return[];var r=e.ownerDocument.defaultView;var n=r.getComputedStyle(e,null);return t?n[t]:n} 42/** 43 * Returns the parentNode or the host of the element 44 * @method 45 * @memberof Popper.Utils 46 * @argument {Element} element 47 * @returns {Element} parent 48 */function getParentNode(e){return"HTML"===e.nodeName?e:e.parentNode||e.host} 49/** 50 * Returns the scrolling parent of the given element 51 * @method 52 * @memberof Popper.Utils 53 * @argument {Element} element 54 * @returns {Element} scroll parent 55 */function getScrollParent(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=getStyleComputedProperty(e),r=t.overflow,n=t.overflowX,o=t.overflowY;return/(auto|scroll|overlay)/.test(r+o+n)?e:getScrollParent(getParentNode(e))} 56/** 57 * Returns the reference node of the reference object, or the reference object itself. 58 * @method 59 * @memberof Popper.Utils 60 * @param {Element|Object} reference - the reference element (the popper will be relative to this) 61 * @returns {Element} parent 62 */function getReferenceNode(e){return e&&e.referenceNode?e.referenceNode:e}var o=e&&!!(window.MSInputMethodContext&&document.documentMode);var i=e&&/MSIE 10/.test(navigator.userAgent); 63/** 64 * Determines if the browser is Internet Explorer 65 * @method 66 * @memberof Popper.Utils 67 * @param {Number} version to check 68 * @returns {Boolean} isIE 69 */function isIE(e){return 11===e?o:10===e?i:o||i} 70/** 71 * Returns the offset parent of the given element 72 * @method 73 * @memberof Popper.Utils 74 * @argument {Element} element 75 * @returns {Element} offset parent 76 */function getOffsetParent(e){if(!e)return document.documentElement;var t=isIE(10)?document.body:null;var r=e.offsetParent||null;while(r===t&&e.nextElementSibling)r=(e=e.nextElementSibling).offsetParent;var n=r&&r.nodeName;return n&&"BODY"!==n&&"HTML"!==n?-1!==["TH","TD","TABLE"].indexOf(r.nodeName)&&"static"===getStyleComputedProperty(r,"position")?getOffsetParent(r):r:e?e.ownerDocument.documentElement:document.documentElement}function isOffsetContainer(e){var t=e.nodeName;return"BODY"!==t&&("HTML"===t||getOffsetParent(e.firstElementChild)===e)} 77/** 78 * Finds the root node (document, shadowDOM root) of the given element 79 * @method 80 * @memberof Popper.Utils 81 * @argument {Element} node 82 * @returns {Element} root node 83 */function getRoot(e){return null!==e.parentNode?getRoot(e.parentNode):e} 84/** 85 * Finds the offset parent common to the two provided nodes 86 * @method 87 * @memberof Popper.Utils 88 * @argument {Element} element1 89 * @argument {Element} element2 90 * @returns {Element} common offset parent 91 */function findCommonOffsetParent(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var r=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING;var n=r?e:t;var o=r?t:e;var i=document.createRange();i.setStart(n,0);i.setEnd(o,0);var a=i.commonAncestorContainer;if(e!==a&&t!==a||n.contains(o))return isOffsetContainer(a)?a:getOffsetParent(a);var s=getRoot(e);return s.host?findCommonOffsetParent(s.host,t):findCommonOffsetParent(e,getRoot(t).host)} 92/** 93 * Gets the scroll value of the given element in the given side (top and left) 94 * @method 95 * @memberof Popper.Utils 96 * @argument {Element} element 97 * @argument {String} side `top` or `left` 98 * @returns {number} amount of scrolled pixels 99 */function getScroll(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top";var r="top"===t?"scrollTop":"scrollLeft";var n=e.nodeName;if("BODY"===n||"HTML"===n){var o=e.ownerDocument.documentElement;var i=e.ownerDocument.scrollingElement||o;return i[r]}return e[r]} 100/* 101 * Sum or subtract the element scroll values (left and top) from a given rect object 102 * @method 103 * @memberof Popper.Utils 104 * @param {Object} rect - Rect object you want to change 105 * @param {HTMLElement} element - The element from the function reads the scroll values 106 * @param {Boolean} subtract - set to true if you want to subtract the scroll values 107 * @return {Object} rect - The modifier rect object 108 */function includeScroll(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];var n=getScroll(t,"top");var o=getScroll(t,"left");var i=r?-1:1;e.top+=n*i;e.bottom+=n*i;e.left+=o*i;e.right+=o*i;return e} 109/* 110 * Helper to detect borders of a given element 111 * @method 112 * @memberof Popper.Utils 113 * @param {CSSStyleDeclaration} styles
114 * Result of `getStyleComputedProperty` on the given element 115 * @param {String} axis - `x` or `y` 116 * @return {number} borders - The borders size of the given axis 117 */function getBordersSize(e,t){var r="x"===t?"Left":"Top";var n="Left"===r?"Right":"Bottom";return parseFloat(e["border"+r+"Width"])+parseFloat(e["border"+n+"Width"])}function getSize(e,t,r,n){return Math.max(t["offset"+e],t["scroll"+e],r["client"+e],r["offset"+e],r["scroll"+e],isIE(10)?parseInt(r["offset"+e])+parseInt(n["margin"+("Height"===e?"Top":"Left")])+parseInt(n["margin"+("Height"===e?"Bottom":"Right")]):0)}function getWindowSizes(e){var t=e.body;var r=e.documentElement;var n=isIE(10)&&getComputedStyle(r);return{height:getSize("Height",t,r,n),width:getSize("Width",t,r,n)}}var classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")};var a=function(){function defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||false;n.configurable=true;"value"in n&&(n.writable=true);Object.defineProperty(e,n.key,n)}}return function(e,t,r){t&&defineProperties(e.prototype,t);r&&defineProperties(e,r);return e}}();var defineProperty=function(e,t,r){t in e?Object.defineProperty(e,t,{value:r,enumerable:true,configurable:true,writable:true}):e[t]=r;return e};var s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}; 118/** 119 * Given element offsets, generate an output similar to getBoundingClientRect 120 * @method 121 * @memberof Popper.Utils 122 * @argument {Object} offsets 123 * @returns {Object} ClientRect like output 124 */function getClientRect(e){return s({},e,{right:e.left+e.width,bottom:e.top+e.height})} 125/** 126 * Get bounding client rect of given element 127 * @method 128 * @memberof Popper.Utils 129 * @param {HTMLElement} element 130 * @return {Object} client rect 131 */function getBoundingClientRect(e){var t={};try{if(isIE(10)){t=e.getBoundingClientRect();var r=getScroll(e,"top");var n=getScroll(e,"left");t.top+=r;t.left+=n;t.bottom+=r;t.right+=n}else t=e.getBoundingClientRect()}catch(e){}var o={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top};var i="HTML"===e.nodeName?getWindowSizes(e.ownerDocument):{};var a=i.width||e.clientWidth||o.width;var s=i.height||e.clientHeight||o.height;var f=e.offsetWidth-a;var l=e.offsetHeight-s;if(f||l){var p=getStyleComputedProperty(e);f-=getBordersSize(p,"x");l-=getBordersSize(p,"y");o.width-=f;o.height-=l}return getClientRect(o)}function getOffsetRectRelativeToArbitraryNode(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];var n=isIE(10);var o="HTML"===t.nodeName;var i=getBoundingClientRect(e);var a=getBoundingClientRect(t);var s=getScrollParent(e);var f=getStyleComputedProperty(t);var l=parseFloat(f.borderTopWidth);var p=parseFloat(f.borderLeftWidth);if(r&&o){a.top=Math.max(a.top,0);a.left=Math.max(a.left,0)}var u=getClientRect({top:i.top-a.top-l,left:i.left-a.left-p,width:i.width,height:i.height});u.marginTop=0;u.marginLeft=0;if(!n&&o){var d=parseFloat(f.marginTop);var c=parseFloat(f.marginLeft);u.top-=l-d;u.bottom-=l-d;u.left-=p-c;u.right-=p-c;u.marginTop=d;u.marginLeft=c}(n&&!r?t.contains(s):t===s&&"BODY"!==s.nodeName)&&(u=includeScroll(u,t));return u}function getViewportOffsetRectRelativeToArtbitraryNode(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];var r=e.ownerDocument.documentElement;var n=getOffsetRectRelativeToArbitraryNode(e,r);var o=Math.max(r.clientWidth,window.innerWidth||0);var i=Math.max(r.clientHeight,window.innerHeight||0);var a=t?0:getScroll(r);var s=t?0:getScroll(r,"left");var f={top:a-n.top+n.marginTop,left:s-n.left+n.marginLeft,width:o,height:i};return getClientRect(f)} 132/** 133 * Check if the given element is fixed or is inside a fixed parent 134 * @method 135 * @memberof Popper.Utils 136 * @argument {Element} element 137 * @argument {Element} customContainer 138 * @returns {Boolean} answer to "isFixed?" 139 */function isFixed(e){var t=e.nodeName;if("BODY"===t||"HTML"===t)return false;if("fixed"===getStyleComputedProperty(e,"position"))return true;var r=getParentNode(e);return!!r&&isFixed(r)} 140/** 141 * Finds the first parent of an element that has a transformed property defined 142 * @method 143 * @memberof Popper.Utils 144 * @argument {Element} element 145 * @returns {Element} first transformed parent or documentElement 146 */function getFixedPositionOffsetParent(e){if(!e||!e.parentElement||isIE())return document.documentElement;var t=e.parentElement;while(t&&"none"===getStyleComputedProperty(t,"transform"))t=t.parentElement;return t||document.documentElement} 147/** 148 * Computed the boundaries limits and return them 149 * @method 150 * @memberof Popper.Utils 151 * @param {HTMLElement} popper 152 * @param {HTMLElement} reference 153 * @param {number} padding 154 * @param {HTMLElement} boundariesElement - Element used to define the boundaries 155 * @param {Boolean} fixedPosition - Is in fixed position mode 156 * @returns {Object} Coordinates of the boundaries 157 */function getBoundaries(e,t,r,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];var i={top:0,left:0};var a=o?getFixedPositionOffsetParent(e):findCommonOffsetParent(e,getReferenceNode(t));if("viewport"===n)i=getViewportOffsetRectRelativeToArtbitraryNode(a,o);else{var s=void 0;if("scrollParent"===n){s=getScrollParent(getParentNode(t));"BODY"===s.nodeName&&(s=e.ownerDocument.documentElement)}else s="window"===n?e.ownerDocument.documentElement:n;var f=getOffsetRectRelativeToArbitraryNode(s,a,o);if("HTML"!==s.nodeName||isFixed(a))i=f;else{var l=getWindowSizes(e.ownerDocument),p=l.height,u=l.width;i.top+=f.top-f.marginTop;i.bottom=p+f.top;i.left+=f.left-f.marginLeft;i.right=u+f.left}}r=r||0;var d="number"===typeof r;i.left+=d?r:r.left||0;i.top+=d?r:r.top||0;i.right-=d?r:r.right||0;i.bottom-=d?r:r.bottom||0;return i}function getArea(e){var t=e.width,r=e.height;return t*r} 158/** 159 * Utility used to transform the `auto` placement to the placement with more 160 * available space. 161 * @method 162 * @memberof Popper.Utils 163 * @argument {Object} data - The data object generated by update method 164 * @argument {Object} options - Modifiers configuration and options 165 * @returns {Object} The data object, properly modified 166 */function computeAutoPlacement(e,t,r,n,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var a=getBoundaries(r,n,i,o);var f={top:{width:a.width,height:t.top-a.top},right:{width:a.right-t.right,height:a.height},bottom:{width:a.width,height:a.bottom-t.bottom},left:{width:t.left-a.left,height:a.height}};var l=Object.keys(f).map((function(e){return s({key:e},f[e],{area:getArea(f[e])})})).sort((function(e,t){return t.area-e.area}));
166var p=l.filter((function(e){var t=e.width,n=e.height;return t>=r.clientWidth&&n>=r.clientHeight}));var u=p.length>0?p[0].key:l[0].key;var d=e.split("-")[1];return u+(d?"-"+d:"")} 167/** 168 * Get offsets to the reference element 169 * @method 170 * @memberof Popper.Utils 171 * @param {Object} state 172 * @param {Element} popper - the popper element 173 * @param {Element} reference - the reference element (the popper will be relative to this) 174 * @param {Element} fixedPosition - is in fixed position mode 175 * @returns {Object} An object containing the offsets which will be applied to the popper 176 */function getReferenceOffsets(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;var o=n?getFixedPositionOffsetParent(t):findCommonOffsetParent(t,getReferenceNode(r));return getOffsetRectRelativeToArbitraryNode(r,o,n)} 177/** 178 * Get the outer sizes of the given element (offset size + margins) 179 * @method 180 * @memberof Popper.Utils 181 * @argument {Element} element 182 * @returns {Object} object containing width and height properties 183 */function getOuterSizes(e){var t=e.ownerDocument.defaultView;var r=t.getComputedStyle(e);var n=parseFloat(r.marginTop||0)+parseFloat(r.marginBottom||0);var o=parseFloat(r.marginLeft||0)+parseFloat(r.marginRight||0);var i={width:e.offsetWidth+o,height:e.offsetHeight+n};return i} 184/** 185 * Get the opposite placement of the given one 186 * @method 187 * @memberof Popper.Utils 188 * @argument {String} placement 189 * @returns {String} flipped placement 190 */function getOppositePlacement(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))} 191/** 192 * Get offsets to the popper 193 * @method 194 * @memberof Popper.Utils 195 * @param {Object} position - CSS position the Popper will get applied 196 * @param {HTMLElement} popper - the popper element 197 * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) 198 * @param {String} placement - one of the valid placement options 199 * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper 200 */function getPopperOffsets(e,t,r){r=r.split("-")[0];var n=getOuterSizes(e);var o={width:n.width,height:n.height};var i=-1!==["right","left"].indexOf(r);var a=i?"top":"left";var s=i?"left":"top";var f=i?"height":"width";var l=i?"width":"height";o[a]=t[a]+t[f]/2-n[f]/2;o[s]=r===s?t[s]-n[l]:t[getOppositePlacement(s)];return o} 201/** 202 * Mimics the `find` method of Array 203 * @method 204 * @memberof Popper.Utils 205 * @argument {Array} arr 206 * @argument prop 207 * @argument value 208 * @returns index or -1 209 */function find(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]} 210/** 211 * Return the index of the matching object 212 * @method 213 * @memberof Popper.Utils 214 * @argument {Array} arr 215 * @argument prop 216 * @argument value 217 * @returns index or -1 218 */function findIndex(e,t,r){if(Array.prototype.findIndex)return e.findIndex((function(e){return e[t]===r}));var n=find(e,(function(e){return e[t]===r}));return e.indexOf(n)} 219/** 220 * Loop trough the list of modifiers and run them in order, 221 * each of them will then edit the data object. 222 * @method 223 * @memberof Popper.Utils 224 * @param {dataObject} data 225 * @param {Array} modifiers 226 * @param {String} ends - Optional modifier name used as stopper 227 * @returns {dataObject} 228 */function runModifiers(e,t,r){var n=void 0===r?e:e.slice(0,findIndex(e,"name",r));n.forEach((function(e){e["function"]&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var r=e["function"]||e.fn;if(e.enabled&&isFunction(r)){t.offsets.popper=getClientRect(t.offsets.popper);t.offsets.reference=getClientRect(t.offsets.reference);t=r(t,e)}}));return t}function update(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:false,offsets:{}};e.offsets.reference=getReferenceOffsets(this.state,this.popper,this.reference,this.options.positionFixed);e.placement=computeAutoPlacement(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding);e.originalPlacement=e.placement;e.positionFixed=this.options.positionFixed;e.offsets.popper=getPopperOffsets(this.popper,e.offsets.reference,e.placement);e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute";e=runModifiers(this.modifiers,e);
228if(this.state.isCreated)this.options.onUpdate(e);else{this.state.isCreated=true;this.options.onCreate(e)}}} 229/** 230 * Helper used to know if the given modifier is enabled. 231 * @method 232 * @memberof Popper.Utils 233 * @returns {Boolean} 234 */function isModifierEnabled(e,t){return e.some((function(e){var r=e.name,n=e.enabled;return n&&r===t}))} 235/** 236 * Get the prefixed supported property name 237 * @method 238 * @memberof Popper.Utils 239 * @argument {String} property (camelCase) 240 * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) 241 */function getSupportedPropertyName(e){var t=[false,"ms","Webkit","Moz","O"];var r=e.charAt(0).toUpperCase()+e.slice(1);for(var n=0;n<t.length;n++){var o=t[n];var i=o?""+o+r:e;if("undefined"!==typeof document.body.style[i])return i}return null}function destroy(){this.state.isDestroyed=true;if(isModifierEnabled(this.modifiers,"applyStyle")){this.popper.removeAttribute("x-placement");this.popper.style.position="";this.popper.style.top="";this.popper.style.left="";this.popper.style.right="";this.popper.style.bottom="";this.popper.style.willChange="";this.popper.style[getSupportedPropertyName("transform")]=""}this.disableEventListeners();this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper);return this} 242/** 243 * Get the window associated with the element 244 * @argument {Element} element 245 * @returns {Window} 246 */function getWindow(e){var t=e.ownerDocument;return t?t.defaultView:window}function attachToScrollParents(e,t,r,n){var o="BODY"===e.nodeName;var i=o?e.ownerDocument.defaultView:e;i.addEventListener(t,r,{passive:true});o||attachToScrollParents(getScrollParent(i.parentNode),t,r,n);n.push(i)}function setupEventListeners(e,t,r,n){r.updateBound=n;getWindow(e).addEventListener("resize",r.updateBound,{passive:true});var o=getScrollParent(e);attachToScrollParents(o,"scroll",r.updateBound,r.scrollParents);r.scrollElement=o;r.eventsEnabled=true;return r}function enableEventListeners(){this.state.eventsEnabled||(this.state=setupEventListeners(this.reference,this.options,this.state,this.scheduleUpdate))}function removeEventListeners(e,t){getWindow(e).removeEventListener("resize",t.updateBound);t.scrollParents.forEach((function(e){e.removeEventListener("scroll",t.updateBound)}));t.updateBound=null;t.scrollParents=[];t.scrollElement=null;t.eventsEnabled=false;return t}function disableEventListeners(){if(this.state.eventsEnabled){cancelAnimationFrame(this.scheduleUpdate);this.state=removeEventListeners(this.reference,this.state)}} 247/** 248 * Tells if a given input is a number 249 * @method 250 * @memberof Popper.Utils 251 * @param {*} input to check 252 * @return {Boolean} 253 */function isNumeric(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function setStyles(e,t){Object.keys(t).forEach((function(r){var n="";-1!==["width","height","top","right","bottom","left"].indexOf(r)&&isNumeric(t[r])&&(n="px");e.style[r]=t[r]+n}))}function setAttributes(e,t){Object.keys(t).forEach((function(r){var n=t[r];false!==n?e.setAttribute(r,t[r]):e.removeAttribute(r)}))} 254/** 255 * @function 256 * @memberof Modifiers 257 * @argument {Object} data - The data object generated by `update` method 258 * @argument {Object} data.styles - List of style properties - values to apply to popper element 259 * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element 260 * @argument {Object} options - Modifiers configuration and options 261 * @returns {Object} The same data object 262 */function applyStyle(e){setStyles(e.instance.popper,e.styles);setAttributes(e.instance.popper,e.attributes);e.arrowElement&&Object.keys(e.arrowStyles).length&&setStyles(e.arrowElement,e.arrowStyles);return e} 263/** 264 * Set the x-placement attribute before everything else because it could be used 265 * to add margins to the popper margins needs to be calculated to get the 266 * correct popper offsets. 267 * @method 268 * @memberof Popper.modifiers 269 * @param {HTMLElement} reference - The reference element used to position the popper 270 * @param {HTMLElement} popper - The HTML element used as popper 271 * @param {Object} options - Popper.js options 272 */function applyStyleOnLoad(e,t,r,n,o){var i=getReferenceOffsets(o,t,e,r.positionFixed);var a=computeAutoPlacement(r.placement,i,t,e,r.modifiers.flip.boundariesElement,r.modifiers.flip.padding);t.setAttribute("x-placement",a);setStyles(t,{position:r.positionFixed?"fixed":"absolute"});return r} 273/** 274 * @function 275 * @memberof Popper.Utils 276 * @argument {Object} data - The data object generated by `update` method 277 * @argument {Boolean}
277 shouldRound - If the offsets should be rounded at all 278 * @returns {Object} The popper's position offsets rounded 279 * 280 * The tale of pixel-perfect positioning. It's still not 100% perfect, but as 281 * good as it can be within reason. 282 * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 283 * 284 * Low DPI screens cause a popper to be blurry if not using full pixels (Safari 285 * as well on High DPI screens). 286 * 287 * Firefox prefers no rounding for positioning and does not have blurriness on 288 * high DPI screens. 289 * 290 * Only horizontal placement and left/right values need to be considered. 291 */function getRoundedOffsets(e,t){var r=e.offsets,n=r.popper,o=r.reference;var i=Math.round,a=Math.floor;var s=function noRound(e){return e};var f=i(o.width);var l=i(n.width);var p=-1!==["left","right"].indexOf(e.placement);var u=-1!==e.placement.indexOf("-");var d=f%2===l%2;var c=f%2===1&&l%2===1;var v=t?p||u||d?i:a:s;var h=t?i:s;return{left:v(c&&!u&&t?n.left-1:n.left),top:h(n.top),bottom:h(n.bottom),right:v(n.right)}}var f=e&&/Firefox/i.test(navigator.userAgent); 292/** 293 * @function 294 * @memberof Modifiers 295 * @argument {Object} data - The data object generated by `update` method 296 * @argument {Object} options - Modifiers configuration and options 297 * @returns {Object} The data object, properly modified 298 */function computeStyle(e,t){var r=t.x,n=t.y;var o=e.offsets.popper;var i=find(e.instance.modifiers,(function(e){return"applyStyle"===e.name})).gpuAcceleration;void 0!==i&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var a=void 0!==i?i:t.gpuAcceleration;var l=getOffsetParent(e.instance.popper);var p=getBoundingClientRect(l);var u={position:o.position};var d=getRoundedOffsets(e,window.devicePixelRatio<2||!f);var c="bottom"===r?"top":"bottom";var v="right"===n?"left":"right";var h=getSupportedPropertyName("transform");var m=void 0,g=void 0;g="bottom"===c?"HTML"===l.nodeName?-l.clientHeight+d.bottom:-p.height+d.bottom:d.top;m="right"===v?"HTML"===l.nodeName?-l.clientWidth+d.right:-p.width+d.right:d.left;if(a&&h){u[h]="translate3d("+m+"px, "+g+"px, 0)";u[c]=0;u[v]=0;u.willChange="transform"}else{var b="bottom"===c?-1:1;var y="right"===v?-1:1;u[c]=g*b;u[v]=m*y;u.willChange=c+", "+v}var w={"x-placement":e.placement};e.attributes=s({},w,e.attributes);e.styles=s({},u,e.styles);e.arrowStyles=s({},e.offsets.arrow,e.arrowStyles);return e} 299/** 300 * Helper used to know if the given modifier depends from another one.<br /> 301 * It checks if the needed modifier is listed and enabled. 302 * @method 303 * @memberof Popper.Utils 304 * @param {Array} modifiers - list of modifiers 305 * @param {String} requestingName - name of requesting modifier 306 * @param {String} requestedName - name of requested modifier 307 * @returns {Boolean} 308 */function isModifierRequired(e,t,r){var n=find(e,(function(e){var r=e.name;return r===t}));var o=!!n&&e.some((function(e){return e.name===r&&e.enabled&&e.order<n.order}));if(!o){var i="`"+t+"`";var a="`"+r+"`";console.warn(a+" modifier is required by "+i+" modifier in order to work, be sure to include it before "+i+"!")}return o} 309/** 310 * @function 311 * @memberof Modifiers 312 * @argument {Object} data - The data object generated by update method 313 * @argument {Object} options - Modifiers configuration and options 314 * @returns {Object} The data object, properly modified 315 */function arrow(e,t){var r;if(!isModifierRequired(e.instance.modifiers,"arrow","keepTogether"))return e;var n=t.element;if("string"===typeof n){n=e.instance.popper.querySelector(n);if(!n)return e}else if(!e.instance.popper.contains(n)){console.warn("WARNING: `arrow.element` must be child of its popper element!");return e}var o=e.placement.split("-")[0];var i=e.offsets,a=i.popper,s=i.reference;var f=-1!==["left","right"].indexOf(o);var l=f?"height":"width";var p=f?"Top":"Left";var u=p.toLowerCase();var d=f?"left":"top";var c=f?"bottom":"right";var v=getOuterSizes(n)[l];s[c]-v<a[u]&&(e.offsets.popper[u]-=a[u]-(s[c]-v));s[u]+v>a[c]&&(e.offsets.popper[u]+=s[u]+v-a[c]);e.offsets.popper=getClientRect(e.offsets.popper);var h=s[u]+s[l]/2-v/2;var m=getStyleComputedProperty(e.instance.popper);var g=parseFloat(m["margin"+p]);var b=parseFloat(m["border"+p+"Width"]);var y=h-e.offsets.popper[u]-g-b;y=Math.max(Math.min(a[l]-v,y),0);e.arrowElement=n;e.offsets.arrow=(r={},defineProperty(r,u,Math.round(y)),defineProperty(r,d,""),r);return e} 316/** 317 * Get the opposite placement variation of the given one 318 * @method 319 * @memberof Popper.Utils 320 * @argument {String} placement variation 321 * @returns {String} flipped placement variation 322 */function getOppositeVariation(e){return"end"===e?"start":"start"===e?"end":e} 323/** 324 * List of accepted placements to use as values of the `placement` option.<br /> 325 * Valid placements are: 326 * - `auto` 327 * - `top` 328 * - `right` 329 * - `bottom` 330 * - `left` 331 * 332 * Each placement can have a variation from this list: 333 * - `-start`
334 * - `-end` 335 * 336 * Variations are interpreted easily if you think of them as the left to right 337 * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` 338 * is right.<br /> 339 * Vertically (`left` and `right`), `start` is top and `end` is bottom. 340 * 341 * Some valid examples are: 342 * - `top-end` (on top of reference, right aligned) 343 * - `right-start` (on right of reference, top aligned) 344 * - `bottom` (on bottom, centered) 345 * - `auto-end` (on the side with more space available, alignment depends by placement) 346 * 347 * @static 348 * @type {Array} 349 * @enum {String} 350 * @readonly 351 * @method placements 352 * @memberof Popper 353 */var l=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"];var p=l.slice(3); 354/** 355 * Given an initial placement, returns all the subsequent placements 356 * clockwise (or counter-clockwise). 357 * 358 * @method 359 * @memberof Popper.Utils 360 * @argument {String} placement - A valid placement (it accepts variations) 361 * @argument {Boolean} counter - Set to true to walk the placements counterclockwise 362 * @returns {Array} placements including their variations 363 */function clockwise(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];var r=p.indexOf(e);var n=p.slice(r+1).concat(p.slice(0,r));return t?n.reverse():n}var u={FLIP:"flip",CLOCKWISE:"clockwise",COUNTERCLOCKWISE:"counterclockwise"}; 364/** 365 * @function 366 * @memberof Modifiers 367 * @argument {Object} data - The data object generated by update method 368 * @argument {Object} options - Modifiers configuration and options 369 * @returns {Object} The data object, properly modified 370 */function flip(e,t){if(isModifierEnabled(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var r=getBoundaries(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed);var n=e.placement.split("-")[0];var o=getOppositePlacement(n);var i=e.placement.split("-")[1]||"";var a=[];switch(t.behavior){case u.FLIP:a=[n,o];break;case u.CLOCKWISE:a=clockwise(n);break;case u.COUNTERCLOCKWISE:a=clockwise(n,true);break;default:a=t.behavior}a.forEach((function(f,l){if(n!==f||a.length===l+1)return e;n=e.placement.split("-")[0];o=getOppositePlacement(n);var p=e.offsets.popper;var u=e.offsets.reference;var d=Math.floor;var c="left"===n&&d(p.right)>d(u.left)||"right"===n&&d(p.left)<d(u.right)||"top"===n&&d(p.bottom)>d(u.top)||"bottom"===n&&d(p.top)<d(u.bottom);var v=d(p.left)<d(r.left);var h=d(p.right)>d(r.right);var m=d(p.top)<d(r.top);var g=d(p.bottom)>d(r.bottom);var b="left"===n&&v||"right"===n&&h||"top"===n&&m||"bottom"===n&&g;var y=-1!==["top","bottom"].indexOf(n);var w=!!t.flipVariations&&(y&&"start"===i&&v||y&&"end"===i&&h||!y&&"start"===i&&m||!y&&"end"===i&&g);var O=!!t.flipVariationsByContent&&(y&&"start"===i&&h||y&&"end"===i&&v||!y&&"start"===i&&g||!y&&"end"===i&&m);var E=w||O;if(c||b||E){e.flipped=true;(c||b)&&(n=a[l+1]);E&&(i=getOppositeVariation(i));e.placement=n+(i?"-"+i:"");e.offsets.popper=s({},e.offsets.popper,getPopperOffsets(e.instance.popper,e.offsets.reference,e.placement));e=runModifiers(e.instance.modifiers,e,"flip")}}));return e} 371/** 372 * @function 373 * @memberof Modifiers 374 * @argument {Object} data - The data object generated by update method 375 * @argument {Object} options - Modifiers configuration and options 376 * @returns {Object} The data object, properly modified 377 */function keepTogether(e){var t=e.offsets,r=t.popper,n=t.reference;var o=e.placement.split("-")[0];var i=Math.floor;var a=-1!==["top","bottom"].indexOf(o);var s=a?"right":"bottom";var f=a?"left":"top";var l=a?"width":"height";r[s]<i(n[f])&&(e.offsets.popper[f]=i(n[f])-r[l]);r[f]>i(n[s])&&(e.offsets.popper[f]=i(n[s]));return e} 378/** 379 * Converts a string containing value + unit into a px value number 380 * @function 381 * @memberof {modifiers~offset} 382 * @private 383 * @argument {String} str - Value + unit string 384 * @argument {String} measurement - `height` or `width` 385 * @argument {Object} popperOffsets 386 * @argument {Object} referenceOffsets 387 * @returns {Number|String} 388 * Value in pixels, or original string if no values were extracted 389 */function toValue(e,t,r,n){var o=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/);var i=+o[1];var a=o[2];if(!i)return e;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=r;break;case"%":case"%r":default:s=n}var f=getClientRect(s);return f[t]/100*i}if("vh"===a||"vw"===a){var l=void 0;l="vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0);return l/100*i}return i} 390/** 391 * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. 392 * @function 393 * @memberof {modifiers~offset} 394 * @private 395 * @argument {String} offset 396 * @argument {Object} popperOffsets 397 * @argument {Object} referenceOffsets 398 * @argument {String} basePlacement 399 * @returns {Array} a two cells array with x and y offsets in numbers 400 */function parseOffset(e,t,r,n){var o=[0,0];var i=-1!==["right","left"].indexOf(n);var a=e.split(/(\+|\-)/).map((function(e){return e.trim()}));var s=a.indexOf(find(a,(function(e){return-1!==e.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var f=/\s*,\s*|\s+/;var l=-1!==s?[a.slice(0,s).concat([a[s].split(f)[0]]),[a[s].split(f)[1]].concat(a.slice(s+1))]:[a];l=l.map((function(e,n){var o=(1===n?!i:i)?"height":"width";var a=false;return e.reduce((function(e,t){if(""===e[e.length-1]&&-1!==["+","-"].indexOf(t)){e[e.length-1]=t;a=true;return e}if(a){e[e.length-1]+=t;a=false;return e}return e.concat(t)}),[]).map((function(e){return toValue(e,o,t,r)}))}));l.forEach((function(e,t){e.forEach((function(r,n){isNumeric(r)&&(o[t]+=r*("-"===e[n-1]?-1:1))}))}));return o} 401/** 402 * @function 403 * @memberof Modifiers 404 * @argument {Object} data - The data object generated by update method 405 * @argument {Object} options - Modifiers configuration and options 406 * @argument {Number|String} options.offset=0
407 * The offset value as described in the modifier description 408 * @returns {Object} The data object, properly modified 409 */function offset(e,t){var r=t.offset;var n=e.placement,o=e.offsets,i=o.popper,a=o.reference;var s=n.split("-")[0];var f=void 0;f=isNumeric(+r)?[+r,0]:parseOffset(r,i,a,s);if("left"===s){i.top+=f[0];i.left-=f[1]}else if("right"===s){i.top+=f[0];i.left+=f[1]}else if("top"===s){i.left+=f[0];i.top-=f[1]}else if("bottom"===s){i.left+=f[0];i.top+=f[1]}e.popper=i;return e} 410/** 411 * @function 412 * @memberof Modifiers 413 * @argument {Object} data - The data object generated by `update` method 414 * @argument {Object} options - Modifiers configuration and options 415 * @returns {Object} The data object, properly modified 416 */function preventOverflow(e,t){var r=t.boundariesElement||getOffsetParent(e.instance.popper);e.instance.reference===r&&(r=getOffsetParent(r));var n=getSupportedPropertyName("transform");var o=e.instance.popper.style;var i=o.top,a=o.left,f=o[n];o.top="";o.left="";o[n]="";var l=getBoundaries(e.instance.popper,e.instance.reference,t.padding,r,e.positionFixed);o.top=i;o.left=a;o[n]=f;t.boundaries=l;var p=t.priority;var u=e.offsets.popper;var d={primary:function primary(e){var r=u[e];u[e]<l[e]&&!t.escapeWithReference&&(r=Math.max(u[e],l[e]));return defineProperty({},e,r)},secondary:function secondary(e){var r="right"===e?"left":"top";var n=u[r];u[e]>l[e]&&!t.escapeWithReference&&(n=Math.min(u[r],l[e]-("right"===e?u.width:u.height)));return defineProperty({},r,n)}};p.forEach((function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";u=s({},u,d[t](e))}));e.offsets.popper=u;return e} 417/** 418 * @function 419 * @memberof Modifiers 420 * @argument {Object} data - The data object generated by `update` method 421 * @argument {Object} options - Modifiers configuration and options 422 * @returns {Object} The data object, properly modified 423 */function shift(e){var t=e.placement;var r=t.split("-")[0];var n=t.split("-")[1];if(n){var o=e.offsets,i=o.reference,a=o.popper;var f=-1!==["bottom","top"].indexOf(r);var l=f?"left":"top";var p=f?"width":"height";var u={start:defineProperty({},l,i[l]),end:defineProperty({},l,i[l]+i[p]-a[p])};e.offsets.popper=s({},a,u[n])}return e} 424/** 425 * @function 426 * @memberof Modifiers 427 * @argument {Object} data - The data object generated by update method 428 * @argument {Object} options - Modifiers configuration and options 429 * @returns {Object} The data object, properly modified 430 */function hide(e){if(!isModifierRequired(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference;var r=find(e.instance.modifiers,(function(e){return"preventOverflow"===e.name})).boundaries;if(t.bottom<r.top||t.left>r.right||t.top>r.bottom||t.right<r.left){if(true===e.hide)return e;e.hide=true;e.attributes["x-out-of-boundaries"]=""}else{if(false===e.hide)return e;e.hide=false;e.attributes["x-out-of-boundaries"]=false}return e} 431/** 432 * @function 433 * @memberof Modifiers 434 * @argument {Object} data - The data object generated by `update` method 435 * @argument {Object} options - Modifiers configuration and options 436 * @returns {Object} The data object, properly modified 437 */function inner(e){var t=e.placement;var r=t.split("-")[0];var n=e.offsets,o=n.popper,i=n.reference;var a=-1!==["left","right"].indexOf(r);var s=-1===["top","left"].indexOf(r);o[a?"left":"top"]=i[r]-(s?o[a?"width":"height"]:0);e.placement=getOppositePlacement(t);e.offsets.popper=getClientRect(o);return e} 438/** 439 * Modifier function, each modifier can have a function of this type assigned 440 * to its `fn` property.<br /> 441 * These functions will be called on each update, this means that you must 442 * make sure they are performant enough to avoid performance bottlenecks. 443 * 444 * @function ModifierFn 445 * @argument {dataObject} data - The data object generated by `update` method 446 * @argument {Object} options - Modifiers configuration and options 447 * @returns {dataObject} The data object, properly modified 448 */var d={shift:{order:100,enabled:true,fn:shift},offset:{order:200,enabled:true,fn:offset,offset:0},preventOverflow:{order:300,enabled:true,fn:preventOverflow,priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:true,fn:keepTogether},arrow:{order:500,enabled:true,fn:arrow,element:"[x-arrow]"},flip:{order:600,enabled:true,fn:flip,behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:false,flipVariationsByContent:false},inner:{order:700,enabled:false,fn:inner},hide:{order:800,enabled:true,fn:hide},computeStyle:{order:850,enabled:true,fn:computeStyle,gpuAcceleration:true,x:"bottom",y:"right"},applyStyle:{order:900,enabled:true,fn:applyStyle,onLoad:applyStyleOnLoad, 449/** 450 * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier 451 * @prop {Boolean} gpuAcceleration=true 452 * If true, it uses the CSS 3D transformation to position the popper. 453 * Otherwise, it will use the `top` and `left` properties 454 */ 455gpuAcceleration:void 0}}; 456/** 457 * Default options provided to Popper.js constructor.<br /> 458 * These can be overridden using the `options` argument of Popper.js.<br /> 459 * To override an option, simply pass an object with the same 460 * structure of the `options` object, as the 3rd argument. For example: 461 * ``` 462 * new Popper(ref, pop, { 463 * modifiers: { 464 * preventOverflow: { enabled: false } 465 * } 466 * }) 467 * ``` 468 * @type {Object} 469 * @static 470 * @memberof Popper 471 */var c={placement:"bottom",positionFixed:false,eventsEnabled:true,removeOnDestroy:false,onCreate:function onCreate(){},onUpdate:function onUpdate(){},modifiers:d}; 472/** 473 * @callback onCreate 474 * @param {dataObject} data 475 */ 476/** 477 * @callback onUpdate 478 * @param {dataObject} data 479 */var v=function(){ 480/** 481 * Creates a new Popper.js instance. 482 * @class Popper 483 * @param {Element|referenceObject} reference - The reference element used to position the popper 484 * @param {Element} popper - The HTML / XML element used as the popper 485 * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) 486 * @return {Object} instance - The generated Popper.js instance 487 */ 488function Popper(e,t){var r=this;var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};classCallCheck(this,Popper);this.scheduleUpdate=function(){return requestAnimationFrame(r.update)};this.update=n(this.update.bind(this));this.options=s({},Popper.Defaults,o);this.state={isDestroyed:false,isCreated:false,scrollParents:[]};this.reference=e&&e.jquery?e[0]:e;this.popper=t&&t.jquery?t[0]:t;this.options.modifiers={};Object.keys(s({}
488,Popper.Defaults.modifiers,o.modifiers)).forEach((function(e){r.options.modifiers[e]=s({},Popper.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})}));this.modifiers=Object.keys(this.options.modifiers).map((function(e){return s({name:e},r.options.modifiers[e])})).sort((function(e,t){return e.order-t.order}));this.modifiers.forEach((function(e){e.enabled&&isFunction(e.onLoad)&&e.onLoad(r.reference,r.popper,r.options,e,r.state)}));this.update();var i=this.options.eventsEnabled;i&&this.enableEventListeners();this.state.eventsEnabled=i}a(Popper,[{key:"update",value:function update$$1(){return update.call(this)}},{key:"destroy",value:function destroy$$1(){return destroy.call(this)}},{key:"enableEventListeners",value:function enableEventListeners$$1(){return enableEventListeners.call(this)}},{key:"disableEventListeners",value:function disableEventListeners$$1(){return disableEventListeners.call(this)} 489/** 490 * Collection of utilities useful when writing custom modifiers. 491 * Starting from version 1.7, this method is available only if you 492 * include `popper-utils.js` before `popper.js`. 493 * 494 * **DEPRECATION**: This way to access PopperUtils is deprecated 495 * and will be removed in v2! Use the PopperUtils module directly instead. 496 * Due to the high instability of the methods contained in Utils, we can't 497 * guarantee them to follow semver. Use them at your own risk! 498 * @static 499 * @private 500 * @type {Object} 501 * @deprecated since version 1.8 502 * @member Utils 503 * @memberof Popper 504 */}]);return Popper}();v.Utils=("undefined"!==typeof window?window:global).PopperUtils;v.placements=l;v.Defaults=c;export default v; 505 506//
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.