Software: Apache/2.2.3 (CentOS). PHP/5.1.6 uname -a: Linux mx-ll-110-164-51-230.static.3bb.co.th 2.6.18-194.el5PAE #1 SMP Fri Apr 2 15:37:44 uid=48(apache) gid=48(apache) groups=48(apache) Safe-mode: OFF (not secure) /var/www/html/report/person/app-assets/vendors/js/extensions/ drwxr-xr-x |
Viewing file: shepherd.min.js (158.54 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) | /*! shepherd.js 2.5.0 */(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,e.Shepherd=t())})(this,function(){'use strict';/** * The base implementation of `_.slice` without an iteratee call guard. * * @private * @param {Array} array The array to slice. * @param {number} [start=0] The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns the slice of `array`. */var Oo=Math.min,So=Math.floor,Co=Math.round,Lo=Math.max;function e(e,t,o){var r=-1,i=e.length;0>t&&(t=-t>i?0:i+t),o=o>i?i:o,0>o&&(o+=i),i=t>o?0:o-t>>>0,t>>>=0;for(var n=Array(i);++r<i;)n[r]=e[r+t];return n}/** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */function t(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}/** Detect free variable `global` from Node.js. */ /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */function o(e){var t=Do.call(e,Io),o=e[Io];try{e[Io]=void 0;var r=!0}catch(t){}var i=Mo.call(e);return r&&(t?e[Io]=o:delete e[Io]),i}/** Used for built-in method references. */ /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */function r(e){return Yo.call(e)}/** `Object#toString` result references. */ /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */function n(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Ho&&Ho in Object(e)?o(e):r(e)}/** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */function a(e){return null!=e&&"object"==typeof e}/** `Object#toString` result references. */ /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */function p(e){return"symbol"==typeof e||a(e)&&"[object Symbol]"==n(e)}/** Used as references for various `Number` constants. */ /** * Converts `value` to a number. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @example * * _.toNumber(3.2); * // => 3.2 * * _.toNumber(Number.MIN_VALUE); * // => 5e-324 * * _.toNumber(Infinity); * // => Infinity * * _.toNumber('3.2'); * // => 3.2 */function s(e){if("number"==typeof e)return e;if(p(e))return Xo;if(t(e)){var o="function"==typeof e.valueOf?e.valueOf():e;e=t(o)?o+"":o}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(Bo,"");var r=Ro.test(e);return r||Fo.test(e)?Uo(e.slice(2),r?2:8):Wo.test(e)?Xo:+e}/** Used as references for various `Number` constants. */ /** * Converts `value` to a finite number. * * @static * @memberOf _ * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * _.toFinite(3.2); * // => 3.2 * * _.toFinite(Number.MIN_VALUE); * // => 5e-324 * * _.toFinite(Infinity); * // => 1.7976931348623157e+308 * * _.toFinite('3.2'); * // => 3.2 */function l(e){if(!e)return 0===e?e:0;if(e=s(e),e===zo||e===-zo){var t=0>e?-1:1;return 1.7976931348623157e+308*t}return e===e?e:0}/** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */function d(e){var t=l(e),o=t%1;return t===t?o?t-o:t:0}/** * Creates a slice of `array` with `n` elements dropped from the beginning. * * @static * @memberOf _ * @since 0.5.0 * @category Array * @param {Array} array The array to query. * @param {number} [n=1] The number of elements to drop. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Array} Returns the slice of `array`. * @example * * _.drop([1, 2, 3]); * // => [2, 3] * * _.drop([1, 2, 3], 2); * // => [3] * * _.drop([1, 2, 3], 5); * // => [] * * _.drop([1, 2, 3], 0); * // => [1, 2, 3] */function c(t,o,r){var i=null==t?0:t.length;return i?(o=r||void 0===o?1:d(o),e(t,0>o?0:o,i)):[]}/** * Checks if `value` is `undefined`. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. * @example * * _.isUndefined(void 0); * // => true * * _.isUndefined(null); * // => false */function m(e){return void 0===e}/** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */function f(e,t){for(var o=-1,r=Array(e);++o<e;)r[o]=t(o);return r}/** `Object#toString` result references. */ /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */function h(e){return a(e)&&"[object Arguments]"==n(e)}/** Used for built-in method references. */ /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */function b(e,t){var o=typeof e;return t=null==t?9007199254740991:t,!!t&&("number"==o||"symbol"!=o&&nr.test(e))&&-1<e&&0==e%1&&e<t}/** Used as references for various `Number` constants. */ /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */function u(e){return"number"==typeof e&&-1<e&&0==e%1&&9007199254740991>=e}/** `Object#toString` result references. */ /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */function y(e,t){var o=Zo(e),r=!o&&Jo(e),i=!o&&!r&&ir(e),n=!o&&!r&&!i&&fr(e),a=o||r||i||n,p=a?f(e.length,String):[],s=p.length;for(var l in e)(t||br.call(e,l))&&!(a&&(// Safari 9 has enumerable `arguments.length` in strict mode. "length"==l||// Node.js 0.10 has enumerable non-index properties on buffers. i&&("offset"==l||"parent"==l)||// PhantomJS 2 has enumerable non-index properties on typed arrays. n&&("buffer"==l||"byteLength"==l||"byteOffset"==l)||// Skip index properties. b(l,s)))&&p.push(l);return p}/** Used for built-in method references. */ /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */function g(e){var t=e&&e.constructor,o="function"==typeof t&&t.prototype||ur;return e===o}/** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */function v(e,t){return function(o){return e(t(o))}}/* Built-in method references for those with the same name as other `lodash` methods. */ /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */function w(e){if(!g(e))return yr(e);var t=[];for(var o in Object(e))vr.call(e,o)&&"constructor"!=o&&t.push(o);return t}/** `Object#toString` result references. */ /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */function x(e){if(!t(e))return!1;// The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var o=n(e);return"[object Function]"==o||"[object GeneratorFunction]"==o||"[object AsyncFunction]"==o||"[object Proxy]"==o}/** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */function k(e){return null!=e&&u(e.length)&&!x(e)}/** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */function E(e){return k(e)?y(e):w(e)}/** * The base implementation of `_.forOwn` without support for iteratee shorthands. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */function O(e,t){return e&&qo(e,t,E)}/** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */function S(e){return e}/** * Casts `value` to `identity` if it's not a function. * * @private * @param {*} value The value to inspect. * @returns {Function} Returns cast function. */function C(e){return"function"==typeof e?e:S}/** * Iterates over own enumerable string keyed properties of an object and * invokes `iteratee` for each property. The iteratee is invoked with three * arguments: (value, key, object). Iteratee functions may exit iteration * early by explicitly returning `false`. * * @static * @memberOf _ * @since 0.3.0 * @category Object * @param {Object} object The object to iterate over. * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns `object`. * @see _.forOwnRight * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.forOwn(new Foo, function(value, key) { * console.log(key); * }); * // => Logs 'a' then 'b' (iteration order is not guaranteed). */function L(e,t){return e&&O(e,C(t))}/** Built-in value references. */ /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @static * @memberOf _ * @since 0.8.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. * @example * * function Foo() { * this.a = 1; * } * * _.isPlainObject(new Foo); * // => false * * _.isPlainObject([1, 2, 3]); * // => false * * _.isPlainObject({ 'x': 0, 'y': 0 }); * // => true * * _.isPlainObject(Object.create(null)); * // => true */function T(e){if(!a(e)||"[object Object]"!=n(e))return!1;var t=wr(e);if(null===t)return!0;var o=Or.call(t,"constructor")&&t.constructor;return"function"==typeof o&&o instanceof o&&Er.call(o)==Sr}/** * Checks if `value` is likely a DOM element. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. * @example * * _.isElement(document.body); * // => true * * _.isElement('<body>'); * // => false */function A(e){return a(e)&&1===e.nodeType&&!T(e)}/** Used to detect overreaching core-js shims. */ /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */function _(e){return!!Lr&&Lr in e}/** Used for built-in method references. */ /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */function P(e){if(null!=e){try{return Ar.call(e)}catch(t){}try{return e+""}catch(t){}}return""}/** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */function j(e){if(!t(e)||_(e))return!1;var o=x(e)?Nr:Pr;return o.test(P(e))}/** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */function D(e,t){return null==e?void 0:e[t]}/** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */function M(e,t){var o=D(e,t);return j(o)?o:void 0}/* Built-in method references that are verified to be native. */ /** * Checks if `value` is an empty object, collection, map, or set. * * Objects are considered empty if they have no own enumerable string keyed * properties. * * Array-like values such as `arguments` objects, arrays, buffers, strings, or * jQuery-like collections are considered empty if they have a `length` of `0`. * Similarly, maps and sets are considered empty if they have a `size` of `0`. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is empty, else `false`. * @example * * _.isEmpty(null); * // => true * * _.isEmpty(true); * // => true * * _.isEmpty(1); * // => true * * _.isEmpty([1, 2, 3]); * // => false * * _.isEmpty({ 'a': 1 }); * // => false */function I(e){if(null==e)return!0;if(k(e)&&(Zo(e)||"string"==typeof e||"function"==typeof e.splice||ir(e)||fr(e)||Jo(e)))return!e.length;var t=Qr(e);if("[object Map]"==t||"[object Set]"==t)return!e.size;if(g(e))return!w(e).length;for(var o in e)if(ti.call(e,o))return!1;return!0}/** `Object#toString` result references. */ /** * Checks if `value` is classified as a `String` primitive or object. * * @static * @since 0.1.0 * @memberOf _ * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a string, else `false`. * @example * * _.isString('abc'); * // => true * * _.isString(1); * // => false */function N(e){return"string"==typeof e||!Zo(e)&&a(e)&&"[object String]"==n(e)}function Y(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function H(e){for(var t=1;t<arguments.length;t++){var o=null==arguments[t]?{}:arguments[t],r=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(o).filter(function(e){return Object.getOwnPropertyDescriptor(o,e).enumerable}))),r.forEach(function(t){Y(e,t,o[t])})}return e}function X(e,t){return B(e)||W(e,t)||R()}function B(e){if(Array.isArray(e))return e}function W(e,t){var o=[],r=!0,i=!1,n=void 0;try{for(var a,p=e[Symbol.iterator]();!(r=(a=p.next()).done)&&(o.push(a.value),!(t&&o.length===t));r=!0);}catch(e){i=!0,n=e}finally{try{r||null==p["return"]||p["return"]()}finally{if(i)throw n}}return o}function R(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}/** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */function F(e,t,o){"__proto__"==t&&oi?oi(e,t,{configurable:!0,enumerable:!0,value:o,writable:!0}):e[t]=o}/** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */function U(e,t){return e===t||e!==e&&t!==t}/** Used for built-in method references. */ /** * Assigns `value` to `key` of `object` if the existing value is not equivalent * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */function z(e,t,o){var r=e[t];ii.call(e,t)&&U(r,o)&&(void 0!==o||t in e)||F(e,t,o)}/** * This base implementation of `_.zipObject` which assigns values using `assignFunc`. * * @private * @param {Array} props The property identifiers. * @param {Array} values The property values. * @param {Function} assignFunc The function to assign values. * @returns {Object} Returns the new object. */function V(e,t,o){for(var r,i=-1,n=e.length,a=t.length,p={};++i<n;)r=i<a?t[i]:void 0,o(p,e[i],r);return p}/** * This method is like `_.fromPairs` except that it accepts two arrays, * one of property identifiers and one of corresponding values. * * @static * @memberOf _ * @since 0.4.0 * @category Array * @param {Array} [props=[]] The property identifiers. * @param {Array} [values=[]] The property values. * @returns {Object} Returns the new object. * @example * * _.zipObject(['a', 'b'], [1, 2]); * // => { 'a': 1, 'b': 2 } */function q(e,t){return V(e||[],t||[],z)}/**! * @fileOverview Kickass library to create and place poppers near their reference elements. * @version 1.14.7 * @license * Copyright (c) 2016 Federico Zivolo and contributors * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * Check if the given variable is a function * @method * @memberof Popper.Utils * @argument {Any} functionToCheck - variable to check * @returns {Boolean} answer to: is a function? */function K(e){return e&&"[object Function]"==={}.toString.call(e)}/** * Get CSS computed property of the given element * @method * @memberof Popper.Utils * @argument {Eement} element * @argument {String} property */function G(e,t){if(1!==e.nodeType)return[];// NOTE: 1 DOM access here var o=e.ownerDocument.defaultView,r=o.getComputedStyle(e,null);return t?r[t]:r}/** * Returns the parentNode or the host of the element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} parent */function $(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}/** * Returns the scrolling parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} scroll parent */function J(e){// Return body, `getScroll` will take care to get the correct `scrollTop` from it if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body;}// Firefox want us to check `-x` and `-y` variations as well var t=G(e),o=t.overflow,r=t.overflowX,i=t.overflowY;return /(auto|scroll|overlay)/.test(o+i+r)?e:J($(e))}/** * Determines if the browser is Internet Explorer * @method * @memberof Popper.Utils * @param {Number} version to check * @returns {Boolean} isIE */function Z(e){return 11===e?ci:10===e?mi:ci||mi}/** * Returns the offset parent of the given element * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} offset parent */function Q(e){if(!e)return document.documentElement;// Skip hidden elements which don't have an offsetParent for(var t=Z(10)?document.body:null,o=e.offsetParent||null// NOTE: 1 DOM access here ;o===t&&e.nextElementSibling;)o=(e=e.nextElementSibling).offsetParent;var r=o&&o.nodeName;return r&&"BODY"!==r&&"HTML"!==r?-1!==["TH","TD","TABLE"].indexOf(o.nodeName)&&"static"===G(o,"position")?Q(o):o:e?e.ownerDocument.documentElement:document.documentElement;// .offsetParent will return the closest TH, TD or TABLE in case // no offsetParent is present, I hate this job... }function ee(e){var t=e.nodeName;return"BODY"!==t&&("HTML"===t||Q(e.firstElementChild)===e)}/** * Finds the root node (document, shadowDOM root) of the given element * @method * @memberof Popper.Utils * @argument {Element} node * @returns {Element} root node */function te(e){return null===e.parentNode?e:te(e.parentNode)}/** * Finds the offset parent common to the two provided nodes * @method * @memberof Popper.Utils * @argument {Element} element1 * @argument {Element} element2 * @returns {Element} common offset parent */function oe(e,t){// This check is needed to avoid errors in case one of the elements isn't defined for any reason if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;// Here we make sure to give as "start" the element that comes first in the DOM var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,r=o?e:t,i=o?t:e,n=document.createRange();n.setStart(r,0),n.setEnd(i,0);var a=n.commonAncestorContainer;// Both nodes are inside #document if(e!==a&&t!==a||r.contains(i))return ee(a)?a:Q(a);// one of the nodes is inside shadowDOM, find which one var p=te(e);return p.host?oe(p.host,t):oe(e,te(t).host)}/** * Gets the scroll value of the given element in the given side (top and left) * @method * @memberof Popper.Utils * @argument {Element} element * @argument {String} side `top` or `left` * @returns {number} amount of scrolled pixels */function re(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"top",o="top"===t?"scrollTop":"scrollLeft",r=e.nodeName;if("BODY"===r||"HTML"===r){var i=e.ownerDocument.documentElement,n=e.ownerDocument.scrollingElement||i;return n[o]}return e[o]}/* * Sum or subtract the element scroll values (left and top) from a given rect object * @method * @memberof Popper.Utils * @param {Object} rect - Rect object you want to change * @param {HTMLElement} element - The element from the function reads the scroll values * @param {Boolean} subtract - set to true if you want to subtract the scroll values * @return {Object} rect - The modifier rect object */function ie(e,t){var o=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],r=re(t,"top"),i=re(t,"left"),n=o?-1:1;return e.top+=r*n,e.bottom+=r*n,e.left+=i*n,e.right+=i*n,e}/* * Helper to detect borders of a given element * @method * @memberof Popper.Utils * @param {CSSStyleDeclaration} styles * Result of `getStyleComputedProperty` on the given element * @param {String} axis - `x` or `y` * @return {number} borders - The borders size of the given axis */function ne(e,t){var o="x"===t?"Left":"Top",r="Left"===o?"Right":"Bottom";return parseFloat(e["border"+o+"Width"],10)+parseFloat(e["border"+r+"Width"],10)}function ae(e,t,o,r){return Lo(t["offset"+e],t["scroll"+e],o["client"+e],o["offset"+e],o["scroll"+e],Z(10)?parseInt(o["offset"+e])+parseInt(r["margin"+("Height"===e?"Top":"Left")])+parseInt(r["margin"+("Height"===e?"Bottom":"Right")]):0)}function pe(e){var t=e.body,o=e.documentElement,r=Z(10)&&getComputedStyle(o);return{height:ae("Height",t,o,r),width:ae("Width",t,o,r)}}/** * Given element offsets, generate an output similar to getBoundingClientRect * @method * @memberof Popper.Utils * @argument {Object} offsets * @returns {Object} ClientRect like output */function se(e){return ui({},e,{right:e.left+e.width,bottom:e.top+e.height})}/** * Get bounding client rect of given element * @method * @memberof Popper.Utils * @param {HTMLElement} element * @return {Object} client rect */function le(e){var t={};// IE10 10 FIX: Please, don't ask, the element isn't // considered in DOM in some circumstances... // This isn't reproducible in IE10 compatibility mode of IE11 try{if(Z(10)){t=e.getBoundingClientRect();var o=re(e,"top"),r=re(e,"left");t.top+=o,t.left+=r,t.bottom+=o,t.right+=r}else t=e.getBoundingClientRect()}catch(t){}var i={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},n="HTML"===e.nodeName?pe(e.ownerDocument):{},a=n.width||e.clientWidth||i.right-i.left,p=n.height||e.clientHeight||i.bottom-i.top,s=e.offsetWidth-a,l=e.offsetHeight-p;// subtract scrollbar size from sizes // if an hypothetical scrollbar is detected, we must be sure it's not a `border` // we make this check conditional for performance reasons if(s||l){var d=G(e);s-=ne(d,"x"),l-=ne(d,"y"),i.width-=s,i.height-=l}return se(i)}function de(e,t){var o=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2],r=Z(10),i="HTML"===t.nodeName,n=le(e),a=le(t),p=J(e),s=G(t),l=parseFloat(s.borderTopWidth,10),d=parseFloat(s.borderLeftWidth,10);o&&i&&(a.top=Lo(a.top,0),a.left=Lo(a.left,0));var c=se({top:n.top-a.top-l,left:n.left-a.left-d,width:n.width,height:n.height});// Subtract margins of documentElement in case it's being used as parent // we do this only on HTML because it's the only element that behaves // differently when margins are applied to it. The margins are included in // the box of the documentElement, in the other cases not. if(c.marginTop=0,c.marginLeft=0,!r&&i){var m=parseFloat(s.marginTop,10),f=parseFloat(s.marginLeft,10);c.top-=l-m,c.bottom-=l-m,c.left-=d-f,c.right-=d-f,c.marginTop=m,c.marginLeft=f}return(r&&!o?t.contains(p):t===p&&"BODY"!==p.nodeName)&&(c=ie(c,t)),c}function ce(e){var t=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],o=e.ownerDocument.documentElement,r=de(e,o),i=Lo(o.clientWidth,window.innerWidth||0),n=Lo(o.clientHeight,window.innerHeight||0),a=t?0:re(o),p=t?0:re(o,"left"),s={top:a-r.top+r.marginTop,left:p-r.left+r.marginLeft,width:i,height:n};return se(s)}/** * Check if the given element is fixed or is inside a fixed parent * @method * @memberof Popper.Utils * @argument {Element} element * @argument {Element} customContainer * @returns {Boolean} answer to "isFixed?" */function me(e){var t=e.nodeName;if("BODY"===t||"HTML"===t)return!1;if("fixed"===G(e,"position"))return!0;var o=$(e);return!!o&&me(o)}/** * Finds the first parent of an element that has a transformed property defined * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Element} first transformed parent or documentElement */function fe(e){// This check is needed to avoid errors in case one of the elements isn't defined for any reason if(!e||!e.parentElement||Z())return document.documentElement;for(var t=e.parentElement;t&&"none"===G(t,"transform");)t=t.parentElement;return t||document.documentElement}/** * Computed the boundaries limits and return them * @method * @memberof Popper.Utils * @param {HTMLElement} popper * @param {HTMLElement} reference * @param {number} padding * @param {HTMLElement} boundariesElement - Element used to define the boundaries * @param {Boolean} fixedPosition - Is in fixed position mode * @returns {Object} Coordinates of the boundaries */function he(e,t,o,r){var i=!!(4<arguments.length&&void 0!==arguments[4])&&arguments[4],n={top:0,left:0},a=i?fe(e):oe(e,t);// NOTE: 1 DOM access here // Handle viewport case if("viewport"===r)n=ce(a,i);else{// Handle other cases based on DOM element used as boundaries var p;"scrollParent"===r?(p=J($(t)),"BODY"===p.nodeName&&(p=e.ownerDocument.documentElement)):"window"===r?p=e.ownerDocument.documentElement:p=r;var s=de(p,a,i);// In case of HTML, we need a different computation if("HTML"===p.nodeName&&!me(a)){var l=pe(e.ownerDocument),d=l.height,c=l.width;n.top+=s.top-s.marginTop,n.bottom=d+s.top,n.left+=s.left-s.marginLeft,n.right=c+s.left}else// for all the other DOM elements, this one is good n=s}// Add paddings o=o||0;var m="number"==typeof o;return n.left+=m?o:o.left||0,n.top+=m?o:o.top||0,n.right-=m?o:o.right||0,n.bottom-=m?o:o.bottom||0,n}function be(e){var t=e.width,o=e.height;return t*o}/** * Utility used to transform the `auto` placement to the placement with more * available space. * @method * @memberof Popper.Utils * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */function ue(e,t,o,r,i){var n=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var a=he(o,r,n,i),p={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}},s=Object.keys(p).map(function(e){return ui({key:e},p[e],{area:be(p[e])})}).sort(function(e,t){return t.area-e.area}),l=s.filter(function(e){var t=e.width,r=e.height;return t>=o.clientWidth&&r>=o.clientHeight}),d=0<l.length?l[0].key:s[0].key,c=e.split("-")[1];return d+(c?"-"+c:"")}/** * Get offsets to the reference element * @method * @memberof Popper.Utils * @param {Object} state * @param {Element} popper - the popper element * @param {Element} reference - the reference element (the popper will be relative to this) * @param {Element} fixedPosition - is in fixed position mode * @returns {Object} An object containing the offsets which will be applied to the popper */function ye(e,t,o){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null,i=r?fe(t):oe(t,o);return de(o,i,r)}/** * Get the outer sizes of the given element (offset size + margins) * @method * @memberof Popper.Utils * @argument {Element} element * @returns {Object} object containing width and height properties */function ge(e){var t=e.ownerDocument.defaultView,o=t.getComputedStyle(e),r=parseFloat(o.marginTop||0)+parseFloat(o.marginBottom||0),i=parseFloat(o.marginLeft||0)+parseFloat(o.marginRight||0),n={width:e.offsetWidth+i,height:e.offsetHeight+r};return n}/** * Get the opposite placement of the given one * @method * @memberof Popper.Utils * @argument {String} placement * @returns {String} flipped placement */function ve(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}/** * Get offsets to the popper * @method * @memberof Popper.Utils * @param {Object} position - CSS position the Popper will get applied * @param {HTMLElement} popper - the popper element * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) * @param {String} placement - one of the valid placement options * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper */function we(e,t,o){o=o.split("-")[0];// Get popper node sizes var r=ge(e),i={width:r.width,height:r.height},n=-1!==["right","left"].indexOf(o),a=n?"top":"left",p=n?"left":"top",s=n?"height":"width",l=n?"width":"height";// Add position, width and height to our offsets object return i[a]=t[a]+t[s]/2-r[s]/2,i[p]=o===p?t[p]-r[l]:t[ve(p)],i}/** * Mimics the `find` method of Array * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */function xe(e,t){// use native find if supported return Array.prototype.find?e.find(t):e.filter(t)[0];// use `filter` to obtain the same behavior of `find` }/** * Return the index of the matching object * @method * @memberof Popper.Utils * @argument {Array} arr * @argument prop * @argument value * @returns index or -1 */function ke(e,t,o){// use native findIndex if supported if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});// use `find` + `indexOf` if `findIndex` isn't supported var r=xe(e,function(e){return e[t]===o});return e.indexOf(r)}/** * Loop trough the list of modifiers and run them in order, * each of them will then edit the data object. * @method * @memberof Popper.Utils * @param {dataObject} data * @param {Array} modifiers * @param {String} ends - Optional modifier name used as stopper * @returns {dataObject} */function Ee(e,t,o){var r=void 0===o?e:e.slice(0,ke(e,"name",o));return r.forEach(function(e){e["function"]&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var o=e["function"]||e.fn;// eslint-disable-line dot-notation e.enabled&&K(o)&&(t.offsets.popper=se(t.offsets.popper),t.offsets.reference=se(t.offsets.reference),t=o(t,e))}),t}/** * Updates the position of the popper, computing the new offsets and applying * the new style.<br /> * Prefer `scheduleUpdate` over `update` because of performance reasons. * @method * @memberof Popper */function Oe(){// if popper is destroyed, don't perform any further update if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};// compute reference element offsets e.offsets.reference=ye(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=ue(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=we(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=Ee(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}/** * Helper used to know if the given modifier is enabled. * @method * @memberof Popper.Utils * @returns {Boolean} */function Se(e,t){return e.some(function(e){var o=e.name,r=e.enabled;return r&&o===t})}/** * Get the prefixed supported property name * @method * @memberof Popper.Utils * @argument {String} property (camelCase) * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) */function Ce(e){for(var t=[!1,"ms","Webkit","Moz","O"],o=e.charAt(0).toUpperCase()+e.slice(1),r=0;r<t.length;r++){var n=t[r],a=n?""+n+o:e;if("undefined"!=typeof document.body.style[a])return a}return null}/** * Destroys the popper. * @method * @memberof Popper */function Le(){return this.state.isDestroyed=!0,Se(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[Ce("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}/** * Get the window associated with the element * @argument {Element} element * @returns {Window} */function Te(e){var t=e.ownerDocument;return t?t.defaultView:window}function Ae(e,t,o,r){var i="BODY"===e.nodeName,n=i?e.ownerDocument.defaultView:e;n.addEventListener(t,o,{passive:!0}),i||Ae(J(n.parentNode),t,o,r),r.push(n)}/** * Setup needed event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */function _e(e,t,o,r){o.updateBound=r,Te(e).addEventListener("resize",o.updateBound,{passive:!0});// Scroll event listener on scroll parents var i=J(e);return Ae(i,"scroll",o.updateBound,o.scrollParents),o.scrollElement=i,o.eventsEnabled=!0,o}/** * It will add resize/scroll events and start recalculating * position of the popper element when they are triggered. * @method * @memberof Popper */function Pe(){this.state.eventsEnabled||(this.state=_e(this.reference,this.options,this.state,this.scheduleUpdate))}/** * Remove event listeners used to update the popper position * @method * @memberof Popper.Utils * @private */function je(e,t){return Te(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=!1,t}/** * It will remove resize/scroll events and won't recalculate popper position * when they are triggered. It also won't trigger `onUpdate` callback anymore, * unless you call `update` method manually. * @method * @memberof Popper */function De(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=je(this.reference,this.state))}/** * Tells if a given input is a number * @method * @memberof Popper.Utils * @param {*} input to check * @return {Boolean} */function Me(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}/** * Set the style to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the style to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */function Ie(e,t){Object.keys(t).forEach(function(o){var r="";// add unit if the value is numeric and is one of the following -1!==["width","height","top","right","bottom","left"].indexOf(o)&&Me(t[o])&&(r="px"),e.style[o]=t[o]+r})}/** * Set the attributes to the given popper * @method * @memberof Popper.Utils * @argument {Element} element - Element to apply the attributes to * @argument {Object} styles * Object with a list of properties and values which will be applied to the element */function Ne(e,t){Object.keys(t).forEach(function(o){var r=t[o];!1===r?e.removeAttribute(o):e.setAttribute(o,t[o])})}/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} data.styles - List of style properties - values to apply to popper element * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element * @argument {Object} options - Modifiers configuration and options * @returns {Object} The same data object */ /** * @function * @memberof Popper.Utils * @argument {Object} data - The data object generated by `update` method * @argument {Boolean} shouldRound - If the offsets should be rounded at all * @returns {Object} The popper's position offsets rounded * * The tale of pixel-perfect positioning. It's still not 100% perfect, but as * good as it can be within reason. * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 * * Low DPI screens cause a popper to be blurry if not using full pixels (Safari * as well on High DPI screens). * * Firefox prefers no rounding for positioning and does not have blurriness on * high DPI screens. * * Only horizontal placement and left/right values need to be considered. */function Ye(e,t){var o=e.offsets,r=o.popper,i=o.reference,n=Co,a=function(e){return e},p=n(i.width),s=n(r.width),l=-1!==["left","right"].indexOf(e.placement),d=-1!==e.placement.indexOf("-"),c=t?l||d||p%2==s%2?n:So:a,m=t?n:a;return{left:c(1==p%2&&1==s%2&&!d&&t?r.left-1:r.left),top:m(r.top),bottom:m(r.bottom),right:c(r.right)}}/** * Helper used to know if the given modifier depends from another one.<br /> * It checks if the needed modifier is listed and enabled. * @method * @memberof Popper.Utils * @param {Array} modifiers - list of modifiers * @param {String} requestingName - name of requesting modifier * @param {String} requestedName - name of requested modifier * @returns {Boolean} */function He(e,t,o){var r=xe(e,function(e){var o=e.name;return o===t}),i=!!r&&e.some(function(e){return e.name===o&&e.enabled&&e.order<r.order});if(!i){var n="`"+t+"`";console.warn("`"+o+"`"+" modifier is required by "+n+" modifier in order to work, be sure to include it before "+n+"!")}return i}/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */ /** * Get the opposite placement variation of the given one * @method * @memberof Popper.Utils * @argument {String} placement variation * @returns {String} flipped placement variation */function Xe(e){return"end"===e?"start":"start"===e?"end":e}/** * List of accepted placements to use as values of the `placement` option.<br /> * Valid placements are: * - `auto` * - `top` * - `right` * - `bottom` * - `left` * * Each placement can have a variation from this list: * - `-start` * - `-end` * * Variations are interpreted easily if you think of them as the left to right * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` * is right.<br /> * Vertically (`left` and `right`), `start` is top and `end` is bottom. * * Some valid examples are: * - `top-end` (on top of reference, right aligned) * - `right-start` (on right of reference, top aligned) * - `bottom` (on bottom, centered) * - `auto-end` (on the side with more space available, alignment depends by placement) * * @static * @type {Array} * @enum {String} * @readonly * @method placements * @memberof Popper */ /** * Given an initial placement, returns all the subsequent placements * clockwise (or counter-clockwise). * * @method * @memberof Popper.Utils * @argument {String} placement - A valid placement (it accepts variations) * @argument {Boolean} counter - Set to true to walk the placements counterclockwise * @returns {Array} placements including their variations */function Be(e){var t=!!(1<arguments.length&&void 0!==arguments[1])&&arguments[1],o=vi.indexOf(e),r=vi.slice(o+1).concat(vi.slice(0,o));return t?r.reverse():r}/** * Converts a string containing value + unit into a px value number * @function * @memberof {modifiers~offset} * @private * @argument {String} str - Value + unit string * @argument {String} measurement - `height` or `width` * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @returns {Number|String} * Value in pixels, or original string if no values were extracted */function We(e,t,o,r){// separate value from unit var i=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),n=+i[1],a=i[2];// If it's not a number it's an operator, I guess if(!n)return e;if(0===a.indexOf("%")){var p;switch(a){case"%p":p=o;break;case"%":case"%r":default:p=r;}var s=se(p);return s[t]/100*n}if("vh"===a||"vw"===a){// if is a vh or vw, we calculate the size based on the viewport var l;return l="vh"===a?Lo(document.documentElement.clientHeight,window.innerHeight||0):Lo(document.documentElement.clientWidth,window.innerWidth||0),l/100*n}// if is an explicit pixel unit, we get rid of the unit and keep the value // if is an implicit unit, it's px, and we return just the value return n}/** * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. * @function * @memberof {modifiers~offset} * @private * @argument {String} offset * @argument {Object} popperOffsets * @argument {Object} referenceOffsets * @argument {String} basePlacement * @returns {Array} a two cells array with x and y offsets in numbers */function Re(e,t,o,r){var i=[0,0],n=-1!==["right","left"].indexOf(r),a=e.split(/(\+|\-)/).map(function(e){return e.trim()}),p=a.indexOf(xe(a,function(e){return-1!==e.search(/,|\s/)}));// Use height if placement is left or right and index is 0 otherwise use width // in this way the first offset will use an axis and the second one // will use the other one a[p]&&-1===a[p].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");// If divider is found, we divide the list of values and operands to divide // them by ofset X and Y. var s=/\s*,\s*|\s+/,l=-1===p?[a]:[a.slice(0,p).concat([a[p].split(s)[0]]),[a[p].split(s)[1]].concat(a.slice(p+1))];return l=l.map(function(e,r){// Most of the units rely on the orientation of the popper var i=(1===r?!n:n)?"height":"width",p=!1;return e// This aggregates any `+` or `-` sign that aren't considered operators // e.g.: 10 + +5 => [10, +, +5] .reduce(function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[])// Here we convert the string values into number values (in px) .map(function(e){return We(e,i,t,o)})}),l.forEach(function(e,t){e.forEach(function(o,r){Me(o)&&(i[t]+=o*("-"===e[r-1]?-1:1))})}),i}/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @argument {Number|String} options.offset=0 * The offset value as described in the modifier description * @returns {Object} The data object, properly modified */function Fe(e,t){var o=t.offset,r=e.placement,i=e.offsets,n=i.popper,a=i.reference,p=r.split("-")[0],s=void 0;return s=Me(+o)?[+o,0]:Re(o,n,a,p),"left"===p?(n.top+=s[0],n.left-=s[1]):"right"===p?(n.top+=s[0],n.left+=s[1]):"top"===p?(n.left+=s[0],n.top-=s[1]):"bottom"===p&&(n.left+=s[0],n.top+=s[1]),e.popper=n,e}/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */function Ue(){return Ue=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var r in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},Ue.apply(this,arguments)}/** * Ponyfill for Array.from - converts iterable values to an array */function ze(e){return[].slice.call(e)}/** * Ponyfill for Element.prototype.closest */function Ve(e,t){return(_i.closest||function(e){// @ts-ignore for(var t=this;t;){if(Pi.call(t,e))return t;t=t.parentElement}}).call(e,t)}/** * Works like Element.prototype.closest, but uses a callback instead */function qe(e,t){for(;e;){if(t(e))return e;e=e.parentElement}}/** * Returns an object of optional props from data-tippy-* attributes */function Ke(e){return Di.reduce(function(t,o){var r=(e.getAttribute("data-tippy-".concat(o))||"").trim();if(!r)return t;if("content"===o)t[o]=r;else try{t[o]=JSON.parse(r)}catch(i){t[o]=r}return t},{})}/** * Polyfills the virtual reference (plain object) with Element.prototype props * Mutating because DOM elements are mutated, adds `_tippy` property */function Ge(e){var t={isVirtual:!0,attributes:e.attributes||{},setAttribute:function(t,o){e.attributes[t]=o},getAttribute:function(t){return e.attributes[t]},removeAttribute:function(t){delete e.attributes[t]},hasAttribute:function(t){return t in e.attributes},addEventListener:function(){},removeEventListener:function(){},classList:{classNames:{},add:function(t){e.classList.classNames[t]=!0},remove:function(t){delete e.classList.classNames[t]},contains:function(t){return t in e.classList.classNames}}};for(var o in t)e[o]=t[o]}/** * Determines if a value is a "bare" virtual element (before mutations done * by `polyfillElementPrototypeProperties()`). JSDOM elements show up as * [object Object], we can check if the value is "element-like" if it has * `addEventListener` */function $e(e){return"[object Object]"==={}.toString.call(e)&&!e.addEventListener}/** * Safe .hasOwnProperty check, for prototype-less objects */function Je(e,t){return{}.hasOwnProperty.call(e,t)}/** * Returns an array of elements based on the value */function Ze(e){if(rt(e))// TODO: VirtualReference is not compatible to type Element return[e];if(e instanceof NodeList)return ze(e);if(Array.isArray(e))return e;try{return ze(document.querySelectorAll(e))}catch(t){return[]}}/** * Returns a value at a given index depending on if it's an array or number */function Qe(e,t,o){if(Array.isArray(e)){var r=e[t];return null==r?o:r}return e}/** * Debounce utility */function et(e,t){var o;return function(){var r=this,i=arguments;clearTimeout(o),o=setTimeout(function(){return e.apply(r,i)},t)}}/** * Prevents errors from being thrown while accessing nested modifier objects * in `popperOptions` */function tt(e,t){return e&&e.modifiers&&e.modifiers[t]}/** * Determines if an array or string includes a value */function ot(e,t){return-1<e.indexOf(t)}/** * Determines if the value is singular-like */function rt(e){return!!(e&&Je(e,"isVirtual"))||e instanceof Element}/** * Firefox extensions don't allow setting .innerHTML directly, this will trick it */function it(){return"innerHTML"}/** * Evaluates a function if one, or returns the value */function nt(e,t){return"function"==typeof e?e.apply(null,t):e}/** * Sets a popperInstance `flip` modifier's enabled state */function at(e,t){e.filter(function(e){return"flip"===e.name})[0].enabled=t}/** * Determines if an element can receive focus * Always returns true for virtual objects */function pt(e){return!(e instanceof Element)||Pi.call(e,"a[href],area[href],button,details,input,textarea,select,iframe,[tabindex]")&&!e.hasAttribute("disabled")}/** * Returns a new `div` element */function st(){return document.createElement("div")}/** * Evaluates the props object by merging data attributes and * disabling conflicting options where necessary */function lt(e,t){var o=Ue({},t,{content:nt(t.content,[e])},t.ignoreAttributes?{}:Ke(e));return(o.arrow||Si)&&(o.animateFill=!1),o}/** * Validates an object of options with the valid default props object */function dt(e,t){Object.keys(e).forEach(function(e){if(!Je(t,e))throw new Error("[tippy]: `".concat(e,"` is not a valid option"))})}/** * Sets the innerHTML of an element */function ct(e,t){e[it()]=t instanceof Element?t[it()]:t}/** * Sets the content of a tooltip */function mt(e,t){if(t.content instanceof Element)ct(e,""),e.appendChild(t.content);else if("function"!=typeof t.content){var o=t.allowHTML?"innerHTML":"textContent";e[o]=t.content}}/** * Returns the child elements of a popper element */function ft(e){return{tooltip:e.querySelector(Ai.TOOLTIP),backdrop:e.querySelector(Ai.BACKDROP),content:e.querySelector(Ai.CONTENT),arrow:e.querySelector(Ai.ARROW)||e.querySelector(Ai.ROUND_ARROW)}}/** * Adds `data-inertia` attribute */function ht(e){e.setAttribute("data-inertia","")}/** * Removes `data-inertia` attribute */function bt(e){e.removeAttribute("data-inertia")}/** * Creates an arrow element and returns it */function ut(e){var t=st();return"round"===e?(t.className="tippy-roundarrow",ct(t,"<svg viewBox=\"0 0 18 7\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 7s2.021-.015 5.253-4.218C6.584 1.051 7.797.007 9 0c1.203-.007 2.416 1.035 3.761 2.782C16.012 7.005 18 7 18 7H0z\"/></svg>")):t.className="tippy-arrow",t}/** * Creates a backdrop element and returns it */function yt(){var e=st();return e.className="tippy-backdrop",e.setAttribute("data-state","hidden"),e}/** * Adds interactive-related attributes */function gt(e,t){e.setAttribute("tabindex","-1"),t.setAttribute("data-interactive","")}/** * Removes interactive-related attributes */function vt(e,t){e.removeAttribute("tabindex"),t.removeAttribute("data-interactive")}/** * Applies a transition duration to a list of elements */function wt(e,t){e.forEach(function(e){e&&(e.style.transitionDuration="".concat(t,"ms"))})}/** * Add/remove transitionend listener from tooltip */function xt(e,t,o){// UC Browser hasn't adopted the `transitionend` event despite supporting // unprefixed transitions... var r=Si&&void 0!==document.body.style.webkitTransition?"webkitTransitionEnd":"transitionend";e[t+"EventListener"](r,o)}/** * Returns the popper's placement, ignoring shifting (top-start, etc) */function kt(e){var t=e.getAttribute("x-placement");return t?t.split("-")[0]:""}/** * Sets the visibility state to elements so they can begin to transition */function Et(e,t){e.forEach(function(e){e&&e.setAttribute("data-state",t)})}/** * Triggers reflow */function Ot(e){void e.offsetHeight}/** * Adds/removes theme from tooltip's classList */function St(e,t,o){o.split(" ").forEach(function(o){e.classList[t](o+"-theme")})}/** * Constructs the popper element and returns it */function Ct(e,t){var o=st();o.className="tippy-popper",o.id="tippy-".concat(e),o.style.zIndex=""+t.zIndex,t.role&&o.setAttribute("role",t.role);var r=st();r.className="tippy-tooltip",r.style.maxWidth=t.maxWidth+("number"==typeof t.maxWidth?"px":""),r.setAttribute("data-size",t.size),r.setAttribute("data-animation",t.animation),r.setAttribute("data-state","hidden"),St(r,"add",t.theme);var i=st();return i.className="tippy-content",i.setAttribute("data-state","hidden"),t.interactive&>(o,r),t.arrow&&r.appendChild(ut(t.arrowType)),t.animateFill&&(r.appendChild(yt()),r.setAttribute("data-animatefill","")),t.inertia&&ht(r),mt(i,t),r.appendChild(i),o.appendChild(r),o}/** * Updates the popper element based on the new props */function Lt(e,t,o){var r=ft(e),i=r.tooltip,n=r.content,a=r.backdrop,p=r.arrow;e.style.zIndex=""+o.zIndex,i.setAttribute("data-size",o.size),i.setAttribute("data-animation",o.animation),i.style.maxWidth=o.maxWidth+("number"==typeof o.maxWidth?"px":""),o.role?e.setAttribute("role",o.role):e.removeAttribute("role"),t.content!==o.content&&mt(n,o),!t.animateFill&&o.animateFill?(i.appendChild(yt()),i.setAttribute("data-animatefill","")):t.animateFill&&!o.animateFill&&(i.removeChild(a),i.removeAttribute("data-animatefill")),!t.arrow&&o.arrow?i.appendChild(ut(o.arrowType)):t.arrow&&!o.arrow&&i.removeChild(p),t.arrow&&o.arrow&&t.arrowType!==o.arrowType&&i.replaceChild(ut(o.arrowType),p),!t.interactive&&o.interactive?gt(e,i):t.interactive&&!o.interactive&&vt(e,i),!t.inertia&&o.inertia?ht(i):t.inertia&&!o.inertia&&bt(i),t.theme!==o.theme&&(St(i,"remove",t.theme),St(i,"add",o.theme))}/** * Runs the callback after the popper's position has been updated * update() is debounced with Promise.resolve() or setTimeout() * scheduleUpdate() is update() wrapped in requestAnimationFrame() */function Tt(e,t){var o=e.popper,r=e.options,i=r.onCreate,n=r.onUpdate;r.onCreate=r.onUpdate=function(e){Ot(o),t(),n&&n(e),r.onCreate=i,r.onUpdate=n}}/** * Hides all visible poppers on the document */function At(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},t=e.checkHideOnClick,o=e.exclude,r=e.duration;ze(document.querySelectorAll(Ai.POPPER)).forEach(function(e){var i=e._tippy;!i||t&&!0!==i.props.hideOnClick||o&&e===o.popper||i.hide(r)})}/** * Determines if the mouse cursor is outside of the popper's interactive border * region */function _t(e,t,o,r){if(!e)return!0;var i=o.clientX,n=o.clientY,a=r.interactiveBorder,p=r.distance,s=t.top-n>("top"===e?a+p:a),l=n-t.bottom>("bottom"===e?a+p:a),d=t.left-i>("left"===e?a+p:a),c=i-t.right>("right"===e?a+p:a);return s||l||d||c}/** * Returns the distance offset, taking into account the default offset due to * the transform: translate() rule (10px) in CSS */function Pt(e){return-(e-10)+"px"}function jt(){Mi||(Mi=!0,Ci&&document.body.classList.add("tippy-iOS"),window.performance&&document.addEventListener("mousemove",Dt))}function Dt(){var e=performance.now();// Chrome 60+ is 1 mousemove per animation frame, use 20ms time difference 20>e-Ii&&(Mi=!1,document.removeEventListener("mousemove",Dt),!Ci&&document.body.classList.remove("tippy-iOS")),Ii=e}function Mt(e){// Simulated events dispatched on the document if(!(e.target instanceof Element))return At();// Clicked on an interactive popper var t=Ve(e.target,Ai.POPPER);if(!(t&&t._tippy&&t._tippy.props.interactive)){// Clicked on a reference var o=qe(e.target,function(e){return e._tippy&&e._tippy.reference===e});if(o){var r=o._tippy;if(r){var i=ot(r.props.trigger||"","click");if(Mi||i)return At({exclude:r,checkHideOnClick:!0});if(!0!==r.props.hideOnClick||i)return;r.clearDelayTimeouts()}}At({checkHideOnClick:!0})}}function It(){var e=document,t=e.activeElement;t&&t.blur&&t._tippy&&t.blur()}/** * Adds the needed global event listeners */function Nt(){document.addEventListener("click",Mt,!0),document.addEventListener("touchstart",jt,ji),window.addEventListener("blur",It)}/** * Creates and returns a Tippy object. We're using a closure pattern instead of * a class so that the exposed object API is clean without private members * prefixed with `_`. */function Yt(e,t){/* ======================= 🔒 Private methods 🔒 ======================= */ /** * Positions the virtual reference near the cursor */function o(e){var t=D=e,o=t.clientX,r=t.clientY;if(z.popperInstance){// Ensure virtual reference is padded to prevent tooltip from // overflowing. Maybe Popper.js issue? var i=kt(z.popper),n=z.props.arrow?4+("round"===z.props.arrowType?18:16):4,p=ot(["top","bottom"],i),s=ot(["left","right"],i),l=p?Lo(n,o):o,d=s?Lo(n,r):r;p&&l>n&&(l=Oo(o,window.innerWidth-n)),s&&d>n&&(d=Oo(r,window.innerHeight-n));var c=z.reference.getBoundingClientRect(),m=z.props.followCursor,f="horizontal"===m,h="vertical"===m;z.popperInstance.reference=Ue({},z.popperInstance.reference,{getBoundingClientRect:function(){return{width:0,height:0,top:f?c.top:d,bottom:f?c.bottom:d,left:h?c.left:l,right:h?c.right:l}},clientWidth:0,clientHeight:0}),z.popperInstance.scheduleUpdate(),"initial"===m&&z.state.isVisible&&a()}}/** * Creates the tippy instance for a delegate when it's been triggered */function r(e){if(e){var o=Ve(e.target,z.props.target);o&&!o._tippy&&(Yt(o,Ue({},z.props,{content:nt(t.content,[o]),appendTo:t.appendTo,target:"",showOnInit:!0})),i(e))}}/** * Setup before show() is invoked (delays, etc.) */function i(e){if(C(),!z.state.isVisible){// Is a delegate, create an instance for the child target if(z.props.target)return r(e);if(X=!0,z.props.wait)return z.props.wait(z,e);// If the tooltip has a delay, we need to be listening to the mousemove as // soon as the trigger event is fired, so that it's in the correct position // upon mount. // Edge case: if the tooltip is still mounted, but then scheduleShow() is // called, it causes a jump. y()&&!z.state.isMounted&&document.addEventListener("mousemove",o);var t=Qe(z.props.delay,0,Li.delay);t?M=setTimeout(function(){T()},t):T()}}/** * Setup before hide() is invoked (delays, etc.) */function n(){if(C(),!z.state.isVisible)return a();X=!1;var e=Qe(z.props.delay,1,Li.delay);e?I=setTimeout(function(){z.state.isVisible&&A()},e):N=requestAnimationFrame(function(){A()})}/** * Removes the follow cursor listener */function a(){document.removeEventListener("mousemove",o)}/** * Cleans up old listeners */function p(){document.body.removeEventListener("mouseleave",n),document.removeEventListener("mousemove",W)}/** * Event listener invoked upon trigger */function s(e){!z.state.isEnabled||h(e)||(!z.state.isVisible&&(j=e.type,e instanceof MouseEvent&&(D=e)),"click"===e.type&&!1!==z.props.hideOnClick&&z.state.isVisible?n():i(e))}/** * Event listener used for interactive tooltips to detect when they should * hide */function l(e){var t=qe(e.target,function(e){return e._tippy}),o=Ve(e.target,Ai.POPPER)===z.popper,r=t===z.reference;o||r||_t(kt(z.popper),z.popper.getBoundingClientRect(),e,z.props)&&(p(),n())}/** * Event listener invoked upon mouseleave */function d(e){return h(e)?void 0:z.props.interactive?(document.body.addEventListener("mouseleave",n),void document.addEventListener("mousemove",W)):void n()}/** * Event listener invoked upon blur */function c(e){e.target!==z.reference||z.props.interactive&&e.relatedTarget&&z.popper.contains(e.relatedTarget)||n()}/** * Event listener invoked when a child target is triggered */function m(e){Ve(e.target,z.props.target)&&i(e)}/** * Event listener invoked when a child target should hide */function f(e){Ve(e.target,z.props.target)&&n()}/** * Determines if an event listener should stop further execution due to the * `touchHold` option */function h(e){var t="ontouchstart"in window,o=ot(e.type,"touch"),r=z.props.touchHold;return t&&Mi&&r&&!o||Mi&&!r&&o}/** * Creates the popper instance for the instance */function b(){function e(e){z.props.flip&&!z.props.flipOnUpdate&&(e.flipped&&(z.popperInstance.options.placement=e.placement),at(z.popperInstance.modifiers,!1)),r.setAttribute("x-placement",e.placement);var t=kt(z.popper),o=r.style;o.top=o.bottom=o.left=o.right="",o[t]=Pt(z.props.distance);var i=n&&void 0!==n.padding?n.padding:4,a="number"==typeof i,p=Ue({top:a?i:i.top,bottom:a?i:i.bottom,left:a?i:i.left,right:a?i:i.right},!a&&i);p[t]=a?i+z.props.distance:(i[t]||0)+z.props.distance,z.popperInstance.modifiers.filter(function(e){return"preventOverflow"===e.name})[0].padding=p}var t=z.props.popperOptions,o=z.popperChildren,r=o.tooltip,i=o.arrow,n=tt(t,"preventOverflow"),a=Ue({placement:z.props.placement},t,{modifiers:Ue({},t?t.modifiers:{},{preventOverflow:Ue({boundariesElement:z.props.boundary,padding:4},n),arrow:Ue({element:i,enabled:!!i},tt(t,"arrow")),flip:Ue({enabled:z.props.flip,// The tooltip is offset by 10px from the popper in CSS, // we need to account for its distance padding:z.props.distance+4,behavior:z.props.flipBehavior},tt(t,"flip")),offset:Ue({offset:z.props.offset},tt(t,"offset"))}),// This gets invoked when calling `.set()` and updating a popper // instance dependency, since a new popper instance gets created onCreate:function(o){e(o),t&&t.onCreate&&t.onCreate(o)},// This gets invoked on initial create and show()/scroll/resize update. // This is due to `afterPopperPositionUpdates` overwriting onCreate() // with onUpdate() onUpdate:function(o){e(o),t&&t.onUpdate&&t.onUpdate(o)}});z.popperInstance=new xi(z.reference,z.popper,a)}/** * Mounts the tooltip to the DOM, callback to show tooltip is run **after** * popper's position has updated */function u(e){var t=!y()&&!("initial"===z.props.followCursor&&Mi);z.popperInstance?(!y()&&(z.popperInstance.scheduleUpdate(),t&&z.popperInstance.enableEventListeners()),at(z.popperInstance.modifiers,z.props.flip)):(b(),!t&&z.popperInstance.disableEventListeners()),z.popperInstance.reference=z.reference;var r=z.popperChildren.arrow;y()?(r&&(r.style.margin="0"),D&&o(D)):r&&(r.style.margin=""),Mi&&D&&"initial"===z.props.followCursor&&(o(D),r&&(r.style.margin="0")),Tt(z.popperInstance,e);var i=z.props.appendTo;H="parent"===i?z.reference.parentNode:nt(i,[z.reference]),H.contains(z.popper)||(H.appendChild(z.popper),z.props.onMount(z),z.state.isMounted=!0)}/** * Determines if the instance is in `followCursor` mode */function y(){return z.props.followCursor&&!Mi&&"focus"!==j}/** * Updates the tooltip's position on each animation frame */function g(){function e(){z.popperInstance&&z.popperInstance.scheduleUpdate(),z.state.isMounted?requestAnimationFrame(e):wt([z.popper],0)}wt([z.popper],Oi?0:z.props.updateDuration),e()}/** * Invokes a callback once the tooltip has fully transitioned out */function v(e,t){x(e,function(){!z.state.isVisible&&H&&H.contains(z.popper)&&t()})}/** * Invokes a callback once the tooltip has fully transitioned in */function w(e,t){x(e,t)}/** * Invokes a callback once the tooltip's CSS transition ends */function x(e,t){/** * Listener added as the `transitionend` handler */function o(e){e.target===r&&(xt(r,"remove",o),t())}// Make callback synchronous if duration is 0 // `transitionend` won't fire otherwise var r=z.popperChildren.tooltip;return 0===e?t():void(xt(r,"remove",Y),xt(r,"add",o),Y=o)}/** * Adds an event listener to the reference and stores it in `listeners` */function k(e,t){var o=!!(2<arguments.length&&void 0!==arguments[2])&&arguments[2];z.reference.addEventListener(e,t,o),B.push({eventType:e,handler:t,options:o})}/** * Adds event listeners to the reference based on the `trigger` prop */function E(){z.props.touchHold&&!z.props.target&&(k("touchstart",s,ji),k("touchend",d,ji)),z.props.trigger.trim().split(" ").forEach(function(e){"manual"===e||(z.props.target?"mouseenter"===e?(k("mouseover",m),k("mouseout",f)):"focus"===e?(k("focusin",m),k("focusout",f)):"click"===e?k(e,m):void 0:(k(e,s),"mouseenter"===e?k("mouseleave",d):"focus"===e?k(Oi?"focusout":"blur",c):void 0))})}/** * Removes event listeners from the reference */function O(){B.forEach(function(e){var t=e.eventType,o=e.handler,r=e.options;z.reference.removeEventListener(t,o,r)}),B=[]}/** * Returns inner elements used in show/hide methods */function S(){return[z.popperChildren.tooltip,z.popperChildren.backdrop,z.popperChildren.content]}/* ======================= 🔑 Public methods 🔑 ======================= */ /** * Enables the instance to allow it to show or hide */ /** * Clears pending timeouts related to the `delay` prop if any */function C(){clearTimeout(M),clearTimeout(I),cancelAnimationFrame(N)}/** * Sets new props for the instance and redraws the tooltip */function L(e){e=e||{},dt(e,Li);var t=z.props,r=lt(z.reference,Ue({},z.props,e,{ignoreAttributes:!0}));r.ignoreAttributes=Je(e,"ignoreAttributes")?e.ignoreAttributes||!1:t.ignoreAttributes,z.props=r,(Je(e,"trigger")||Je(e,"touchHold"))&&(O(),E()),Je(e,"interactiveDebounce")&&(p(),W=et(l,e.interactiveDebounce||0)),Lt(z.popper,t,r),z.popperChildren=ft(z.popper),z.popperInstance&&(z.popperInstance.update(),Ti.some(function(t){return Je(e,t)})&&(z.popperInstance.destroy(),b(),!z.state.isVisible&&z.popperInstance.disableEventListeners(),z.props.followCursor&&D&&o(D)))}/** * Shortcut for .set({ content: newContent }) */ /** * Shows the tooltip */function T(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:Qe(z.props.duration,0,Li.duration[1]);return z.state.isDestroyed||!z.state.isEnabled||Mi&&!z.props.touch?void 0:Je(z.reference,"isVirtual")||document.documentElement.contains(z.reference)?void(z.reference.hasAttribute("disabled")||!1===z.props.onShow(z)||(// Prevent a transition if the popper is at the opposite placement z.popper.style.visibility="visible",z.state.isVisible=!0,z.props.interactive&&z.reference.classList.add("tippy-active"),wt([z.popper,z.popperChildren.tooltip,z.popperChildren.backdrop],0),u(function(){z.state.isVisible&&(!y()&&z.popperInstance.update(),wt([z.popper],P.updateDuration),wt(S(),e),z.popperChildren.backdrop&&(z.popperChildren.content.style.transitionDelay=Co(e/12)+"ms"),z.props.sticky&&g(),Et(S(),"visible"),w(e,function(){z.popperChildren.tooltip.classList.add("tippy-notransition"),z.props.aria&&z.reference.setAttribute("aria-".concat(z.props.aria),z.popper.id),z.props.onShown(z),z.state.isShown=!0}))}))):_();// Destroy tooltip if the reference element is no longer on the DOM // Do not show tooltip if the reference element has a `disabled` attribute }/** * Hides the tooltip */function A(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:Qe(z.props.duration,1,Li.duration[1]);z.state.isDestroyed||!z.state.isEnabled||!1===z.props.onHide(z)||(z.popperChildren.tooltip.classList.remove("tippy-notransition"),z.props.interactive&&z.reference.classList.remove("tippy-active"),z.popper.style.visibility="hidden",z.state.isVisible=!1,z.state.isShown=!1,wt(S(),e),Et(S(),"hidden"),v(e,function(){X||a(),z.props.aria&&z.reference.removeAttribute("aria-".concat(z.props.aria)),z.popperInstance.disableEventListeners(),z.popperInstance.options.placement=z.props.placement,H.removeChild(z.popper),z.props.onHidden(z),z.state.isMounted=!1}))}/** * Destroys the tooltip */function _(e){z.state.isDestroyed||(z.state.isMounted&&A(0),O(),delete z.reference._tippy,z.props.target&&e&&ze(z.reference.querySelectorAll(z.props.target)).forEach(function(e){e._tippy&&e._tippy.destroy()}),z.popperInstance&&z.popperInstance.destroy(),z.state.isDestroyed=!0)}var P=lt(e,t);// If the reference shouldn't have multiple tippys, return null early if(!P.multiple&&e._tippy)return null;/* ======================= 🔒 Private members 🔒 ======================= */ // The last trigger event type that caused the tippy to show var j,D,M,I,N,Y,H,X=!1,B=[],W=0<P.interactiveDebounce?et(l,P.interactiveDebounce):l,R=Ni++,F=Ct(R,P),U=ft(F),z={// properties id:R,reference:e,popper:F,popperChildren:U,popperInstance:null,props:P,state:{// Is the instance currently enabled? isEnabled:!0,// Is the tippy currently showing and not transitioning out? isVisible:!1,// Has the instance been destroyed? isDestroyed:!1,// Is the tippy currently mounted to the DOM? isMounted:!1,// Has the tippy finished transitioning in? isShown:!1// Popper.js instance for the tippy is lazily created },// methods clearDelayTimeouts:C,set:L,setContent:function(e){L({content:e})},show:T,hide:A,enable:function(){z.state.isEnabled=!0}/** * Disables the instance to disallow it to show or hide */,disable:function(){z.state.isEnabled=!1},destroy:_};// The last mousemove event object created by the document mousemove event return E(),P.lazy||(b(),z.popperInstance.disableEventListeners()),P.showOnInit&&i(),!P.a11y||P.target||pt(e)||e.setAttribute("tabindex","0"),F.addEventListener("mouseenter",function(e){z.props.interactive&&z.state.isVisible&&"mouseenter"===j&&i(e)}),F.addEventListener("mouseleave",function(){z.props.interactive&&"mouseenter"===j&&document.addEventListener("mousemove",W)}),e._tippy=z,F._tippy=z,z}/** * Groups an array of instances by taking control of their props during * certain lifecycles. */ /** * Exported module */function Ht(e,t){dt(t||{},Li),Yi||(Nt(),Yi=!0);var o=Ue({},Li,t);// If they are specifying a virtual positioning reference, we need to polyfill // some native DOM props $e(e)&&Ge(e);var r=Ze(e).reduce(function(e,t){var r=t&&Yt(t,o);return r&&e.push(r),e},[]);return rt(e)?r[0]:r}/** * Static props */ /** * TODO rewrite the way items are being added to use more performant documentFragment code * @param html * @return {HTMLElement} The element created from the passed HTML string */function Xt(e){const t=document.createElement("div");return t.innerHTML=e,t.children[0]}/** * Parse the position object or string to return the attachment and element to attach to * @param {Object|String} position Either a string or object denoting the selector and position for attachment * @return {Object} The object with `element` and `on` for the step * @private */function Bt(e){if(a(e))return e.hasOwnProperty("element")&&e.hasOwnProperty("on")?e:null;const t=/^(.+) ((auto|top|left|right|bottom)(-start|-end)?)$/,o=t.exec(e);return o?{element:o[1],on:o[2]}:null}/** * @param obj * @param {Array} props * @return {*} */function Wt(e,t){if(null===e||m(e))return e;if(a(e))return e;const o=e.split(" ");return q(t,o)}/** * Determines options for the tooltip and initializes * `this.tooltip` as a Tippy.js instance. */function Rt(){if(m(Ht))throw new Error(Hi);this.tooltip&&this.tooltip.destroy();const e=this.parseAttachTo();this.tooltip=Ut.call(this,e),this.target=e.element||document.body,this.el.classList.add("shepherd-element")}/** * Passes `options.attachTo` to `_parseAttachToOpts` to get the correct `attachTo` format * @returns {({} & {element, on}) | ({})} * `element` is a qualified HTML Element * `on` is a string position value */function Ft(){const e=Bt(this.options.attachTo)||{},t=Object.assign({},e);if(N(e.element)){// Can't override the element in user opts reference because we can't // guarantee that the element will exist in the future. try{t.element=document.querySelector(e.element)}catch(t){// TODO }t.element||console.error(`The element for this Shepherd step was not found ${e.element}`)}return t}/** * Generates a `Tippy` instance from a set of base `attachTo` options * * @return {tippy} The final tippy instance * @private */function Ut(e){if(!e.element)return Vt.call(this);const t=zt.call(this,e);return Ht(e.element,t)}/** * Generates the hash of options that will be passed to `Tippy` instances * target an element in the DOM. * * @param {Object} attachToOptions The local `attachTo` options * @return {Object} The final tippy options object * @private */function zt(e){const t={content:this.el,flipOnUpdate:!0,placement:e.on||"right"};if(Object.assign(t,this.options.tippyOptions),this.options.title){const e=t.theme;t.theme=e?`${e} shepherd-has-title`:"shepherd-has-title"}return this.options.tippyOptions&&this.options.tippyOptions.popperOptions&&Object.assign(Bi,this.options.tippyOptions.popperOptions),t.popperOptions=Bi,t}/** * Generates a `Tippy` instance for a tooltip that doesn't have a * target element in the DOM -- and thus is positioned in the center * of the view * * @return {tippy} The final tippy instance * @private */function Vt(){const e=H({content:this.el,placement:"top"},this.options.tippyOptions);e.arrow=!1,e.popperOptions=e.popperOptions||{};const t=Object.assign({},Bi,e.popperOptions,{modifiers:Object.assign(Xi,e.popperOptions.modifiers)});return e.popperOptions=t,Ht(document.body,e)}/** * Sets up the handler to determine if we should advance the tour * @private */function qt(e){return t=>{if(this.isOpen()){const o=this.el&&t.target===this.el,r=!m(e)&&t.target.matches(e);(r||o)&&this.tour.next()}}}/** * Bind the event handler for advanceOn */function Kt(){// An empty selector matches the step element const e=Wt(this.options.advanceOn,["selector","event"]),t=e.event,o=e.selector,r=qt.call(this,o),i=document.querySelector(o);!m(o)&&i?i.addEventListener(t,r):document.body.addEventListener(t,r,!0),this.on("destroy",()=>document.body.removeEventListener(t,r,!0))}/** * Bind events to the buttons for next, back, etc * @param {Object} cfg An object containing the config options for the button * @param {HTMLElement} el The element for the button */function Gt(e,t){e.events=e.events||{},m(e.action)||(e.events.click=e.action),L(e.events,(e,o)=>{if(N(e)){const t=e;e=()=>this.tour.show(t)}t.dataset.buttonEvent=!0,t.addEventListener(o,e),this.on("destroy",()=>{t.removeAttribute("data-button-event"),t.removeEventListener(o,e)})})}/** * Add a click listener to the cancel link that cancels the tour * @param {HTMLElement} link The cancel link element */function $t(e){e.addEventListener("click",t=>{t.preventDefault(),this.cancel()})}/** * Take an array of strings and look up methods by name, then bind them to `this` * @param {String[]} methods The names of methods to bind */function Jt(e){e.map(e=>{this[e]=this[e].bind(this)})}/** * Creates incremented ID for each newly created step * * @private * @return {Number} The unique id for the step */ /** * Checks if `value` is classified as a `Number` primitive or object. * * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are * classified as numbers, use the `_.isFinite` method. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a number, else `false`. * @example * * _.isNumber(3); * // => true * * _.isNumber(Number.MIN_VALUE); * // => true * * _.isNumber(Infinity); * // => true * * _.isNumber('3'); * // => false */function Zt(e){return"number"==typeof e||a(e)&&"[object Number]"==n(e)}/** * <svg id="shepherdModalOverlayContainer" xmlns="http://www.w3.org/2000/svg"> */function Qt(){const e=document.createElementNS(Fi,"svg");return e.setAttributeNS(null,"id",Ui.modalOverlay),e}/** * <mask id="shepherdModalMask" x="0" y="0" width="100%" height="100%"> */function eo(){const e=document.createElementNS(Fi,"mask");return mo(e,{height:"100%",id:Ui.modalOverlayMask,width:"100%",x:"0",y:"0"}),e}/** * <rect id="modalOverlayMaskRect" x="0" y="0" width="100%" height="100%" fill="#FFFFFF"/> */function to(){const e=document.createElementNS(Fi,"rect");return mo(e,{fill:"#FFFFFF",height:"100%",id:Ui.modalOverlayMaskRect,width:"100%",x:"0",y:"0"}),e}/** * <rect id="shepherdModalMaskOpening" fill="#000000"/> */function oo(){const e=document.createElementNS(Fi,"rect");return mo(e,{fill:"#000000",id:Ui.modalOverlayMaskOpening}),e}/** * <rect x="0" y="0" width="100%" height="100%" mask="url(#shepherdModalMask)"/> */function ro(){const e=document.createElementNS(Fi,"rect");return mo(e,{height:"100%",width:"100%",x:"0",y:"0"}),e.setAttribute("mask",`url(#${Ui.modalOverlayMask})`),e}/** * Generates an SVG with the following structure: * ```html * <svg id="shepherdModalOverlayContainer" xmlns="http://www.w3.org/2000/svg"> <defs> <mask id="shepherdModalMask" x="0" y="0" width="100%" height="100%" > <rect x="0" y="0" width="100%" height="100%" fill="#FFFFFF"/> <!-- This element will "punch a hole" through the mask by preventing it from rendering within the perimeter --> <rect id="shepherdModalMaskOpening"/> </mask> </defs> <rect x="0" y="0" width="100%" height="100%" mask="url(#shepherdModalMask)"/> </svg> * ``` */function io(){const e=Qt(),t=document.createElementNS(Fi,"defs"),o=eo(),r=to(),i=oo(),n=ro();return o.appendChild(r),o.appendChild(i),t.appendChild(o),e.appendChild(t),e.appendChild(n),e}/** * Uses the bounds of the element we want the opening overtop of to set the dimensions of the opening and position it * @param {HTMLElement} targetElement The element the opening will expose * @param {SVGElement} openingElement The svg mask for the opening */function no(e,t){if(e.getBoundingClientRect&&t instanceof SVGElement){const o=e.getBoundingClientRect(),r=o.x,i=o.y,n=o.width,a=o.height,p=o.left,s=o.top;// getBoundingClientRect is not consistent. Some browsers use x and y, while others use left and top mo(t,{x:r||p,y:i||s,width:n,height:a})}}function ao(e){e&&e instanceof SVGElement&&mo(e,{height:"0",x:"0",y:"0",width:"0"})}function po(e){return e.querySelector(`#${Ui.modalOverlayMaskOpening}`)}function so(e){e.preventDefault()}function lo(e){e.stopPropagation()}/** * Remove any leftover modal target classes and add the modal target class to the currentElement * @param {HTMLElement} currentElement The element for the current step */function co(e){const t=document.querySelector(`${zi.modalTarget}`);t&&t.classList.remove(zi.modalTarget),e.classList.add(zi.modalTarget)}/** * Set multiple attributes on an element, via a hash * @param {HTMLElement|SVGElement} el The element to set the attributes on * @param {Object} attrs A hash of key value pairs for attributes to set * @private */function mo(e,t){Object.keys(t).forEach(o=>{e.setAttribute(o,t[o])})}/** * Get the element from an option object * * @method getElementFromObject * @param Object attachTo * @returns {Element} * @private */function fo(e){const t=e.element;return t instanceof HTMLElement?t:document.querySelector(t)}/** * Return the element for a step * * @method getElementForStep * @param step step the step to get an element for * @returns {Element} the element for this step * @private */function ho(e){const t=e.options.attachTo;if(!t)return null;const o=typeof t;let r;return r="string"==o?bo(t):"object"==o?fo(t):null,r}/** * Get the element from an option string * * @method getElementFromString * @param element the string in the step configuration * @returns {Element} the element from the string * @private */function bo(e){const t=e.split(" "),o=X(t,1),r=o[0];return document.querySelector(r)}function uo(){"function"==typeof this._onScreenChange&&(window.removeEventListener("resize",this._onScreenChange,!1),window.removeEventListener("scroll",this._onScreenChange,!0)),window.addEventListener("resize",this._onScreenChange,!1),window.addEventListener("scroll",this._onScreenChange,!0);const e=document.querySelector(`#${Ui.modalOverlay}`);// Prevents window from moving on touch. window.addEventListener("touchmove",so,{passive:!1}),e&&e.addEventListener("touchmove",lo,!1)}/** * Gets the timestamp of the number of milliseconds that have elapsed since * the Unix epoch (1 January 1970 00:00:00 UTC). * * @static * @memberOf _ * @since 2.4.0 * @category Date * @returns {number} Returns the timestamp. * @example * * _.defer(function(stamp) { * console.log(_.now() - stamp); * }, _.now()); * // => Logs the number of milliseconds it took for the deferred invocation. */ /** * Creates a debounced function that delays invoking `func` until after `wait` * milliseconds have elapsed since the last time the debounced function was * invoked. The debounced function comes with a `cancel` method to cancel * delayed `func` invocations and a `flush` method to immediately invoke them. * Provide `options` to indicate whether `func` should be invoked on the * leading and/or trailing edge of the `wait` timeout. The `func` is invoked * with the last arguments provided to the debounced function. Subsequent * calls to the debounced function return the result of the last `func` * invocation. * * **Note:** If `leading` and `trailing` options are `true`, `func` is * invoked on the trailing edge of the timeout only if the debounced function * is invoked more than once during the `wait` timeout. * * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred * until to the next tick, similar to `setTimeout` with a timeout of `0`. * * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) * for details over the differences between `_.debounce` and `_.throttle`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to debounce. * @param {number} [wait=0] The number of milliseconds to delay. * @param {Object} [options={}] The options object. * @param {boolean} [options.leading=false] * Specify invoking on the leading edge of the timeout. * @param {number} [options.maxWait] * The maximum time `func` is allowed to be delayed before it's invoked. * @param {boolean} [options.trailing=true] * Specify invoking on the trailing edge of the timeout. * @returns {Function} Returns the new debounced function. * @example * * // Avoid costly calculations while the window size is in flux. * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); * * // Invoke `sendMail` when clicked, debouncing subsequent calls. * jQuery(element).on('click', _.debounce(sendMail, 300, { * 'leading': true, * 'trailing': false * })); * * // Ensure `batchLog` is invoked once after 1 second of debounced calls. * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); * var source = new EventSource('/stream'); * jQuery(source).on('message', debounced); * * // Cancel the trailing debounced invocation. * jQuery(window).on('popstate', debounced.cancel); */function yo(e,o,r){function i(t){var o=h,r=b;return h=b=void 0,w=t,y=e.apply(r,o),y}function n(e){// Invoke the leading edge. return w=e,g=setTimeout(l,o),x?i(e):y}function a(e){var t=e-v,r=e-w,i=o-t;return k?Ki(i,u-r):i}function p(e){var t=e-v,r=e-w;// Either this is the first call, activity has stopped and we're at the // trailing edge, the system time has gone backwards and we're treating // it as the trailing edge, or we've hit the `maxWait` limit. return void 0===v||t>=o||0>t||k&&r>=u}function l(){var e=Vi();return p(e)?d(e):void(// Restart the timer. g=setTimeout(l,a(e)))}function d(e){// Only invoke if we have `lastArgs` which means `func` has been // debounced at least once. return(g=void 0,E&&h)?i(e):(h=b=void 0,y)}function c(){void 0!==g&&clearTimeout(g),w=0,h=v=b=g=void 0}function m(){return void 0===g?y:d(Vi())}function f(){var e=Vi(),t=p(e);if(h=arguments,b=this,v=e,t){if(void 0===g)return n(v);if(k)return g=setTimeout(l,o),i(v)}return void 0===g&&(g=setTimeout(l,o)),y}var h,b,u,y,g,v,w=0,x=!1,k=!1,E=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return o=s(o)||0,t(r)&&(x=!!r.leading,k="maxWait"in r,u=k?qi(s(r.maxWait)||0,o):u,E="trailing"in r?!!r.trailing:E),f.cancel=c,f.flush=m,f}/** Error message constants. */ /** * The base implementation of `_.delay` and `_.defer` which accepts `args` * to provide to `func`. * * @private * @param {Function} func The function to delay. * @param {number} wait The number of milliseconds to delay invocation. * @param {Array} args The arguments to provide to `func`. * @returns {number|Object} Returns the timer id or timeout object. */function go(e,t,o){if("function"!=typeof e)throw new TypeError("Expected a function");return setTimeout(function(){e.apply(void 0,o)},t)}/** * A faster alternative to `Function#apply`, this function invokes `func` * with the `this` binding of `thisArg` and the arguments of `args`. * * @private * @param {Function} func The function to invoke. * @param {*} thisArg The `this` binding of `func`. * @param {Array} args The arguments to invoke `func` with. * @returns {*} Returns the result of `func`. */function vo(e,t,o){switch(o.length){case 0:return e.call(t);case 1:return e.call(t,o[0]);case 2:return e.call(t,o[0],o[1]);case 3:return e.call(t,o[0],o[1],o[2]);}return e.apply(t,o)}/* Built-in method references for those with the same name as other `lodash` methods. */ /** * A specialized version of `baseRest` which transforms the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @param {Function} transform The rest array transform. * @returns {Function} Returns the new function. */function wo(e,t,o){return t=Gi(void 0===t?e.length-1:t,0),function(){for(var r=arguments,i=-1,n=Gi(r.length-t,0),a=Array(n);++i<n;)a[i]=r[t+i];i=-1;for(var p=Array(t+1);++i<t;)p[i]=r[i];return p[t]=o(a),vo(e,this,p)}}/** * Creates a function that returns `value`. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {*} value The value to return from the new function. * @returns {Function} Returns the new constant function. * @example * * var objects = _.times(2, _.constant({ 'a': 1 })); * * console.log(objects); * // => [{ 'a': 1 }, { 'a': 1 }] * * console.log(objects[0] === objects[1]); * // => true */function xo(e){return function(){return e}}/** * The base implementation of `setToString` without support for hot loop shorting. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ /** * Cleanup the steps and set pointerEvents back to 'auto' * @param tour The tour object */function ko(e){if(e){const t=e.steps;t.forEach(e=>{if(e.options&&!1===e.options.canClickTarget&&e.options.attachTo){const t=ho(e);t instanceof HTMLElement&&(t.style.pointerEvents="auto")}})}}/** * Remove resize and scroll event listeners */function Eo(){"function"==typeof this._onScreenChange&&(window.removeEventListener("resize",this._onScreenChange,!1),window.removeEventListener("scroll",this._onScreenChange,!1),this._onScreenChange=null),window.removeEventListener("touchmove",so,{passive:!1})}/** * Creates incremented ID for each newly created tour * * @private * @return {Number} The unique id for the tour */var To="object"==typeof global&&global&&global.Object===Object&&global,Ao="object"==typeof self&&self&&self.Object===Object&&self,_o=To||Ao||Function("return this")(),Po=_o.Symbol,jo=Object.prototype,Do=jo.hasOwnProperty,Mo=jo.toString,Io=Po?Po.toStringTag:void 0,No=Object.prototype,Yo=No.toString,Ho=Po?Po.toStringTag:void 0,Xo=0/0,Bo=/^\s+|\s+$/g,Wo=/^[-+]0x[0-9a-f]+$/i,Ro=/^0b[01]+$/i,Fo=/^0o[0-7]+$/i,Uo=parseInt,zo=1/0;/** Detect free variable `self`. */class Vo{on(e,t,o){const r=!(3>=arguments.length||void 0===arguments[3])&&arguments[3];m(this.bindings)&&(this.bindings={}),m(this.bindings[e])&&(this.bindings[e]=[]),this.bindings[e].push({handler:t,ctx:o,once:r})}once(e,t,o){this.on(e,t,o,!0)}off(e,t){return!(m(this.bindings)||m(this.bindings[e]))&&void(m(t)?delete this.bindings[e]:this.bindings[e].forEach((o,r)=>{o.handler===t&&this.bindings[e].splice(r,1)}))}trigger(e){if(!m(this.bindings)&&this.bindings[e]){const t=c(arguments);this.bindings[e].forEach((o,r)=>{const i=o.ctx,n=o.handler,a=o.once,p=i||this;n.apply(p,t),a&&this.bindings[e].splice(r,1)})}}}/** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */var qo=function(e){return function(t,o,r){for(var i,n=-1,a=Object(t),p=r(t),s=p.length;s--&&(i=p[e?s:++n],!1!==o(a[i],i,a)););return t}}(),Ko=Object.prototype,Go=Ko.hasOwnProperty,$o=Ko.propertyIsEnumerable,Jo=h(function(){return arguments}())?h:function(e){return a(e)&&Go.call(e,"callee")&&!$o.call(e,"callee")},Zo=Array.isArray,Qo="object"==typeof exports&&exports&&!exports.nodeType&&exports,er=Qo&&"object"==typeof module&&module&&!module.nodeType&&module,tr=er&&er.exports===Qo,or=tr?_o.Buffer:void 0,rr=or?or.isBuffer:void 0,ir=rr||/** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */function(){return!1}/** Detect free variable `exports`. */,nr=/^(?:0|[1-9]\d*)$/,ar={};ar["[object Float32Array]"]=ar["[object Float64Array]"]=ar["[object Int8Array]"]=ar["[object Int16Array]"]=ar["[object Int32Array]"]=ar["[object Uint8Array]"]=ar["[object Uint8ClampedArray]"]=ar["[object Uint16Array]"]=ar["[object Uint32Array]"]=!0,ar["[object Arguments]"]=ar["[object Array]"]=ar["[object ArrayBuffer]"]=ar["[object Boolean]"]=ar["[object DataView]"]=ar["[object Date]"]=ar["[object Error]"]=ar["[object Function]"]=ar["[object Map]"]=ar["[object Number]"]=ar["[object Object]"]=ar["[object RegExp]"]=ar["[object Set]"]=ar["[object String]"]=ar["[object WeakMap]"]=!1;/** Detect free variable `exports`. */var pr="object"==typeof exports&&exports&&!exports.nodeType&&exports,sr=pr&&"object"==typeof module&&module&&!module.nodeType&&module,lr=sr&&sr.exports===pr,dr=lr&&To.process,cr=function(){try{// Use `util.types` for Node.js 10+. var e=sr&&sr.require&&sr.require("util").types;return e?e:dr&&dr.binding&&dr.binding("util");// Legacy `process.binding('util')` for Node.js < 10. }catch(t){}}(),mr=cr&&cr.isTypedArray,fr=mr?/** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */function(e){return function(t){return e(t)}}(mr):/** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */function(e){return a(e)&&u(e.length)&&!!ar[n(e)]},hr=Object.prototype,br=hr.hasOwnProperty,ur=Object.prototype,yr=v(Object.keys,Object),gr=Object.prototype,vr=gr.hasOwnProperty,wr=v(Object.getPrototypeOf,Object),xr=Function.prototype,kr=Object.prototype,Er=xr.toString,Or=kr.hasOwnProperty,Sr=Er.call(Object),Cr=_o["__core-js_shared__"],Lr=function(){var e=/[^.]+$/.exec(Cr&&Cr.keys&&Cr.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),Tr=Function.prototype,Ar=Tr.toString,_r=/[\\^$.*+?()[\]{}|]/g,Pr=/^\[object .+?Constructor\]$/,jr=Function.prototype,Dr=Object.prototype,Mr=jr.toString,Ir=Dr.hasOwnProperty,Nr=RegExp("^"+Mr.call(Ir).replace(_r,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Yr=M(_o,"DataView"),Hr=M(_o,"Map"),Xr=M(_o,"Promise"),Br=M(_o,"Set"),Wr=M(_o,"WeakMap"),Rr="[object Map]",Fr="[object Promise]",Ur="[object Set]",zr="[object WeakMap]",Vr="[object DataView]",qr=P(Yr),Kr=P(Hr),Gr=P(Xr),$r=P(Br),Jr=P(Wr),Zr=n;/** Detect free variable `module`. */(Yr&&Zr(new Yr(new ArrayBuffer(1)))!=Vr||Hr&&Zr(new Hr)!=Rr||Xr&&Zr(Xr.resolve())!=Fr||Br&&Zr(new Br)!=Ur||Wr&&Zr(new Wr)!=zr)&&(Zr=function(e){var t=n(e),o=t=="[object Object]"?e.constructor:void 0,r=o?P(o):"";if(r)switch(r){case qr:return Vr;case Kr:return Rr;case Gr:return Fr;case $r:return Ur;case Jr:return zr;}return t});var Qr=Zr,ei=Object.prototype,ti=ei.hasOwnProperty;/** `Object#toString` result references. */Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);for(var oi=function(){try{var e=M(Object,"defineProperty");return e({},"",{}),e}catch(t){}}(),ri=Object.prototype,ii=ri.hasOwnProperty,ni="undefined"!=typeof window&&"undefined"!=typeof document,ai=["Edge","Trident","Firefox"],pi=0,si=0;si<ai.length;si+=1)if(ni&&0<=navigator.userAgent.indexOf(ai[si])){pi=1;break}var li=ni&&window.Promise,di=li?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},pi))}},ci=ni&&!!(window.MSInputMethodContext&&document.documentMode),mi=ni&&/MSIE 10/.test(navigator.userAgent),fi=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},hi=function(){function e(e,t){for(var o,r=0;r<t.length;r++)o=t[r],o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,r){return o&&e(t.prototype,o),r&&e(t,r),t}}(),bi=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},ui=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var r in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},yi=ni&&/Firefox/i.test(navigator.userAgent),gi=["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"],vi=gi.slice(3),wi={FLIP:"flip",CLOCKWISE:"clockwise",COUNTERCLOCKWISE:"counterclockwise"},xi=function(){/** * Creates a new Popper.js instance. * @class Popper * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper * @param {HTMLElement} popper - The HTML element used as the popper * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) * @return {Object} instance - The generated Popper.js instance */function e(t,o){var r=this,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};fi(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(r.update)},this.update=di(this.update.bind(this)),this.options=ui({},e.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=o&&o.jquery?o[0]:o,this.options.modifiers={},Object.keys(ui({},e.Defaults.modifiers,i.modifiers)).forEach(function(t){r.options.modifiers[t]=ui({},e.Defaults.modifiers[t]||{},i.modifiers?i.modifiers[t]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return ui({name:e},r.options.modifiers[e])})// sort the modifiers by order .sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&K(e.onLoad)&&e.onLoad(r.reference,r.popper,r.options,e,r.state)}),this.update();var n=this.options.eventsEnabled;n&&this.enableEventListeners(),this.state.eventsEnabled=n}// We can't use class properties because they don't get listed in the // class prototype and break stuff like Sinon stubs return hi(e,[{key:"update",value:function(){return Oe.call(this)}},{key:"destroy",value:function(){return Le.call(this)}},{key:"enableEventListeners",value:function(){return Pe.call(this)}},{key:"disableEventListeners",value:function(){return De.call(this)}/** * Schedules an update. It will run on the next UI update available. * @method scheduleUpdate * @memberof Popper */ /** * Collection of utilities useful when writing custom modifiers. * Starting from version 1.7, this method is available only if you * include `popper-utils.js` before `popper.js`. * * **DEPRECATION**: This way to access PopperUtils is deprecated * and will be removed in v2! Use the PopperUtils module directly instead. * Due to the high instability of the methods contained in Utils, we can't * guarantee them to follow semver. Use them at your own risk! * @static * @private * @type {Object} * @deprecated since version 1.8 * @member Utils * @memberof Popper */}]),e}();/** * Create a debounced version of a method, that's asynchronously deferred * but called in the minimum time possible. * * @method * @memberof Popper.Utils * @argument {Function} fn * @returns {Function} */xi.Utils=("undefined"==typeof window?global:window).PopperUtils,xi.placements=gi,xi.Defaults={/** * Popper's placement. * @prop {Popper.placements} placement='bottom' */placement:"bottom",/** * Set this to true if you want popper to position it self in 'fixed' mode * @prop {Boolean} positionFixed=false */positionFixed:!1,/** * Whether events (resize, scroll) are initially enabled. * @prop {Boolean} eventsEnabled=true */eventsEnabled:!0,/** * Set to true if you want to automatically remove the popper when * you call the `destroy` method. * @prop {Boolean} removeOnDestroy=false */removeOnDestroy:!1,/** * Callback called when the popper is created.<br /> * By default, it is set to no-op.<br /> * Access Popper.js instance with `data.instance`. * @prop {onCreate} */onCreate:function(){},/** * Callback called when the popper is updated. This callback is not called * on the initialization/creation of the popper, but only on subsequent * updates.<br /> * By default, it is set to no-op.<br /> * Access Popper.js instance with `data.instance`. * @prop {onUpdate} */onUpdate:function(){},/** * List of modifiers used to modify the offsets before they are applied to the popper. * They provide most of the functionalities of Popper.js. * @prop {modifiers} */modifiers:{/** * Modifier used to shift the popper on the start or end of its reference * element.<br /> * It will read the variation of the `placement` property.<br /> * It can be one either `-end` or `-start`. * @memberof modifiers * @inner */shift:{/** @prop {number} order=100 - Index used to define the order of execution */order:100,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:!0,/** @prop {ModifierFn} */fn:/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */function(e){var t=e.placement,o=t.split("-")[0],r=t.split("-")[1];// if shift shiftvariation is specified, run the modifier if(r){var i=e.offsets,n=i.reference,a=i.popper,p=-1!==["bottom","top"].indexOf(o),s=p?"left":"top",l=p?"width":"height",d={start:bi({},s,n[s]),end:bi({},s,n[s]+n[l]-a[l])};e.offsets.popper=ui({},a,d[r])}return e}/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */},/** * The `offset` modifier can shift your popper on both its axis. * * It accepts the following units: * - `px` or unit-less, interpreted as pixels * - `%` or `%r`, percentage relative to the length of the reference element * - `%p`, percentage relative to the length of the popper element * - `vw`, CSS viewport width unit * - `vh`, CSS viewport height unit * * For length is intended the main axis relative to the placement of the popper.<br /> * This means that if the placement is `top` or `bottom`, the length will be the * `width`. In case of `left` or `right`, it will be the `height`. * * You can provide a single value (as `Number` or `String`), or a pair of values * as `String` divided by a comma or one (or more) white spaces.<br /> * The latter is a deprecated method because it leads to confusion and will be * removed in v2.<br /> * Additionally, it accepts additions and subtractions between different units. * Note that multiplications and divisions aren't supported. * * Valid examples are: * ``` * 10 * '10%' * '10, 10' * '10%, 10' * '10 + 10%' * '10 - 5vh + 3%' * '-10px + 5vh, 5px - 6%' * ``` * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap * > with their reference element, unfortunately, you will have to disable the `flip` modifier. * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). * * @memberof modifiers * @inner */offset:{/** @prop {number} order=200 - Index used to define the order of execution */order:200,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:!0,/** @prop {ModifierFn} */fn:Fe,/** @prop {Number|String} offset=0 * The offset value as described in the modifier description */offset:0},/** * Modifier used to prevent the popper from being positioned outside the boundary. * * A scenario exists where the reference itself is not within the boundaries.<br /> * We can say it has "escaped the boundaries" — or just "escaped".<br /> * In this case we need to decide whether the popper should either: * * - detach from the reference and remain "trapped" in the boundaries, or * - if it should ignore the boundary and "escape with its reference" * * When `escapeWithReference` is set to`true` and reference is completely * outside its boundaries, the popper will overflow (or completely leave) * the boundaries in order to remain attached to the edge of the reference. * * @memberof modifiers * @inner */preventOverflow:{/** @prop {number} order=300 - Index used to define the order of execution */order:300,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:!0,/** @prop {ModifierFn} */fn:function(e,t){var o=t.boundariesElement||Q(e.instance.popper);// If offsetParent is the reference element, we really want to // go one step up and use the next offsetParent as reference to // avoid to make this modifier completely useless and look like broken e.instance.reference===o&&(o=Q(o));// NOTE: DOM access here // resets the popper's position so that the document size can be calculated excluding // the size of the popper element itself var r=Ce("transform"),i=e.instance.popper.style,n=i.top,a=i.left,p=i[r];i.top="",i.left="",i[r]="";var s=he(e.instance.popper,e.instance.reference,t.padding,o,e.positionFixed);// NOTE: DOM access here // restores the original style properties after the offsets have been computed i.top=n,i.left=a,i[r]=p,t.boundaries=s;var l=t.priority,d=e.offsets.popper,c={primary:function(e){var o=d[e];return d[e]<s[e]&&!t.escapeWithReference&&(o=Lo(d[e],s[e])),bi({},e,o)},secondary:function(e){var o="right"===e?"left":"top",r=d[o];return d[e]>s[e]&&!t.escapeWithReference&&(r=Oo(d[o],s[e]-("right"===e?d.width:d.height))),bi({},o,r)}};return l.forEach(function(e){var t=-1===["left","top"].indexOf(e)?"secondary":"primary";d=ui({},d,c[t](e))}),e.offsets.popper=d,e},/** * @prop {Array} [priority=['left','right','top','bottom']] * Popper will try to prevent overflow following these priorities by default, * then, it could overflow on the left and on top of the `boundariesElement` */priority:["left","right","top","bottom"],/** * @prop {number} padding=5 * Amount of pixel used to define a minimum distance between the boundaries * and the popper. This makes sure the popper always has a little padding * between the edges of its container */padding:5,/** * @prop {String|HTMLElement} boundariesElement='scrollParent' * Boundaries used by the modifier. Can be `scrollParent`, `window`, * `viewport` or any DOM element. */boundariesElement:"scrollParent"},/** * Modifier used to make sure the reference and its popper stay near each other * without leaving any gap between the two. Especially useful when the arrow is * enabled and you want to ensure that it points to its reference element. * It cares only about the first axis. You can still have poppers with margin * between the popper and its reference element. * @memberof modifiers * @inner */keepTogether:{/** @prop {number} order=400 - Index used to define the order of execution */order:400,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:!0,/** @prop {ModifierFn} */fn:/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */function(e){var t=e.offsets,o=t.popper,r=t.reference,i=e.placement.split("-")[0],n=So,a=-1!==["top","bottom"].indexOf(i),p=a?"right":"bottom",s=a?"left":"top",l=a?"width":"height";return o[p]<n(r[s])&&(e.offsets.popper[s]=n(r[s])-o[l]),o[s]>n(r[p])&&(e.offsets.popper[s]=n(r[p])),e}},/** * This modifier is used to move the `arrowElement` of the popper to make * sure it is positioned between the reference element and its popper element. * It will read the outer size of the `arrowElement` node to detect how many * pixels of conjunction are needed. * * It has no effect if no `arrowElement` is provided. * @memberof modifiers * @inner */arrow:{/** @prop {number} order=500 - Index used to define the order of execution */order:500,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:!0,/** @prop {ModifierFn} */fn:function(e,t){var o;// arrow depends on keepTogether in order to work if(!He(e.instance.modifiers,"arrow","keepTogether"))return e;var r=t.element;// if arrowElement is a string, suppose it's a CSS selector if("string"==typeof r){// if arrowElement is not found, don't run the modifier if(r=e.instance.popper.querySelector(r),!r)return e;}else// if the arrowElement isn't a query selector we must check that the // provided DOM node is child of its popper node if(!e.instance.popper.contains(r))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var i=e.placement.split("-")[0],n=e.offsets,a=n.popper,p=n.reference,s=-1!==["left","right"].indexOf(i),l=s?"height":"width",d=s?"Top":"Left",c=d.toLowerCase(),m=s?"left":"top",f=s?"bottom":"right",h=ge(r)[l];p[f]-h<a[c]&&(e.offsets.popper[c]-=a[c]-(p[f]-h)),p[c]+h>a[f]&&(e.offsets.popper[c]+=p[c]+h-a[f]),e.offsets.popper=se(e.offsets.popper);// compute center of the popper var b=p[c]+p[l]/2-h/2,u=G(e.instance.popper),y=parseFloat(u["margin"+d],10),g=parseFloat(u["border"+d+"Width"],10),v=b-e.offsets.popper[c]-y-g;// Compute the sideValue using the updated popper offsets // take popper margin in account because we don't have this info available return v=Lo(Oo(a[l]-h,v),0),e.arrowElement=r,e.offsets.arrow=(o={},bi(o,c,Co(v)),bi(o,m,""),o),e},/** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */element:"[x-arrow]"},/** * Modifier used to flip the popper's placement when it starts to overlap its * reference element. * * Requires the `preventOverflow` modifier before it in order to work. * * **NOTE:** this modifier will interrupt the current update cycle and will * restart it if it detects the need to flip the placement. * @memberof modifiers * @inner */flip:{/** @prop {number} order=600 - Index used to define the order of execution */order:600,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:!0,/** @prop {ModifierFn} */fn:/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */function(e,t){// if `inner` modifier is enabled, we can't use the `flip` modifier if(Se(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)// seems like flip is trying to loop, probably there's not enough space on any of the flippable sides return e;var o=he(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),r=e.placement.split("-")[0],i=ve(r),n=e.placement.split("-")[1]||"",a=[];switch(t.behavior){case wi.FLIP:a=[r,i];break;case wi.CLOCKWISE:a=Be(r);break;case wi.COUNTERCLOCKWISE:a=Be(r,!0);break;default:a=t.behavior;}return a.forEach(function(p,s){if(r!==p||a.length===s+1)return e;r=e.placement.split("-")[0],i=ve(r);var l=e.offsets.popper,d=e.offsets.reference,c=So,m="left"===r&&c(l.right)>c(d.left)||"right"===r&&c(l.left)<c(d.right)||"top"===r&&c(l.bottom)>c(d.top)||"bottom"===r&&c(l.top)<c(d.bottom),f=c(l.left)<c(o.left),h=c(l.right)>c(o.right),b=c(l.top)<c(o.top),u=c(l.bottom)>c(o.bottom),y="left"===r&&f||"right"===r&&h||"top"===r&&b||"bottom"===r&&u,g=-1!==["top","bottom"].indexOf(r),v=!!t.flipVariations&&(g&&"start"===n&&f||g&&"end"===n&&h||!g&&"start"===n&&b||!g&&"end"===n&&u);(m||y||v)&&(e.flipped=!0,(m||y)&&(r=a[s+1]),v&&(n=Xe(n)),e.placement=r+(n?"-"+n:""),e.offsets.popper=ui({},e.offsets.popper,we(e.instance.popper,e.offsets.reference,e.placement)),e=Ee(e.instance.modifiers,e,"flip"))}),e},/** * @prop {String|Array} behavior='flip' * The behavior used to change the popper's placement. It can be one of * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid * placements (with optional variations) */behavior:"flip",/** * @prop {number} padding=5 * The popper will flip if it hits the edges of the `boundariesElement` */padding:5,/** * @prop {String|HTMLElement} boundariesElement='viewport' * The element which will define the boundaries of the popper position. * The popper will never be placed outside of the defined boundaries * (except if `keepTogether` is enabled) */boundariesElement:"viewport"},/** * Modifier used to make the popper flow toward the inner of the reference element. * By default, when this modifier is disabled, the popper will be placed outside * the reference element. * @memberof modifiers * @inner */inner:{/** @prop {number} order=700 - Index used to define the order of execution */order:700,/** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */enabled:!1,/** @prop {ModifierFn} */fn:/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */function(e){var t=e.placement,o=t.split("-")[0],r=e.offsets,i=r.popper,n=r.reference,a=-1!==["left","right"].indexOf(o),p=-1===["top","left"].indexOf(o);return i[a?"left":"top"]=n[o]-(p?i[a?"width":"height"]:0),e.placement=ve(t),e.offsets.popper=se(i),e}/** * Modifier function, each modifier can have a function of this type assigned * to its `fn` property.<br /> * These functions will be called on each update, this means that you must * make sure they are performant enough to avoid performance bottlenecks. * * @function ModifierFn * @argument {dataObject} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {dataObject} The data object, properly modified */ /** * Modifiers are plugins used to alter the behavior of your poppers.<br /> * Popper.js uses a set of 9 modifiers to provide all the basic functionalities * needed by the library. * * Usually you don't want to override the `order`, `fn` and `onLoad` props. * All the other properties are configurations that could be tweaked. * @namespace modifiers */},/** * Modifier used to hide the popper when its reference element is outside of the * popper boundaries. It will set a `x-out-of-boundaries` attribute which can * be used to hide with a CSS selector the popper when its reference is * out of boundaries. * * Requires the `preventOverflow` modifier before it in order to work. * @memberof modifiers * @inner */hide:{/** @prop {number} order=800 - Index used to define the order of execution */order:800,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:!0,/** @prop {ModifierFn} */fn:function(e){if(!He(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,o=xe(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){// Avoid unnecessary DOM access if visibility hasn't changed if(!0===e.hide)return e;e.hide=!0,e.attributes["x-out-of-boundaries"]=""}else{// Avoid unnecessary DOM access if visibility hasn't changed if(!1===e.hide)return e;e.hide=!1,e.attributes["x-out-of-boundaries"]=!1}return e}},/** * Computes the style that will be applied to the popper element to gets * properly positioned. * * Note that this modifier will not touch the DOM, it just prepares the styles * so that `applyStyle` modifier can apply it. This separation is useful * in case you need to replace `applyStyle` with a custom implementation. * * This modifier has `850` as `order` value to maintain backward compatibility * with previous versions of Popper.js. Expect the modifiers ordering method * to change in future major versions of the library. * * @memberof modifiers * @inner */computeStyle:{/** @prop {number} order=850 - Index used to define the order of execution */order:850,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:!0,/** @prop {ModifierFn} */fn:/** * @function * @memberof Modifiers * @argument {Object} data - The data object generated by `update` method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified */function(e,t){var o=t.x,r=t.y,i=e.offsets.popper,n=xe(e.instance.modifiers,function(e){return"applyStyle"===e.name}).gpuAcceleration;void 0!==n&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var a=void 0===n?t.gpuAcceleration:n,p=Q(e.instance.popper),s=le(p),l={position:i.position},d=Ye(e,2>window.devicePixelRatio||!yi),c="bottom"===o?"top":"bottom",m="right"===r?"left":"right",f=Ce("transform"),h=void 0,b=void 0;if(b="bottom"===c?"HTML"===p.nodeName?-p.clientHeight+d.bottom:-s.height+d.bottom:d.top,h="right"===m?"HTML"===p.nodeName?-p.clientWidth+d.right:-s.width+d.right:d.left,a&&f)l[f]="translate3d("+h+"px, "+b+"px, 0)",l[c]=0,l[m]=0,l.willChange="transform";else{// othwerise, we use the standard `top`, `left`, `bottom` and `right` properties var u="bottom"===c?-1:1,y="right"===m?-1:1;l[c]=b*u,l[m]=h*y,l.willChange=c+", "+m}// Attributes var g={"x-placement":e.placement};// Update `data` attributes, styles and arrowStyles return e.attributes=ui({},g,e.attributes),e.styles=ui({},l,e.styles),e.arrowStyles=ui({},e.offsets.arrow,e.arrowStyles),e},/** * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3D transformation to position the popper. * Otherwise, it will use the `top` and `left` properties */gpuAcceleration:!0,/** * @prop {string} [x='bottom'] * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. * Change this if your popper should grow in a direction different from `bottom` */x:"bottom",/** * @prop {string} [x='left'] * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. * Change this if your popper should grow in a direction different from `right` */y:"right"},/** * Applies the computed styles to the popper element. * * All the DOM manipulations are limited to this modifier. This is useful in case * you want to integrate Popper.js inside a framework or view library and you * want to delegate all the DOM manipulations to it. * * Note that if you disable this modifier, you must make sure the popper element * has its position set to `absolute` before Popper.js can do its work! * * Just disable this modifier and define your own to achieve the desired effect. * * @memberof modifiers * @inner */applyStyle:{/** @prop {number} order=900 - Index used to define the order of execution */order:900,/** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */enabled:!0,/** @prop {ModifierFn} */fn:function(e){return Ie(e.instance.popper,e.styles),Ne(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&Ie(e.arrowElement,e.arrowStyles),e}/** * Set the x-placement attribute before everything else because it could be used * to add margins to the popper margins needs to be calculated to get the * correct popper offsets. * @method * @memberof Popper.modifiers * @param {HTMLElement} reference - The reference element used to position the popper * @param {HTMLElement} popper - The HTML element used as popper * @param {Object} options - Popper.js options */,/** @prop {Function} */onLoad:function(e,t,o,r,i){// compute reference element offsets var n=ye(i,t,e,o.positionFixed),a=ue(o.placement,n,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);// compute auto placement, store placement inside the data object, // modifiers will be able to edit `placement` if needed // and refer to originalPlacement to know the original value return t.setAttribute("x-placement",a),Ie(t,{position:o.positionFixed?"fixed":"absolute"}),o},/** * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier * @prop {Boolean} gpuAcceleration=true * If true, it uses the CSS 3D transformation to position the popper. * Otherwise, it will use the `top` and `left` properties */gpuAcceleration:void 0}}};/**! * tippy.js v4.2.0 * (c) 2017-2019 atomiks * MIT License */var ki="undefined"!=typeof window&&"undefined"!=typeof document,Ei=ki?navigator.userAgent:"",Oi=/MSIE |Trident\//.test(Ei),Si=/UCBrowser\//.test(Ei),Ci=ki&&/iPhone|iPad|iPod/.test(navigator.platform)&&!window.MSStream,Li={a11y:!0,allowHTML:!0,animateFill:!0,animation:"shift-away",appendTo:function(){return document.body},aria:"describedby",arrow:!1,arrowType:"sharp",boundary:"scrollParent",content:"",delay:0,distance:10,duration:[325,275],flip:!0,flipBehavior:"flip",flipOnUpdate:!1,followCursor:!1,hideOnClick:!0,ignoreAttributes:!1,inertia:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,lazy:!0,maxWidth:350,multiple:!1,offset:0,onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},placement:"top",popperOptions:{},role:"tooltip",showOnInit:!1,size:"regular",sticky:!1,target:"",theme:"dark",touch:!0,touchHold:!1,trigger:"mouseenter focus",updateDuration:0,wait:null,zIndex:9999/** * If the set() method encounters one of these, the popperInstance must be * recreated */},Ti=["arrow","arrowType","boundary","distance","flip","flipBehavior","flipOnUpdate","offset","placement","popperOptions"],Ai={POPPER:".tippy-popper",TOOLTIP:".tippy-tooltip",CONTENT:".tippy-content",BACKDROP:".tippy-backdrop",ARROW:".tippy-arrow",ROUND_ARROW:".tippy-roundarrow"},_i=ki?Element.prototype:{},Pi=_i.matches||_i.matchesSelector||_i.webkitMatchesSelector||_i.mozMatchesSelector||_i.msMatchesSelector,ji={passive:!0},Di=Object.keys(Li),Mi=!1,Ii=0,Ni=1,Yi=!1;Ht.version="4.2.0",Ht.defaults=Li,Ht.setDefaults=function(e){Object.keys(e).forEach(function(t){Li[t]=e[t]})},Ht.hideAll=At,Ht.group=function(e){function t(e){c=e,n()}function o(o){o._originalProps.onShow(o),e.forEach(function(e){e.set({duration:d}),e.hide()}),t(!0)}function r(e){e._originalProps.onHide(e),t(!1)}function i(e){e._originalProps.onShown(e),e.set({duration:e._originalProps.duration})}function n(){e.forEach(function(e){e.set({onShow:o,onShown:i,onHide:r,delay:c?[0,Array.isArray(s)?s[1]:s]:s,duration:c?d:e._originalProps.duration})})}var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},p=a.delay,s=void 0===p?e[0].props.delay:p,l=a.duration,d=void 0===l?0:l;// Already grouped. Cannot group instances more than once (yet) or stale lifecycle // closures will be invoked, causing a stack overflow if(!e.some(function(e){return Je(e,"_originalProps")})){var c=!1;e.forEach(function(e){e._originalProps=Ue({},e.props)}),n()}},ki&&setTimeout(/** * Auto-init tooltips for elements with a `data-tippy="..."` attribute */function(){ze(document.querySelectorAll("[data-tippy]")).forEach(function(e){var t=e.getAttribute("data-tippy");t&&Ht(e,{content:t})})}),/** * Injects a string of CSS styles to a style node in <head> */function(e){if(ki){var t=document.createElement("style");t.type="text/css",t.textContent=e;var o=document.head,r=o.firstChild;r?o.insertBefore(t,r):o.appendChild(t)}}(".tippy-iOS{cursor:pointer!important}.tippy-notransition{transition:none}.tippy-popper{transition-timing-function:cubic-bezier(.165,.84,.44,1);max-width:calc(100% - 8px);pointer-events:none;outline:0}.tippy-popper[x-placement^=top] .tippy-backdrop{border-radius:40% 40% 0 0}.tippy-popper[x-placement^=top] .tippy-roundarrow{bottom:-7px;bottom:-6.5px;-webkit-transform-origin:50% 0;transform-origin:50% 0;margin:0 3px}.tippy-popper[x-placement^=top] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.tippy-popper[x-placement^=top] .tippy-arrow{border-top:8px solid #333;border-right:8px solid transparent;border-left:8px solid transparent;bottom:-7px;margin:0 3px;-webkit-transform-origin:50% 0;transform-origin:50% 0}.tippy-popper[x-placement^=top] .tippy-backdrop{-webkit-transform-origin:0 25%;transform-origin:0 25%}.tippy-popper[x-placement^=top] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-55%);transform:scale(1) translate(-50%,-55%)}.tippy-popper[x-placement^=top] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-50%,-45%);transform:scale(.2) translate(-50%,-45%);opacity:0}.tippy-popper[x-placement^=top] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}.tippy-popper[x-placement^=top] [data-animation=perspective]{-webkit-transform-origin:bottom;transform-origin:bottom}.tippy-popper[x-placement^=top] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateY(-10px) rotateX(0);transform:perspective(700px) translateY(-10px) rotateX(0)}.tippy-popper[x-placement^=top] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) translateY(0) rotateX(60deg);transform:perspective(700px) translateY(0) rotateX(60deg)}.tippy-popper[x-placement^=top] [data-animation=fade][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift-away][data-state=hidden]{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}.tippy-popper[x-placement^=top] [data-animation=scale]{-webkit-transform-origin:bottom;transform-origin:bottom}.tippy-popper[x-placement^=top] [data-animation=scale][data-state=visible]{-webkit-transform:translateY(-10px) scale(1);transform:translateY(-10px) scale(1)}.tippy-popper[x-placement^=top] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateY(-10px) scale(.5);transform:translateY(-10px) scale(.5)}.tippy-popper[x-placement^=bottom] .tippy-backdrop{border-radius:0 0 30% 30%}.tippy-popper[x-placement^=bottom] .tippy-roundarrow{top:-7px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;margin:0 3px}.tippy-popper[x-placement^=bottom] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(0);transform:rotate(0)}.tippy-popper[x-placement^=bottom] .tippy-arrow{border-bottom:8px solid #333;border-right:8px solid transparent;border-left:8px solid transparent;top:-7px;margin:0 3px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.tippy-popper[x-placement^=bottom] .tippy-backdrop{-webkit-transform-origin:0 -50%;transform-origin:0 -50%}.tippy-popper[x-placement^=bottom] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-45%);transform:scale(1) translate(-50%,-45%)}.tippy-popper[x-placement^=bottom] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-50%);transform:scale(.2) translate(-50%);opacity:0}.tippy-popper[x-placement^=bottom] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}.tippy-popper[x-placement^=bottom] [data-animation=perspective]{-webkit-transform-origin:top;transform-origin:top}.tippy-popper[x-placement^=bottom] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateY(10px) rotateX(0);transform:perspective(700px) translateY(10px) rotateX(0)}.tippy-popper[x-placement^=bottom] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) translateY(0) rotateX(-60deg);transform:perspective(700px) translateY(0) rotateX(-60deg)}.tippy-popper[x-placement^=bottom] [data-animation=fade][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift-away][data-state=hidden]{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}.tippy-popper[x-placement^=bottom] [data-animation=scale]{-webkit-transform-origin:top;transform-origin:top}.tippy-popper[x-placement^=bottom] [data-animation=scale][data-state=visible]{-webkit-transform:translateY(10px) scale(1);transform:translateY(10px) scale(1)}.tippy-popper[x-placement^=bottom] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateY(10px) scale(.5);transform:translateY(10px) scale(.5)}.tippy-popper[x-placement^=left] .tippy-backdrop{border-radius:50% 0 0 50%}.tippy-popper[x-placement^=left] .tippy-roundarrow{right:-12px;-webkit-transform-origin:33.33333333% 50%;transform-origin:33.33333333% 50%;margin:3px 0}.tippy-popper[x-placement^=left] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.tippy-popper[x-placement^=left] .tippy-arrow{border-left:8px solid #333;border-top:8px solid transparent;border-bottom:8px solid transparent;right:-7px;margin:3px 0;-webkit-transform-origin:0 50%;transform-origin:0 50%}.tippy-popper[x-placement^=left] .tippy-backdrop{-webkit-transform-origin:50% 0;transform-origin:50% 0}.tippy-popper[x-placement^=left] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=left] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-75%,-50%);transform:scale(.2) translate(-75%,-50%);opacity:0}.tippy-popper[x-placement^=left] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}.tippy-popper[x-placement^=left] [data-animation=perspective]{-webkit-transform-origin:right;transform-origin:right}.tippy-popper[x-placement^=left] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateX(-10px) rotateY(0);transform:perspective(700px) translateX(-10px) rotateY(0)}.tippy-popper[x-placement^=left] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) translateX(0) rotateY(-60deg);transform:perspective(700px) translateX(0) rotateY(-60deg)}.tippy-popper[x-placement^=left] [data-animation=fade][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift-away][data-state=hidden]{opacity:0;-webkit-transform:translateX(0);transform:translateX(0)}.tippy-popper[x-placement^=left] [data-animation=scale]{-webkit-transform-origin:right;transform-origin:right}.tippy-popper[x-placement^=left] [data-animation=scale][data-state=visible]{-webkit-transform:translateX(-10px) scale(1);transform:translateX(-10px) scale(1)}.tippy-popper[x-placement^=left] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateX(-10px) scale(.5);transform:translateX(-10px) scale(.5)}.tippy-popper[x-placement^=right] .tippy-backdrop{border-radius:0 50% 50% 0}.tippy-popper[x-placement^=right] .tippy-roundarrow{left:-12px;-webkit-transform-origin:66.66666666% 50%;transform-origin:66.66666666% 50%;margin:3px 0}.tippy-popper[x-placement^=right] .tippy-roundarrow svg{position:absolute;left:0;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.tippy-popper[x-placement^=right] .tippy-arrow{border-right:8px solid #333;border-top:8px solid transparent;border-bottom:8px solid transparent;left:-7px;margin:3px 0;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.tippy-popper[x-placement^=right] .tippy-backdrop{-webkit-transform-origin:-50% 0;transform-origin:-50% 0}.tippy-popper[x-placement^=right] .tippy-backdrop[data-state=visible]{-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=right] .tippy-backdrop[data-state=hidden]{-webkit-transform:scale(.2) translate(-25%,-50%);transform:scale(.2) translate(-25%,-50%);opacity:0}.tippy-popper[x-placement^=right] [data-animation=shift-toward][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-toward][data-state=hidden]{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}.tippy-popper[x-placement^=right] [data-animation=perspective]{-webkit-transform-origin:left;transform-origin:left}.tippy-popper[x-placement^=right] [data-animation=perspective][data-state=visible]{-webkit-transform:perspective(700px) translateX(10px) rotateY(0);transform:perspective(700px) translateX(10px) rotateY(0)}.tippy-popper[x-placement^=right] [data-animation=perspective][data-state=hidden]{opacity:0;-webkit-transform:perspective(700px) translateX(0) rotateY(60deg);transform:perspective(700px) translateX(0) rotateY(60deg)}.tippy-popper[x-placement^=right] [data-animation=fade][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=fade][data-state=hidden]{opacity:0;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-away][data-state=visible]{-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift-away][data-state=hidden]{opacity:0;-webkit-transform:translateX(0);transform:translateX(0)}.tippy-popper[x-placement^=right] [data-animation=scale]{-webkit-transform-origin:left;transform-origin:left}.tippy-popper[x-placement^=right] [data-animation=scale][data-state=visible]{-webkit-transform:translateX(10px) scale(1);transform:translateX(10px) scale(1)}.tippy-popper[x-placement^=right] [data-animation=scale][data-state=hidden]{opacity:0;-webkit-transform:translateX(10px) scale(.5);transform:translateX(10px) scale(.5)}.tippy-tooltip{position:relative;color:#fff;border-radius:.25rem;font-size:.875rem;padding:.3125rem .5625rem;line-height:1.4;text-align:center;background-color:#333}.tippy-tooltip[data-size=small]{padding:.1875rem .375rem;font-size:.75rem}.tippy-tooltip[data-size=large]{padding:.375rem .75rem;font-size:1rem}.tippy-tooltip[data-animatefill]{overflow:hidden;background-color:transparent}.tippy-tooltip[data-interactive],.tippy-tooltip[data-interactive] path{pointer-events:auto}.tippy-tooltip[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-tooltip[data-inertia][data-state=hidden]{transition-timing-function:ease}.tippy-arrow,.tippy-roundarrow{position:absolute;width:0;height:0}.tippy-roundarrow{width:18px;height:7px;fill:#333;pointer-events:none}.tippy-backdrop{position:absolute;background-color:#333;border-radius:50%;width:calc(110% + 2rem);left:50%;top:50%;z-index:-1;transition:all cubic-bezier(.46,.1,.52,.98);-webkit-backface-visibility:hidden;backface-visibility:hidden}.tippy-backdrop:after{content:\"\";float:left;padding-top:100%}.tippy-backdrop+.tippy-content{transition-property:opacity;will-change:opacity}.tippy-backdrop+.tippy-content[data-state=visible]{opacity:1}.tippy-backdrop+.tippy-content[data-state=hidden]{opacity:0}");const Hi="Using the attachment feature of Shepherd requires the Tippy.js library",Xi={computeStyle:{enabled:!0,fn(e){return e.styles=Object.assign({},e.styles,{left:"50%",top:"50%",transform:"translate(-50%, -50%)"}),e}}},Bi={positionFixed:!0},Wi=function(){let e=0;return function(){return++e}}();/** * Class representing steps to be added to a tour * @extends {Evented} */class Ri extends Vo{/** * Create a step * @param {Tour} tour The tour for the step * @param {Object} options The options for the step * @param {Object|string} options.attachTo What element the step should be attached to on the page. * It can either be a string of the form "element on", or an object with those properties. * For example: ".some #element left", or {element: '.some #element', on: 'left'}. * If you use the object syntax, element can also be a DOM element. If you don’t specify an attachTo the * element will appear in the middle of the screen. * @param {HTMLElement|string} options.attachTo.element * @param {string} options.attachTo.on * @param {Object|string} options.advanceOn An action on the page which should advance shepherd to the next step. * It can be of the form `"selector event"`, or an object with those properties. * For example: `".some-element click"`, or `{selector: '.some-element', event: 'click'}`. * It doesn’t have to be an event inside the tour, it can be any event fired on any element on the page. * You can also always manually advance the Tour by calling `myTour.next()`. * @param {function} options.beforeShowPromise A function that returns a promise. * When the promise resolves, the rest of the `show` code for the step will execute. * @param {Object[]} options.buttons An array of buttons to add to the step. These will be rendered in a * footer below the main body text. * @param {function} options.buttons.button.action A function executed when the button is clicked on * @param {string} options.buttons.button.classes Extra classes to apply to the `<a>` * @param {Object} options.buttons.button.events A hash of events to bind onto the button, for example * `{'mouseover': function(){}}`. Adding a `click` event to events when you already have an `action` specified is not supported. * You can use events to skip steps or navigate to specific steps, with something like: * ```js * events: { * click: function() { * return Shepherd.activeTour.show('some_step_name'); * } * } * ``` * @param {string} options.buttons.button.text The HTML text of the button * @param {string} options.classes A string of extra classes to add to the step's content element. * @param {string} options.highlightClass An extra class to apply to the `attachTo` element when it is * highlighted (that is, when its step is active). You can then target that selector in your CSS. * @param {Object} options.tippyOptions Extra [options to pass to tippy.js]{@link https://atomiks.github.io/tippyjs/#all-options} * @param {boolean} options.scrollTo Should the element be scrolled to when this step is shown? * @param {function} options.scrollToHandler A function that lets you override the default scrollTo behavior and * define a custom action to do the scrolling, and possibly other logic. * @param {boolean} options.showCancelLink Should a cancel “✕” be shown in the header of the step? * @param {function} options.showOn A function that, when it returns `true`, will show the step. * If it returns false, the step will be skipped. * @param {string} options.text The text in the body of the step. It can be one of four types: * ``` * - HTML string * - Array of HTML strings * - `HTMLElement` object * - `Function` to be executed when the step is built. It must return one of the three options above. * ``` * @param {string} options.title The step's title. It becomes an `h3` at the top of the step. * @param {Object} options.when You can define `show`, `hide`, etc events inside `when`. For example: * ```js * when: { * show: function() { * window.scrollTo(0, 0); * } * } * ``` * @return {Step} The newly created Step instance */constructor(e,t){return super(e,t),this.tour=e,Jt.call(this,["_show","cancel","complete","destroy","hide","isOpen","scrollTo","setupElements","show"]),this.setOptions(t),this.bindAdvance=Kt.bind(this),this.bindButtonEvents=Gt.bind(this),this.bindCancelLink=$t.bind(this),this.setupTooltip=Rt.bind(this),this.parseAttachTo=Ft.bind(this),this}/** * Adds buttons to the step as passed into options * * @private * @param {HTMLElement} content The element for the step, to append the footer with buttons to */_addButtons(e){if(!I(this.options.buttons)){const t=document.createElement("footer"),o=Xt("<ul class=\"shepherd-buttons\"></ul>");t.classList.add("shepherd-footer"),this.options.buttons.map(e=>{const t=Xt(`<li><a class="shepherd-button ${e.classes||""}" tabindex="0">${e.text}</a>`);o.appendChild(t),this.bindButtonEvents(e,t.querySelector("a"))}),t.appendChild(o),e.appendChild(t)}}/** * Adds the "x" button to cancel the tour * @param {HTMLElement} element The step element * @param {HTMLElement} header The header element for the step * @private */_addCancelLink(e,t){if(this.options.showCancelLink){const o=Xt("<a href class=\"shepherd-cancel-link\"></a>");t.appendChild(o),e.classList.add("shepherd-has-cancel-link"),this.bindCancelLink(o)}}/** * Adds text passed in as options * * @private * @param {HTMLElement} content The content to append the text to */_addContent(e){const t=Xt("<div class=\"shepherd-text\"></div>");let o=this.options.text;x(o)&&(o=o.call(this,t)),o instanceof HTMLElement?t.appendChild(o):(N(o)&&(o=[o]),o.map(e=>{t.innerHTML+=`<p>${e}</p>`})),e.appendChild(t)}/** * Creates Shepherd element for step based on options * * @private * @return {HTMLElement} The DOM element for the step tooltip */_createTooltipContent(){const e=document.createElement("div"),t=this.options.classes||"",o=Xt(`<div class="${t}" data-shepherd-step-id="${this.id}">`),r=document.createElement("header");if(this.options.title){const e=document.createElement("h3");e.classList.add("shepherd-title"),e.innerHTML=`${this.options.title}`,r.appendChild(e),o.classList.add("shepherd-has-title")}return e.classList.add("shepherd-content"),r.classList.add("shepherd-header"),o.appendChild(e),e.appendChild(r),m(this.options.text)||this._addContent(e),this._addButtons(e),this._addCancelLink(o,r),o}/** * Returns the tour for the step * @return {Tour} The tour instance */getTour(){return this.tour}/** * Cancel the tour * Triggers the `cancel` event */cancel(){this.tour.cancel(),this.trigger("cancel")}/** * Complete the tour * Triggers the `complete` event */complete(){this.tour.complete(),this.trigger("complete")}/** * Remove the step, delete the step's element, and destroy the tippy instance for the step * Triggers `destroy` event */destroy(){this.tooltip&&(this.tooltip.destroy(),this.tooltip=null),A(this.el)&&this.el.parentNode&&(this.el.parentNode.removeChild(this.el),this.el=null),this.target&&this._updateStepTargetOnHide(),this.trigger("destroy")}/** * Hide the step and destroy the tippy instance */hide(){this.tour.modal.hide(),this.trigger("before-hide"),document.body.removeAttribute("data-shepherd-step"),this.target&&this._updateStepTargetOnHide(),this.tooltip&&this.tooltip.hide(),this.trigger("hide")}/** * Check if the step is open and visible * @return {boolean} True if the step is open and visible */isOpen(){return!!(this.tooltip&&this.tooltip.state&&this.tooltip.state.isVisible)}/** * Create the element and set up the tippy instance */setupElements(){m(this.el)||this.destroy(),this.el=this._createTooltipContent(),this.options.advanceOn&&this.bindAdvance(),this.setupTooltip()}/** * If a custom scrollToHandler is defined, call that, otherwise do the generic * scrollIntoView call. */scrollTo(){const e=this.parseAttachTo(),t=e.element;x(this.options.scrollToHandler)?this.options.scrollToHandler(t):A(t)&&t.scrollIntoView()}/** * Sets the options for the step, maps `when` to events, sets up buttons * @param {Object} options The options for the step */setOptions(){let e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.options=e;const t=this.options.when;this.destroy(),this.id=this.options.id||`step-${Wi()}`,L(t,(e,t)=>{this.on(t,e,this)})}/** * Wraps `_show` and ensures `beforeShowPromise` resolves before calling show * @return {*|Promise} */show(){if(x(this.options.beforeShowPromise)){const e=this.options.beforeShowPromise();if(!m(e))return e.then(()=>this._show())}this._show()}/** * Triggers `before-show`, generates the tooltip DOM content, * sets up a tippy instance for the tooltip, then triggers `show`. * @private */_show(){this.tour.beforeShowStep(this),this.trigger("before-show"),this.el||this.setupElements(),this.target.classList.add("shepherd-enabled","shepherd-target"),document.body.setAttribute("data-shepherd-step",this.id),this.options.scrollTo&&setTimeout(()=>{this.scrollTo()}),this.tooltip.show(),this.trigger("show")}_updateStepTargetOnHide(){this.options.highlightClass&&this.target.classList.remove(this.options.highlightClass),this.target.classList.remove("shepherd-enabled","shepherd-target")}}/** `Object#toString` result references. */const Fi="http://www.w3.org/2000/svg",Ui={modalOverlay:"shepherdModalOverlayContainer",modalOverlayMask:"shepherdModalMask",modalOverlayMaskRect:"shepherdModalMaskRect",modalOverlayMaskOpening:"shepherdModalMaskOpening"},zi={isVisible:"shepherd-modal-is-visible",modalTarget:"shepherd-modal-target"};var Vi=function(){return _o.Date.now()},qi=Lo,Ki=Oo,Gi=Lo,$i=oi?function(e,t){return oi(e,"toString",{configurable:!0,enumerable:!1,value:xo(t),writable:!0})}:S,Ji=Date.now,Zi=/** * Creates a function that'll short out and invoke `identity` instead * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` * milliseconds. * * @private * @param {Function} func The function to restrict. * @returns {Function} Returns the new shortable function. */function(e){var t=0,o=0;return function(){var r=Ji(),i=16-(r-o);if(o=r,!(0<i))t=0;else if(800<=++t)return arguments[0];return e.apply(void 0,arguments)}}/** * Sets the `toString` method of `func` to return `string`. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */($i),Qi=/** * The base implementation of `_.rest` which doesn't validate or coerce arguments. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @returns {Function} Returns the new function. */function(e,t){return Zi(wo(e,t,S),e+"")}/** * Defers invoking the `func` until the current call stack has cleared. Any * additional arguments are provided to `func` when it's invoked. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to defer. * @param {...*} [args] The arguments to invoke `func` with. * @returns {number} Returns the timer id. * @example * * _.defer(function(text) { * console.log(text); * }, 'deferred'); * // => Logs 'deferred' after one millisecond. */(function(e,t){return go(e,1,t)});/** Error message constants. */class en{constructor(e){return this._modalOverlayElem||(this._modalOverlayElem=io(),this._modalOverlayOpening=po(this._modalOverlayElem),this.hide(),document.body.appendChild(this._modalOverlayElem)),this.options=e,this}/** * Removes svg mask from modal overlay and removes classes for modal being visible */cleanup(){Qi(()=>{const e=this._modalOverlayElem;e&&e instanceof SVGElement&&e.parentNode.removeChild(e),this._modalOverlayElem=null,document.body.classList.remove(zi.isVisible)})}/** * Hide the modal overlay */hide(){document.body.classList.remove(zi.isVisible),this._modalOverlayElem&&(this._modalOverlayElem.style.display="none")}/** * If modal is enabled, setup the svg mask opening and modal overlay for the step * @param step */setupForStep(e){this.options.useModalOverlay?(this._styleForStep(e),this.show()):this.hide()}/** * Show the modal overlay */show(){document.body.classList.add(zi.isVisible),this._modalOverlayElem&&(this._modalOverlayElem.style.display="block")}/** * Style the modal for the step * @param {Step} step The step to style the opening for * @private */_styleForStep(e){const t=this._modalOverlayOpening,o=ho(e);o?(no(o,t),this._onScreenChange=yo(no.bind(this,o,t),0,{leading:!1,trailing:!0// see https://lodash.com/docs/#debounce }),uo.call(this)):ao(this._modalOverlayOpening)}}const tn={trigger:"manual",arrow:!0,animation:"fade",duration:420,flip:!0,animateFill:!1,// https://atomiks.github.io/tippyjs/#animate-fill-option interactive:!0,// https://atomiks.github.io/tippyjs/#interactive-option hideOnClick:"toggle",// https://atomiks.github.io/tippyjs/#hide-on-click-option multiple:!0// https://atomiks.github.io/tippyjs/#multiple-option },on=function(){let e=0;return function(){return++e}}(),rn=new Vo;return Object.assign(rn,{Tour:/** * Class representing the site tour * @extends {Evented} */class extends Vo{/** * @param {Object} options The options for the tour * @param {Object} options.defaultStepOptions Default options for Steps created through `addStep` * @param {Step[]} options.steps An array of Step instances to initialize the tour with * @param {string} options.tourName An optional "name" for the tour. This will be appended to the the tour's * dynamically generated `id` property -- which is also set on the `body` element as the `data-shepherd-active-tour` attribute * whenever the tour becomes active. * @param {boolean} options.useModalOverlay Whether or not steps should be placed above a darkened * modal overlay. If true, the overlay will create an opening around the target element so that it * can remain interactive * @returns {Tour} */constructor(){let e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};super(e),Jt.call(this,["back","cancel","complete","hide","next"]),this.options=e,this.steps=this.options.steps||[];return["active","cancel","complete","inactive","show","start"].map(e=>{(t=>{this.on(t,e=>{e=e||{},e.tour=this,rn.trigger(t,e)})})(e)}),this.modal=new en(e),this._setTooltipDefaults(),this._setTourID(),this}/** * Adds a new step to the tour * @param {Object|Number|Step|String} arg1 * When arg2 is defined, arg1 can either be a string or number, to use for the `id` for the step * When arg2 is undefined, arg1 is either an object containing step options or a Step instance * @param {Object|Step} arg2 An object containing step options or a Step instance * @return {Step} The newly added step */addStep(e,t){let o,r;// If we just have one argument, we can assume it is an object of step options, with an id return m(t)?r=e:(o=e,r=t),r instanceof Ri?r.tour=this:r=this.setupStep(r,o),this.steps.push(r),r}/** * Go to the previous step in the tour */back(){const e=this.steps.indexOf(this.currentStep);this.show(e-1,!1)}/** * Calls done() triggering the 'cancel' event * If `confirmCancel` is true, will show a window.confirm before cancelling */cancel(){if(this.options.confirmCancel){const e=this.options.confirmCancelMessage||"Are you sure you want to stop the tour?",t=window.confirm(e);t&&this.done("cancel")}else this.done("cancel")}/** * Calls done() triggering the `complete` event */complete(){this.done("complete")}/** * Called whenever the tour is cancelled or completed, basically anytime we exit the tour * @param {String} event The event name to trigger */done(e){I(this.steps)||this.steps.forEach(e=>e.destroy()),Eo.call(this),ko(this.tourObject),this.modal.cleanup(),this.trigger(e),rn.activeTour=null,this._removeBodyAttrs(),this.trigger("inactive",{tour:this})}/** * Gets the step from a given id * @param {Number|String} id The id of the step to retrieve * @return {Step} The step corresponding to the `id` */getById(e){return this.steps.find(t=>t.id===e)}/** * Gets the current step * @returns {Step|null} */getCurrentStep(){return this.currentStep}/** * Hide the current step */hide(){const e=this.getCurrentStep();if(e)return e.hide()}isActive(){return rn.activeTour===this}/** * Go to the next step in the tour * If we are at the end, call `complete` */next(){const e=this.steps.indexOf(this.currentStep);e===this.steps.length-1?this.complete():this.show(e+1,!0)}/** * Removes the step from the tour * @param {String} name The id for the step to remove */removeStep(e){const t=this.getCurrentStep();// Find the step, destroy it and remove it from this.steps this.steps.some((t,o)=>{if(t.id===e)return t.isOpen()&&t.hide(),t.destroy(),this.steps.splice(o,1),!0}),t&&t.id===e&&(this.currentStep=void 0,this.steps.length?this.show(0):this.cancel())}/** * Setup a new step object * @param {Object} stepOptions The object describing the options for the step * @param {String|Number} name The string or number to use as the `id` for the step * @return {Step} The step instance */setupStep(e,t){return(N(t)||Zt(t))&&(e.id=t.toString()),e=Object.assign({},this.options.defaultStepOptions,e),new Ri(this,e)}beforeShowStep(e){this.modal.setupForStep(e),this._styleTargetElementForStep(e)}/** * Show a specific step in the tour * @param {Number|String} key The key to look up the step by * @param {Boolean} forward True if we are going forward, false if backward */show(){let e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,t=!(1<arguments.length&&void 0!==arguments[1])||arguments[1];const o=N(e)?this.getById(e):this.steps[e];if(o){this._updateStateBeforeShow();const e=x(o.options.showOn)&&!o.options.showOn();// If `showOn` returns false, we want to skip the step, otherwise, show the step like normal e?this._skipStep(o,t):(this.trigger("show",{step:o,previous:this.currentStep}),this.currentStep=o,o.show())}}/** * Start the tour */start(){this.trigger("start"),this.currentStep=null,this._setupActiveTour(),uo.call(this),this.next()}/** * Make this tour "active" * @private */_setupActiveTour(){this._addBodyAttrs(),this.trigger("active",{tour:this}),rn.activeTour=this}/** * Modulates the styles of the passed step's target element, based on the step's options and * the tour's `modal` option, to visually emphasize the element * * @param step The step object that attaches to the element * @private */_styleTargetElementForStep(e){const t=ho(e);t&&(co(t),e.options.highlightClass&&t.classList.add(e.options.highlightClass),!1===e.options.canClickTarget&&(t.style.pointerEvents="none"))}/** * Called when `showOn` evaluates to false, to skip the step * @param {Step} step The step to skip * @param {Boolean} forward True if we are going forward, false if backward * @private */_skipStep(e,t){const o=this.steps.indexOf(e),r=t?o+1:o-1;this.show(r,t)}_setTooltipDefaults(){Ht.setDefaults(tn)}_updateStateBeforeShow(){this.currentStep&&this.currentStep.hide(),this.isActive()||this._setupActiveTour()}_setTourID(){const e=this.options.tourName||"tour",t=on();this.id=`${e}--${t}`}_addBodyAttrs(){document.body.setAttribute("data-shepherd-active-tour",this.id),document.body.classList.add("shepherd-active")}_removeBodyAttrs(){document.body.removeAttribute("data-shepherd-active-tour"),document.body.classList.remove("shepherd-active")}},Step:Ri,Evented:Vo}),rn}); //# sourceMappingURL=shepherd.min.js.map |
:: Command execute :: | |
:: Shadow's tricks :D :: | |
Useful Commands
|
:: Preddy's tricks :D :: | |
Php Safe-Mode Bypass (Read Files)
|
--[ c999shell v. 1.0 pre-release build #16 Modded by Shadow & Preddy | RootShell Security Group | r57 c99 shell | Generation time: 0.0151 ]-- |