shepherdjs_rails 2.3.2 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"shepherd.min.js","sources":["../../node_modules/lodash-es/isObject.js","../../node_modules/lodash-es/_freeGlobal.js","../../node_modules/lodash-es/_root.js","../../node_modules/lodash-es/_Symbol.js","../../node_modules/lodash-es/_getRawTag.js","../../node_modules/lodash-es/_objectToString.js","../../node_modules/lodash-es/_baseGetTag.js","../../node_modules/lodash-es/isObjectLike.js","../../node_modules/lodash-es/isSymbol.js","../../node_modules/lodash-es/toNumber.js","../../node_modules/lodash-es/toFinite.js","../../node_modules/lodash-es/toInteger.js","../../node_modules/lodash-es/drop.js","../../node_modules/lodash-es/_baseSlice.js","../../node_modules/lodash-es/isUndefined.js","../../src/js/evented.js","../../node_modules/lodash-es/_baseFor.js","../../node_modules/lodash-es/_createBaseFor.js","../../node_modules/lodash-es/_baseIsArguments.js","../../node_modules/lodash-es/isArguments.js","../../node_modules/lodash-es/isArray.js","../../node_modules/lodash-es/isBuffer.js","../../node_modules/lodash-es/stubFalse.js","../../node_modules/lodash-es/_isIndex.js","../../node_modules/lodash-es/isLength.js","../../node_modules/lodash-es/_baseIsTypedArray.js","../../node_modules/lodash-es/_nodeUtil.js","../../node_modules/lodash-es/_baseUnary.js","../../node_modules/lodash-es/isTypedArray.js","../../node_modules/lodash-es/_arrayLikeKeys.js","../../node_modules/lodash-es/_baseTimes.js","../../node_modules/lodash-es/_isPrototype.js","../../node_modules/lodash-es/_overArg.js","../../node_modules/lodash-es/_nativeKeys.js","../../node_modules/lodash-es/_baseKeys.js","../../node_modules/lodash-es/isFunction.js","../../node_modules/lodash-es/isArrayLike.js","../../node_modules/lodash-es/keys.js","../../node_modules/lodash-es/identity.js","../../node_modules/lodash-es/forOwn.js","../../node_modules/lodash-es/_baseForOwn.js","../../node_modules/lodash-es/_castFunction.js","../../node_modules/lodash-es/_getPrototype.js","../../node_modules/lodash-es/isPlainObject.js","../../node_modules/lodash-es/isElement.js","../../node_modules/lodash-es/_coreJsData.js","../../node_modules/lodash-es/_isMasked.js","../../node_modules/lodash-es/_toSource.js","../../node_modules/lodash-es/_baseIsNative.js","../../node_modules/lodash-es/_getNative.js","../../node_modules/lodash-es/_getValue.js","../../node_modules/lodash-es/_DataView.js","../../node_modules/lodash-es/_Map.js","../../node_modules/lodash-es/_Promise.js","../../node_modules/lodash-es/_Set.js","../../node_modules/lodash-es/_WeakMap.js","../../node_modules/lodash-es/_getTag.js","../../node_modules/lodash-es/isEmpty.js","../../node_modules/lodash-es/isString.js","../../node_modules/element-matches/index.js","../../node_modules/lodash-es/_defineProperty.js","../../node_modules/lodash-es/_assignValue.js","../../node_modules/lodash-es/_baseAssignValue.js","../../node_modules/lodash-es/eq.js","../../node_modules/popper.js/dist/esm/popper.js","../../node_modules/tippy.js/dist/esm/tippy.standalone.js","../../src/js/utils/error-messages.js","../../src/js/utils.js","../../node_modules/lodash-es/_baseZipObject.js","../../node_modules/lodash-es/zipObject.js","../../src/js/bind.js","../../src/js/step.js","../../src/js/browser.js","../../src/js/utils/modal.js","../../src/js/utils/dom.js","../../node_modules/lodash-es/now.js","../../node_modules/lodash-es/debounce.js","../../node_modules/lodash-es/_overRest.js","../../node_modules/lodash-es/_baseSetToString.js","../../node_modules/lodash-es/_shortOut.js","../../node_modules/lodash-es/constant.js","../../node_modules/lodash-es/defer.js","../../node_modules/lodash-es/_baseRest.js","../../node_modules/lodash-es/_setToString.js","../../node_modules/lodash-es/_baseDelay.js","../../node_modules/lodash-es/_apply.js","../../src/js/modal.js","../../src/js/utils/tooltip-defaults.js","../../src/js/tour.js","../../src/js/shepherd.js","../../src/js/css.js","../../src/js/utils/cleanup.js","../../node_modules/lodash-es/isNumber.js"],"sourcesContent":["/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\nfunction drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n}\n\nexport default drop;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","import drop from 'lodash-es/drop';\nimport isUndefined from 'lodash-es/isUndefined';\n\nexport class Evented {\n on(event, handler, ctx) {\n const once = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\n if (isUndefined(this.bindings)) {\n this.bindings = {};\n }\n if (isUndefined(this.bindings[event])) {\n this.bindings[event] = [];\n }\n this.bindings[event].push({ handler, ctx, once });\n }\n\n once(event, handler, ctx) {\n this.on(event, handler, ctx, true);\n }\n\n off(event, handler) {\n if (isUndefined(this.bindings) || isUndefined(this.bindings[event])) {\n return false;\n }\n\n if (isUndefined(handler)) {\n delete this.bindings[event];\n } else {\n this.bindings[event].forEach((binding, index) => {\n if (binding.handler === handler) {\n this.bindings[event].splice(index, 1);\n }\n });\n }\n }\n\n trigger(event) {\n if (!isUndefined(this.bindings) && this.bindings[event]) {\n const args = drop(arguments);\n\n this.bindings[event].forEach((binding, index) => {\n const { ctx, handler, once } = binding;\n\n const context = ctx || this;\n\n handler.apply(context, args);\n\n if (once) {\n this.bindings[event].splice(index, 1);\n }\n });\n }\n }\n\n}\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseForOwn from './_baseForOwn.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && baseForOwn(object, castFunction(iteratee));\n}\n\nexport default forOwn;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import isObjectLike from './isObjectLike.js';\nimport isPlainObject from './isPlainObject.js';\n\n/**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\nfunction isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n}\n\nexport default isElement;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","if (!Element.prototype.matches) {\n Element.prototype.matches =\n Element.prototype.matchesSelector ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n}\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.6\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthOddness = reference.width % 2 === popper.width % 2;\n var bothOddWidth = reference.width % 2 === 1 && popper.width % 2 === 1;\n var noRound = function noRound(v) {\n return v;\n };\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthOddness ? Math.round : Math.floor;\n var verticalToInteger = !shouldRound ? noRound : Math.round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['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'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/*!\n* Tippy.js v3.4.1\n* (c) 2017-2019 atomiks\n* MIT\n*/\nimport Popper from 'popper.js';\n\nvar version = \"3.4.1\";\n\nvar isBrowser = typeof window !== 'undefined';\n\nvar nav = isBrowser ? navigator : {};\nvar win = isBrowser ? window : {};\n\n\nvar isIE = /MSIE |Trident\\//.test(nav.userAgent);\nvar isIOS = /iPhone|iPad|iPod/.test(nav.platform) && !win.MSStream;\nvar supportsTouch = 'ontouchstart' in win;\n\nvar Defaults = {\n a11y: true,\n allowHTML: true,\n animateFill: true,\n animation: 'shift-away',\n appendTo: function appendTo() {\n return document.body;\n },\n aria: 'describedby',\n arrow: false,\n arrowTransform: '',\n arrowType: 'sharp',\n autoFocus: true,\n boundary: 'scrollParent',\n content: '',\n delay: [0, 20],\n distance: 10,\n duration: [325, 275],\n flip: true,\n flipBehavior: 'flip',\n followCursor: false,\n hideOnClick: true,\n inertia: false,\n interactive: false,\n interactiveBorder: 2,\n interactiveDebounce: 0,\n lazy: true,\n livePlacement: true,\n maxWidth: '',\n multiple: false,\n offset: 0,\n onHidden: function onHidden() {},\n onHide: function onHide() {},\n onMount: function onMount() {},\n onShow: function onShow() {},\n onShown: function onShown() {},\n\n performance: false,\n placement: 'top',\n popperOptions: {},\n shouldPopperHideOnBlur: function shouldPopperHideOnBlur() {\n return true;\n },\n showOnInit: false,\n size: 'regular',\n sticky: false,\n target: '',\n theme: 'dark',\n touch: true,\n touchHold: false,\n trigger: 'mouseenter focus',\n updateDuration: 200,\n wait: null,\n zIndex: 9999\n\n /**\n * If the set() method encounters one of these, the popperInstance must be\n * recreated\n */\n};var POPPER_INSTANCE_RELATED_PROPS = ['arrow', 'arrowType', 'distance', 'flip', 'flipBehavior', 'offset', 'placement', 'popperOptions'];\n\nvar Selectors = {\n POPPER: '.tippy-popper',\n TOOLTIP: '.tippy-tooltip',\n CONTENT: '.tippy-content',\n BACKDROP: '.tippy-backdrop',\n ARROW: '.tippy-arrow',\n ROUND_ARROW: '.tippy-roundarrow'\n};\n\nvar elementProto = isBrowser ? Element.prototype : {};\n\nvar matches = elementProto.matches || elementProto.matchesSelector || elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector;\n\n/**\n * Ponyfill for Array.from - converts iterable values to an array\n * @param {Array-like} value\n * @return {Array}\n */\nfunction arrayFrom(value) {\n return [].slice.call(value);\n}\n\n/**\n * Ponyfill for Element.prototype.closest\n * @param {Element} element\n * @param {String} parentSelector\n * @return {Element}\n */\nfunction closest(element, parentSelector) {\n return (elementProto.closest || function (selector) {\n var el = this;\n while (el) {\n if (matches.call(el, selector)) return el;\n el = el.parentElement;\n }\n }).call(element, parentSelector);\n}\n\n/**\n * Works like Element.prototype.closest, but uses a callback instead\n * @param {Element} element\n * @param {Function} callback\n * @return {Element}\n */\nfunction closestCallback(element, callback) {\n while (element) {\n if (callback(element)) return element;\n element = element.parentElement;\n }\n}\n\nvar PASSIVE = { passive: true };\nvar FF_EXTENSION_TRICK = { x: true };\n\n/**\n * Returns a new `div` element\n * @return {HTMLDivElement}\n */\nfunction div() {\n return document.createElement('div');\n}\n\n/**\n * Sets the innerHTML of an element while tricking linters & minifiers\n * @param {HTMLElement} el\n * @param {Element|String} html\n */\nfunction setInnerHTML(el, html) {\n el[FF_EXTENSION_TRICK.x && 'innerHTML'] = html instanceof Element ? html[FF_EXTENSION_TRICK.x && 'innerHTML'] : html;\n}\n\n/**\n * Sets the content of a tooltip\n * @param {HTMLElement} contentEl\n * @param {Object} props\n */\nfunction setContent(contentEl, props) {\n if (props.content instanceof Element) {\n setInnerHTML(contentEl, '');\n contentEl.appendChild(props.content);\n } else {\n contentEl[props.allowHTML ? 'innerHTML' : 'textContent'] = props.content;\n }\n}\n\n/**\n * Returns the child elements of a popper element\n * @param {HTMLElement} popper\n */\nfunction getChildren(popper) {\n return {\n tooltip: popper.querySelector(Selectors.TOOLTIP),\n backdrop: popper.querySelector(Selectors.BACKDROP),\n content: popper.querySelector(Selectors.CONTENT),\n arrow: popper.querySelector(Selectors.ARROW) || popper.querySelector(Selectors.ROUND_ARROW)\n };\n}\n\n/**\n * Adds `data-inertia` attribute\n * @param {HTMLElement} tooltip\n */\nfunction addInertia(tooltip) {\n tooltip.setAttribute('data-inertia', '');\n}\n\n/**\n * Removes `data-inertia` attribute\n * @param {HTMLElement} tooltip\n */\nfunction removeInertia(tooltip) {\n tooltip.removeAttribute('data-inertia');\n}\n\n/**\n * Creates an arrow element and returns it\n */\nfunction createArrowElement(arrowType) {\n var arrow = div();\n if (arrowType === 'round') {\n arrow.className = 'tippy-roundarrow';\n setInnerHTML(arrow, '<svg viewBox=\"0 0 24 8\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 8s2.021-.015 5.253-4.218C9.584 2.051 10.797 1.007 12 1c1.203-.007 2.416 1.035 3.761 2.782C19.012 8.005 21 8 21 8H3z\"/></svg>');\n } else {\n arrow.className = 'tippy-arrow';\n }\n return arrow;\n}\n\n/**\n * Creates a backdrop element and returns it\n */\nfunction createBackdropElement() {\n var backdrop = div();\n backdrop.className = 'tippy-backdrop';\n backdrop.setAttribute('data-state', 'hidden');\n return backdrop;\n}\n\n/**\n * Adds interactive-related attributes\n * @param {HTMLElement} popper\n * @param {HTMLElement} tooltip\n */\nfunction addInteractive(popper, tooltip) {\n popper.setAttribute('tabindex', '-1');\n tooltip.setAttribute('data-interactive', '');\n}\n\n/**\n * Removes interactive-related attributes\n * @param {HTMLElement} popper\n * @param {HTMLElement} tooltip\n */\nfunction removeInteractive(popper, tooltip) {\n popper.removeAttribute('tabindex');\n tooltip.removeAttribute('data-interactive');\n}\n\n/**\n * Applies a transition duration to a list of elements\n * @param {Array} els\n * @param {Number} value\n */\nfunction applyTransitionDuration(els, value) {\n els.forEach(function (el) {\n if (el) {\n el.style.transitionDuration = value + 'ms';\n }\n });\n}\n\n/**\n * Add/remove transitionend listener from tooltip\n * @param {Element} tooltip\n * @param {String} action\n * @param {Function} listener\n */\nfunction toggleTransitionEndListener(tooltip, action, listener) {\n tooltip[action + 'EventListener']('transitionend', listener);\n}\n\n/**\n * Returns the popper's placement, ignoring shifting (top-start, etc)\n * @param {Element} popper\n * @return {String}\n */\nfunction getPopperPlacement(popper) {\n var fullPlacement = popper.getAttribute('x-placement');\n return fullPlacement ? fullPlacement.split('-')[0] : '';\n}\n\n/**\n * Sets the visibility state to elements so they can begin to transition\n * @param {Array} els\n * @param {String} state\n */\nfunction setVisibilityState(els, state) {\n els.forEach(function (el) {\n if (el) {\n el.setAttribute('data-state', state);\n }\n });\n}\n\n/**\n * Triggers reflow\n * @param {Element} popper\n */\nfunction reflow(popper) {\n void popper.offsetHeight;\n}\n\n/**\n * Constructs the popper element and returns it\n * @param {Number} id\n * @param {Object} props\n */\nfunction createPopperElement(id, props) {\n var popper = div();\n popper.className = 'tippy-popper';\n popper.setAttribute('role', 'tooltip');\n popper.id = 'tippy-' + id;\n popper.style.zIndex = props.zIndex;\n\n var tooltip = div();\n tooltip.className = 'tippy-tooltip';\n tooltip.style.maxWidth = props.maxWidth + (typeof props.maxWidth === 'number' ? 'px' : '');\n tooltip.setAttribute('data-size', props.size);\n tooltip.setAttribute('data-animation', props.animation);\n tooltip.setAttribute('data-state', 'hidden');\n props.theme.split(' ').forEach(function (t) {\n tooltip.classList.add(t + '-theme');\n });\n\n var content = div();\n content.className = 'tippy-content';\n content.setAttribute('data-state', 'hidden');\n\n if (props.interactive) {\n addInteractive(popper, tooltip);\n }\n\n if (props.arrow) {\n tooltip.appendChild(createArrowElement(props.arrowType));\n }\n\n if (props.animateFill) {\n tooltip.appendChild(createBackdropElement());\n tooltip.setAttribute('data-animatefill', '');\n }\n\n if (props.inertia) {\n addInertia(tooltip);\n }\n\n setContent(content, props);\n\n tooltip.appendChild(content);\n popper.appendChild(tooltip);\n\n popper.addEventListener('focusout', function (e) {\n if (e.relatedTarget && popper._tippy && !closestCallback(e.relatedTarget, function (el) {\n return el === popper;\n }) && e.relatedTarget !== popper._tippy.reference && popper._tippy.props.shouldPopperHideOnBlur(e)) {\n popper._tippy.hide();\n }\n });\n\n return popper;\n}\n\n/**\n * Updates the popper element based on the new props\n * @param {HTMLElement} popper\n * @param {Object} prevProps\n * @param {Object} nextProps\n */\nfunction updatePopperElement(popper, prevProps, nextProps) {\n var _getChildren = getChildren(popper),\n tooltip = _getChildren.tooltip,\n content = _getChildren.content,\n backdrop = _getChildren.backdrop,\n arrow = _getChildren.arrow;\n\n popper.style.zIndex = nextProps.zIndex;\n tooltip.setAttribute('data-size', nextProps.size);\n tooltip.setAttribute('data-animation', nextProps.animation);\n tooltip.style.maxWidth = nextProps.maxWidth + (typeof nextProps.maxWidth === 'number' ? 'px' : '');\n\n if (prevProps.content !== nextProps.content) {\n setContent(content, nextProps);\n }\n\n // animateFill\n if (!prevProps.animateFill && nextProps.animateFill) {\n tooltip.appendChild(createBackdropElement());\n tooltip.setAttribute('data-animatefill', '');\n } else if (prevProps.animateFill && !nextProps.animateFill) {\n tooltip.removeChild(backdrop);\n tooltip.removeAttribute('data-animatefill');\n }\n\n // arrow\n if (!prevProps.arrow && nextProps.arrow) {\n tooltip.appendChild(createArrowElement(nextProps.arrowType));\n } else if (prevProps.arrow && !nextProps.arrow) {\n tooltip.removeChild(arrow);\n }\n\n // arrowType\n if (prevProps.arrow && nextProps.arrow && prevProps.arrowType !== nextProps.arrowType) {\n tooltip.replaceChild(createArrowElement(nextProps.arrowType), arrow);\n }\n\n // interactive\n if (!prevProps.interactive && nextProps.interactive) {\n addInteractive(popper, tooltip);\n } else if (prevProps.interactive && !nextProps.interactive) {\n removeInteractive(popper, tooltip);\n }\n\n // inertia\n if (!prevProps.inertia && nextProps.inertia) {\n addInertia(tooltip);\n } else if (prevProps.inertia && !nextProps.inertia) {\n removeInertia(tooltip);\n }\n\n // theme\n if (prevProps.theme !== nextProps.theme) {\n prevProps.theme.split(' ').forEach(function (theme) {\n tooltip.classList.remove(theme + '-theme');\n });\n nextProps.theme.split(' ').forEach(function (theme) {\n tooltip.classList.add(theme + '-theme');\n });\n }\n}\n\n/**\n * Runs the callback after the popper's position has been updated\n * update() is debounced with Promise.resolve() or setTimeout()\n * scheduleUpdate() is update() wrapped in requestAnimationFrame()\n * @param {Popper} popperInstance\n * @param {Function} callback\n */\nfunction afterPopperPositionUpdates(popperInstance, callback) {\n var popper = popperInstance.popper,\n options = popperInstance.options;\n var onCreate = options.onCreate,\n onUpdate = options.onUpdate;\n\n\n options.onCreate = options.onUpdate = function () {\n reflow(popper);\n callback();\n onUpdate();\n options.onCreate = onCreate;\n options.onUpdate = onUpdate;\n };\n}\n\n/**\n * Hides all visible poppers on the document, optionally excluding one\n * @param {Tippy} tippyInstanceToExclude\n */\nfunction hideAllPoppers(tippyInstanceToExclude) {\n arrayFrom(document.querySelectorAll(Selectors.POPPER)).forEach(function (popper) {\n var tip = popper._tippy;\n if (tip && tip.props.hideOnClick === true && (!tippyInstanceToExclude || popper !== tippyInstanceToExclude.popper)) {\n tip.hide();\n }\n });\n}\n\n/**\n * Determines if the mouse cursor is outside of the popper's interactive border\n * region\n * @param {String} popperPlacement\n * @param {Object} popperRect\n * @param {MouseEvent} event\n * @param {Object} props\n */\nfunction isCursorOutsideInteractiveBorder(popperPlacement, popperRect, event, props) {\n if (!popperPlacement) {\n return true;\n }\n\n var x = event.clientX,\n y = event.clientY;\n var interactiveBorder = props.interactiveBorder,\n distance = props.distance;\n\n\n var exceedsTop = popperRect.top - y > (popperPlacement === 'top' ? interactiveBorder + distance : interactiveBorder);\n\n var exceedsBottom = y - popperRect.bottom > (popperPlacement === 'bottom' ? interactiveBorder + distance : interactiveBorder);\n\n var exceedsLeft = popperRect.left - x > (popperPlacement === 'left' ? interactiveBorder + distance : interactiveBorder);\n\n var exceedsRight = x - popperRect.right > (popperPlacement === 'right' ? interactiveBorder + distance : interactiveBorder);\n\n return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n}\n\n/**\n * Returns the distance offset, taking into account the default offset due to\n * the transform: translate() rule in CSS\n * @param {Number} distance\n * @param {Number} defaultDistance\n */\nfunction getOffsetDistanceInPx(distance, defaultDistance) {\n return -(distance - defaultDistance) + 'px';\n}\n\n/**\n * Determines if a value is a plain object\n * @param {any} value\n * @return {Boolean}\n */\nfunction isPlainObject(value) {\n return {}.toString.call(value) === '[object Object]';\n}\n\n/**\n * Safe .hasOwnProperty check, for prototype-less objects\n * @param {Object} obj\n * @param {String} key\n * @return {Boolean}\n */\nfunction hasOwnProperty(obj, key) {\n return {}.hasOwnProperty.call(obj, key);\n}\n\n/**\n * Determines if a value is numeric\n * @param {any} value\n * @return {Boolean}\n */\nfunction isNumeric(value) {\n return !isNaN(value) && !isNaN(parseFloat(value));\n}\n\n/**\n * Returns an array of elements based on the value\n * @param {any} value\n * @return {Array}\n */\nfunction getArrayOfElements(value) {\n if (value instanceof Element || isPlainObject(value)) {\n return [value];\n }\n if (value instanceof NodeList) {\n return arrayFrom(value);\n }\n if (Array.isArray(value)) {\n return value;\n }\n\n try {\n return arrayFrom(document.querySelectorAll(value));\n } catch (e) {\n return [];\n }\n}\n\n/**\n * Returns a value at a given index depending on if it's an array or number\n * @param {any} value\n * @param {Number} index\n * @param {any} defaultValue\n */\nfunction getValue(value, index, defaultValue) {\n if (Array.isArray(value)) {\n var v = value[index];\n return v == null ? defaultValue : v;\n }\n return value;\n}\n\n/**\n * Focuses an element while preventing a scroll jump if it's not within the\n * viewport\n * @param {Element} el\n */\nfunction focus(el) {\n var x = window.scrollX || window.pageXOffset;\n var y = window.scrollY || window.pageYOffset;\n el.focus();\n scroll(x, y);\n}\n\n/**\n * Defers a function's execution until the call stack has cleared\n * @param {Function} fn\n */\nfunction defer(fn) {\n setTimeout(fn, 1);\n}\n\n/**\n * Debounce utility\n * @param {Function} fn\n * @param {Number} ms\n */\nfunction debounce(fn, ms) {\n var timeoutId = void 0;\n return function () {\n var _this = this,\n _arguments = arguments;\n\n clearTimeout(timeoutId);\n timeoutId = setTimeout(function () {\n return fn.apply(_this, _arguments);\n }, ms);\n };\n}\n\n/**\n * Prevents errors from being thrown while accessing nested modifier objects\n * in `popperOptions`\n * @param {Object} obj\n * @param {String} key\n * @return {Object|undefined}\n */\nfunction getModifier(obj, key) {\n return obj && obj.modifiers && obj.modifiers[key];\n}\n\n/**\n * Determines if an array or string includes a value\n * @param {Array|String} a\n * @param {any} b\n * @return {Boolean}\n */\nfunction includes(a, b) {\n return a.indexOf(b) > -1;\n}\n\nvar isUsingTouch = false;\n\nfunction onDocumentTouch() {\n if (isUsingTouch) {\n return;\n }\n\n isUsingTouch = true;\n\n if (isIOS) {\n document.body.classList.add('tippy-iOS');\n }\n\n if (window.performance) {\n document.addEventListener('mousemove', onDocumentMouseMove);\n }\n}\n\nvar lastMouseMoveTime = 0;\nfunction onDocumentMouseMove() {\n var now = performance.now();\n\n // Chrome 60+ is 1 mousemove per animation frame, use 20ms time difference\n if (now - lastMouseMoveTime < 20) {\n isUsingTouch = false;\n document.removeEventListener('mousemove', onDocumentMouseMove);\n if (!isIOS) {\n document.body.classList.remove('tippy-iOS');\n }\n }\n\n lastMouseMoveTime = now;\n}\n\nfunction onDocumentClick(_ref) {\n var target = _ref.target;\n\n // Simulated events dispatched on the document\n if (!(target instanceof Element)) {\n return hideAllPoppers();\n }\n\n // Clicked on an interactive popper\n var popper = closest(target, Selectors.POPPER);\n if (popper && popper._tippy && popper._tippy.props.interactive) {\n return;\n }\n\n // Clicked on a reference\n var reference = closestCallback(target, function (el) {\n return el._tippy && el._tippy.reference === el;\n });\n if (reference) {\n var tip = reference._tippy;\n var isClickTrigger = includes(tip.props.trigger, 'click');\n\n if (isUsingTouch || isClickTrigger) {\n return hideAllPoppers(tip);\n }\n\n if (tip.props.hideOnClick !== true || isClickTrigger) {\n return;\n }\n\n tip.clearDelayTimeouts();\n }\n\n hideAllPoppers();\n}\n\nfunction onWindowBlur() {\n var _document = document,\n activeElement = _document.activeElement;\n\n if (activeElement && activeElement.blur && activeElement._tippy) {\n activeElement.blur();\n }\n}\n\nfunction onWindowResize() {\n arrayFrom(document.querySelectorAll(Selectors.POPPER)).forEach(function (popper) {\n var tippyInstance = popper._tippy;\n if (!tippyInstance.props.livePlacement) {\n tippyInstance.popperInstance.scheduleUpdate();\n }\n });\n}\n\n/**\n * Adds the needed global event listeners\n */\nfunction bindGlobalEventListeners() {\n document.addEventListener('click', onDocumentClick, true);\n document.addEventListener('touchstart', onDocumentTouch, PASSIVE);\n window.addEventListener('blur', onWindowBlur);\n window.addEventListener('resize', onWindowResize);\n\n if (!supportsTouch && (navigator.maxTouchPoints || navigator.msMaxTouchPoints)) {\n document.addEventListener('pointerdown', onDocumentTouch);\n }\n}\n\nvar keys = Object.keys(Defaults);\n\n/**\n * Determines if an element can receive focus\n * @param {Element} el\n * @return {Boolean}\n */\nfunction canReceiveFocus(el) {\n return el instanceof Element ? matches.call(el, 'a[href],area[href],button,details,input,textarea,select,iframe,[tabindex]') && !el.hasAttribute('disabled') : true;\n}\n\n/**\n * Returns an object of optional props from data-tippy-* attributes\n * @param {Element} reference\n * @return {Object}\n */\nfunction getDataAttributeOptions(reference) {\n return keys.reduce(function (acc, key) {\n var valueAsString = (reference.getAttribute('data-tippy-' + key) || '').trim();\n\n if (!valueAsString) {\n return acc;\n }\n\n if (key === 'content') {\n acc[key] = valueAsString;\n } else if (valueAsString === 'true') {\n acc[key] = true;\n } else if (valueAsString === 'false') {\n acc[key] = false;\n } else if (isNumeric(valueAsString)) {\n acc[key] = Number(valueAsString);\n } else if (valueAsString[0] === '[' || valueAsString[0] === '{') {\n acc[key] = JSON.parse(valueAsString);\n } else {\n acc[key] = valueAsString;\n }\n\n return acc;\n }, {});\n}\n\n/**\n * Polyfills the virtual reference (plain object) with Element.prototype props\n * Mutating because DOM elements are mutated, adds `_tippy` property\n * @param {Object} virtualReference\n * @return {Object}\n */\nfunction polyfillElementPrototypeProperties(virtualReference) {\n var polyfills = {\n isVirtual: true,\n attributes: virtualReference.attributes || {},\n setAttribute: function setAttribute(key, value) {\n virtualReference.attributes[key] = value;\n },\n getAttribute: function getAttribute(key) {\n return virtualReference.attributes[key];\n },\n removeAttribute: function removeAttribute(key) {\n delete virtualReference.attributes[key];\n },\n hasAttribute: function hasAttribute(key) {\n return key in virtualReference.attributes;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n\n classList: {\n classNames: {},\n add: function add(key) {\n virtualReference.classList.classNames[key] = true;\n },\n remove: function remove(key) {\n delete virtualReference.classList.classNames[key];\n },\n contains: function contains(key) {\n return key in virtualReference.classList.classNames;\n }\n }\n };\n\n for (var key in polyfills) {\n virtualReference[key] = polyfills[key];\n }\n}\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Evaluates the props object\n * @param {Element} reference\n * @param {Object} props\n * @return {Object}\n */\nfunction evaluateProps(reference, props) {\n var out = _extends({}, props, props.performance ? {} : getDataAttributeOptions(reference));\n\n if (out.arrow) {\n out.animateFill = false;\n }\n\n if (typeof out.appendTo === 'function') {\n out.appendTo = props.appendTo(reference);\n }\n\n if (typeof out.content === 'function') {\n out.content = props.content(reference);\n }\n\n return out;\n}\n\n/**\n * Validates an object of options with the valid default props object\n * @param {Object} options\n * @param {Object} defaults\n */\nfunction validateOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var defaults$$1 = arguments[1];\n\n Object.keys(options).forEach(function (option) {\n if (!hasOwnProperty(defaults$$1, option)) {\n throw new Error('[tippy]: `' + option + '` is not a valid option');\n }\n });\n}\n\n// =============================================================================\n// DEPRECATED\n// All of this code (for the `arrowTransform` option) will be removed in v4\n// =============================================================================\nvar TRANSFORM_NUMBER_RE = {\n translate: /translateX?Y?\\(([^)]+)\\)/,\n scale: /scaleX?Y?\\(([^)]+)\\)/\n\n /**\n * Transforms the x/y axis based on the placement\n */\n};function transformAxisBasedOnPlacement(axis, isVertical) {\n return (isVertical ? axis : {\n X: 'Y',\n Y: 'X'\n }[axis]) || '';\n}\n\n/**\n * Transforms the scale/translate numbers based on the placement\n */\nfunction transformNumbersBasedOnPlacement(type, numbers, isVertical, isReverse) {\n /**\n * Avoid destructuring because a large boilerplate function is generated\n * by Babel\n */\n var a = numbers[0];\n var b = numbers[1];\n\n if (!a && !b) {\n return '';\n }\n\n var transforms = {\n scale: function () {\n if (!b) {\n return '' + a;\n } else {\n return isVertical ? a + ', ' + b : b + ', ' + a;\n }\n }(),\n translate: function () {\n if (!b) {\n return isReverse ? -a + 'px' : a + 'px';\n } else {\n if (isVertical) {\n return isReverse ? a + 'px, ' + -b + 'px' : a + 'px, ' + b + 'px';\n } else {\n return isReverse ? -b + 'px, ' + a + 'px' : b + 'px, ' + a + 'px';\n }\n }\n }()\n };\n\n return transforms[type];\n}\n\n/**\n * Returns the axis for a CSS function (translate or scale)\n */\nfunction getTransformAxis(str, cssFunction) {\n var match = str.match(new RegExp(cssFunction + '([XY])'));\n return match ? match[1] : '';\n}\n\n/**\n * Returns the numbers given to the CSS function\n */\nfunction getTransformNumbers(str, regex) {\n var match = str.match(regex);\n return match ? match[1].split(',').map(function (n) {\n return parseFloat(n, 10);\n }) : [];\n}\n\n/**\n * Computes the arrow's transform so that it is correct for any placement\n */\nfunction computeArrowTransform(arrow, arrowTransform) {\n var placement = getPopperPlacement(closest(arrow, Selectors.POPPER));\n var isVertical = includes(['top', 'bottom'], placement);\n var isReverse = includes(['right', 'bottom'], placement);\n\n var matches$$1 = {\n translate: {\n axis: getTransformAxis(arrowTransform, 'translate'),\n numbers: getTransformNumbers(arrowTransform, TRANSFORM_NUMBER_RE.translate)\n },\n scale: {\n axis: getTransformAxis(arrowTransform, 'scale'),\n numbers: getTransformNumbers(arrowTransform, TRANSFORM_NUMBER_RE.scale)\n }\n };\n\n var computedTransform = arrowTransform.replace(TRANSFORM_NUMBER_RE.translate, 'translate' + transformAxisBasedOnPlacement(matches$$1.translate.axis, isVertical) + '(' + transformNumbersBasedOnPlacement('translate', matches$$1.translate.numbers, isVertical, isReverse) + ')').replace(TRANSFORM_NUMBER_RE.scale, 'scale' + transformAxisBasedOnPlacement(matches$$1.scale.axis, isVertical) + '(' + transformNumbersBasedOnPlacement('scale', matches$$1.scale.numbers, isVertical, isReverse) + ')');\n\n arrow.style[typeof document.body.style.transform !== 'undefined' ? 'transform' : 'webkitTransform'] = computedTransform;\n}\n\nvar idCounter = 1;\n\n/**\n * Creates and returns a Tippy object. We're using a closure pattern instead of\n * a class so that the exposed object API is clean without private members\n * prefixed with `_`.\n * @param {Element} reference\n * @param {Object} collectionProps\n * @return {Object} instance\n */\nfunction createTippy(reference, collectionProps) {\n var props = evaluateProps(reference, collectionProps);\n\n // If the reference shouldn't have multiple tippys, return null early\n if (!props.multiple && reference._tippy) {\n return null;\n }\n\n /* ======================= 🔒 Private members 🔒 ======================= */\n // The popper element's mutation observer\n var popperMutationObserver = null;\n\n // The last trigger event object that caused the tippy to show\n var lastTriggerEvent = {};\n\n // The last mousemove event object created by the document mousemove event\n var lastMouseMoveEvent = null;\n\n // Timeout created by the show delay\n var showTimeoutId = 0;\n\n // Timeout created by the hide delay\n var hideTimeoutId = 0;\n\n // Flag to determine if the tippy is preparing to show due to the show timeout\n var isPreparingToShow = false;\n\n // The current `transitionend` callback reference\n var transitionEndListener = function transitionEndListener() {};\n\n // Array of event listeners currently attached to the reference element\n var listeners = [];\n\n // Flag to determine if the reference was recently programmatically focused\n var referenceJustProgrammaticallyFocused = false;\n\n // Private onMouseMove handler reference, debounced or not\n var debouncedOnMouseMove = props.interactiveDebounce > 0 ? debounce(onMouseMove, props.interactiveDebounce) : onMouseMove;\n\n /* ======================= 🔑 Public members 🔑 ======================= */\n // id used for the `aria-describedby` / `aria-labelledby` attribute\n var id = idCounter++;\n\n // Popper element reference\n var popper = createPopperElement(id, props);\n\n // Prevent a tippy with a delay from hiding if the cursor left then returned\n // before it started hiding\n popper.addEventListener('mouseenter', function (event) {\n if (tip.props.interactive && tip.state.isVisible && lastTriggerEvent.type === 'mouseenter') {\n prepareShow(event);\n }\n });\n popper.addEventListener('mouseleave', function (event) {\n if (tip.props.interactive && lastTriggerEvent.type === 'mouseenter' && tip.props.interactiveDebounce === 0 && isCursorOutsideInteractiveBorder(getPopperPlacement(popper), popper.getBoundingClientRect(), event, tip.props)) {\n prepareHide();\n }\n });\n\n // Popper element children: { arrow, backdrop, content, tooltip }\n var popperChildren = getChildren(popper);\n\n // The state of the tippy\n var state = {\n // If the tippy is currently enabled\n isEnabled: true,\n // show() invoked, not currently transitioning out\n isVisible: false,\n // If the tippy has been destroyed\n isDestroyed: false,\n // If the tippy is on the DOM (transitioning out or in)\n isMounted: false,\n // show() transition finished\n isShown: false\n\n // Popper.js instance for the tippy is lazily created\n };var popperInstance = null;\n\n // 🌟 tippy instance\n var tip = {\n // properties\n id: id,\n reference: reference,\n popper: popper,\n popperChildren: popperChildren,\n popperInstance: popperInstance,\n props: props,\n state: state,\n // methods\n clearDelayTimeouts: clearDelayTimeouts,\n set: set$$1,\n setContent: setContent$$1,\n show: show,\n hide: hide,\n enable: enable,\n disable: disable,\n destroy: destroy\n };\n\n addTriggersToReference();\n\n reference.addEventListener('click', onReferenceClick);\n\n if (!props.lazy) {\n tip.popperInstance = createPopperInstance();\n tip.popperInstance.disableEventListeners();\n }\n\n if (props.showOnInit) {\n prepareShow();\n }\n\n // Ensure the reference element can receive focus (and is not a delegate)\n if (props.a11y && !props.target && !canReceiveFocus(reference)) {\n reference.setAttribute('tabindex', '0');\n }\n\n // Install shortcuts\n reference._tippy = tip;\n popper._tippy = tip;\n\n return tip;\n\n /* ======================= 🔒 Private methods 🔒 ======================= */\n /**\n * If the reference was clicked, it also receives focus\n */\n function onReferenceClick() {\n defer(function () {\n referenceJustProgrammaticallyFocused = false;\n });\n }\n\n /**\n * Ensure the popper's position stays correct if its dimensions change. Use\n * update() over .scheduleUpdate() so there is no 1 frame flash due to\n * async update\n */\n function addMutationObserver() {\n popperMutationObserver = new MutationObserver(function () {\n tip.popperInstance.update();\n });\n popperMutationObserver.observe(popper, {\n childList: true,\n subtree: true,\n characterData: true\n });\n }\n\n /**\n * Positions the virtual reference near the mouse cursor\n */\n function positionVirtualReferenceNearCursor(event) {\n var _lastMouseMoveEvent = lastMouseMoveEvent = event,\n clientX = _lastMouseMoveEvent.clientX,\n clientY = _lastMouseMoveEvent.clientY;\n\n if (!tip.popperInstance) {\n return;\n }\n\n // Ensure virtual reference is padded by 5px to prevent tooltip from\n // overflowing. Maybe Popper.js issue?\n var placement = getPopperPlacement(tip.popper);\n var padding = tip.popperChildren.arrow ? 20 : 5;\n var isVerticalPlacement = includes(['top', 'bottom'], placement);\n var isHorizontalPlacement = includes(['left', 'right'], placement);\n\n // Top / left boundary\n var x = isVerticalPlacement ? Math.max(padding, clientX) : clientX;\n var y = isHorizontalPlacement ? Math.max(padding, clientY) : clientY;\n\n // Bottom / right boundary\n if (isVerticalPlacement && x > padding) {\n x = Math.min(clientX, window.innerWidth - padding);\n }\n if (isHorizontalPlacement && y > padding) {\n y = Math.min(clientY, window.innerHeight - padding);\n }\n\n var rect = tip.reference.getBoundingClientRect();\n var followCursor = tip.props.followCursor;\n\n var isHorizontal = followCursor === 'horizontal';\n var isVertical = followCursor === 'vertical';\n\n tip.popperInstance.reference = {\n getBoundingClientRect: function getBoundingClientRect() {\n return {\n width: 0,\n height: 0,\n top: isHorizontal ? rect.top : y,\n bottom: isHorizontal ? rect.bottom : y,\n left: isVertical ? rect.left : x,\n right: isVertical ? rect.right : x\n };\n },\n clientWidth: 0,\n clientHeight: 0\n };\n\n tip.popperInstance.scheduleUpdate();\n\n if (followCursor === 'initial' && tip.state.isVisible) {\n removeFollowCursorListener();\n }\n }\n\n /**\n * Creates the tippy instance for a delegate when it's been triggered\n */\n function createDelegateChildTippy(event) {\n var targetEl = closest(event.target, tip.props.target);\n if (targetEl && !targetEl._tippy) {\n createTippy(targetEl, _extends({}, tip.props, {\n target: '',\n showOnInit: true\n }));\n prepareShow(event);\n }\n }\n\n /**\n * Setup before show() is invoked (delays, etc.)\n */\n function prepareShow(event) {\n clearDelayTimeouts();\n\n if (tip.state.isVisible) {\n return;\n }\n\n // Is a delegate, create an instance for the child target\n if (tip.props.target) {\n return createDelegateChildTippy(event);\n }\n\n isPreparingToShow = true;\n\n if (tip.props.wait) {\n return tip.props.wait(tip, event);\n }\n\n // If the tooltip has a delay, we need to be listening to the mousemove as\n // soon as the trigger event is fired, so that it's in the correct position\n // upon mount.\n // Edge case: if the tooltip is still mounted, but then prepareShow() is\n // called, it causes a jump.\n if (hasFollowCursorBehavior() && !tip.state.isMounted) {\n document.addEventListener('mousemove', positionVirtualReferenceNearCursor);\n }\n\n var delay = getValue(tip.props.delay, 0, Defaults.delay);\n\n if (delay) {\n showTimeoutId = setTimeout(function () {\n show();\n }, delay);\n } else {\n show();\n }\n }\n\n /**\n * Setup before hide() is invoked (delays, etc.)\n */\n function prepareHide() {\n clearDelayTimeouts();\n\n if (!tip.state.isVisible) {\n return removeFollowCursorListener();\n }\n\n isPreparingToShow = false;\n\n var delay = getValue(tip.props.delay, 1, Defaults.delay);\n\n if (delay) {\n hideTimeoutId = setTimeout(function () {\n if (tip.state.isVisible) {\n hide();\n }\n }, delay);\n } else {\n hide();\n }\n }\n\n /**\n * Removes the follow cursor listener\n */\n function removeFollowCursorListener() {\n document.removeEventListener('mousemove', positionVirtualReferenceNearCursor);\n lastMouseMoveEvent = null;\n }\n\n /**\n * Cleans up old listeners\n */\n function cleanupOldMouseListeners() {\n document.body.removeEventListener('mouseleave', prepareHide);\n document.removeEventListener('mousemove', debouncedOnMouseMove);\n }\n\n /**\n * Event listener invoked upon trigger\n */\n function onTrigger(event) {\n if (!tip.state.isEnabled || isEventListenerStopped(event)) {\n return;\n }\n\n if (!tip.state.isVisible) {\n lastTriggerEvent = event;\n }\n\n // Toggle show/hide when clicking click-triggered tooltips\n if (event.type === 'click' && tip.props.hideOnClick !== false && tip.state.isVisible) {\n prepareHide();\n } else {\n prepareShow(event);\n }\n }\n\n /**\n * Event listener used for interactive tooltips to detect when they should\n * hide\n */\n function onMouseMove(event) {\n var referenceTheCursorIsOver = closestCallback(event.target, function (el) {\n return el._tippy;\n });\n\n var isCursorOverPopper = closest(event.target, Selectors.POPPER) === tip.popper;\n var isCursorOverReference = referenceTheCursorIsOver === tip.reference;\n\n if (isCursorOverPopper || isCursorOverReference) {\n return;\n }\n\n if (isCursorOutsideInteractiveBorder(getPopperPlacement(tip.popper), tip.popper.getBoundingClientRect(), event, tip.props)) {\n cleanupOldMouseListeners();\n prepareHide();\n }\n }\n\n /**\n * Event listener invoked upon mouseleave\n */\n function onMouseLeave(event) {\n if (isEventListenerStopped(event)) {\n return;\n }\n\n if (tip.props.interactive) {\n document.body.addEventListener('mouseleave', prepareHide);\n document.addEventListener('mousemove', debouncedOnMouseMove);\n return;\n }\n\n prepareHide();\n }\n\n /**\n * Event listener invoked upon blur\n */\n function onBlur(event) {\n if (event.target !== tip.reference) {\n return;\n }\n\n if (tip.props.interactive) {\n if (!event.relatedTarget) {\n return;\n }\n if (closest(event.relatedTarget, Selectors.POPPER)) {\n return;\n }\n }\n\n prepareHide();\n }\n\n /**\n * Event listener invoked when a child target is triggered\n */\n function onDelegateShow(event) {\n if (closest(event.target, tip.props.target)) {\n prepareShow(event);\n }\n }\n\n /**\n * Event listener invoked when a child target should hide\n */\n function onDelegateHide(event) {\n if (closest(event.target, tip.props.target)) {\n prepareHide();\n }\n }\n\n /**\n * Determines if an event listener should stop further execution due to the\n * `touchHold` option\n */\n function isEventListenerStopped(event) {\n var isTouchEvent = includes(event.type, 'touch');\n var caseA = supportsTouch && isUsingTouch && tip.props.touchHold && !isTouchEvent;\n var caseB = isUsingTouch && !tip.props.touchHold && isTouchEvent;\n return caseA || caseB;\n }\n\n /**\n * Creates the popper instance for the tip\n */\n function createPopperInstance() {\n var popperOptions = tip.props.popperOptions;\n var _tip$popperChildren = tip.popperChildren,\n tooltip = _tip$popperChildren.tooltip,\n arrow = _tip$popperChildren.arrow;\n\n\n return new Popper(tip.reference, tip.popper, _extends({\n placement: tip.props.placement\n }, popperOptions, {\n modifiers: _extends({}, popperOptions ? popperOptions.modifiers : {}, {\n preventOverflow: _extends({\n boundariesElement: tip.props.boundary\n }, getModifier(popperOptions, 'preventOverflow')),\n arrow: _extends({\n element: arrow,\n enabled: !!arrow\n }, getModifier(popperOptions, 'arrow')),\n flip: _extends({\n enabled: tip.props.flip,\n padding: tip.props.distance + 5 /* 5px from viewport boundary */\n , behavior: tip.props.flipBehavior\n }, getModifier(popperOptions, 'flip')),\n offset: _extends({\n offset: tip.props.offset\n }, getModifier(popperOptions, 'offset'))\n }),\n onCreate: function onCreate() {\n tooltip.style[getPopperPlacement(tip.popper)] = getOffsetDistanceInPx(tip.props.distance, Defaults.distance);\n\n if (arrow && tip.props.arrowTransform) {\n computeArrowTransform(arrow, tip.props.arrowTransform);\n }\n },\n onUpdate: function onUpdate() {\n var styles = tooltip.style;\n styles.top = '';\n styles.bottom = '';\n styles.left = '';\n styles.right = '';\n styles[getPopperPlacement(tip.popper)] = getOffsetDistanceInPx(tip.props.distance, Defaults.distance);\n\n if (arrow && tip.props.arrowTransform) {\n computeArrowTransform(arrow, tip.props.arrowTransform);\n }\n }\n }));\n }\n\n /**\n * Mounts the tooltip to the DOM, callback to show tooltip is run **after**\n * popper's position has updated\n */\n function mount(callback) {\n if (!tip.popperInstance) {\n tip.popperInstance = createPopperInstance();\n addMutationObserver();\n if (!tip.props.livePlacement || hasFollowCursorBehavior()) {\n tip.popperInstance.disableEventListeners();\n }\n } else {\n if (!hasFollowCursorBehavior()) {\n tip.popperInstance.scheduleUpdate();\n if (tip.props.livePlacement) {\n tip.popperInstance.enableEventListeners();\n }\n }\n }\n\n // If the instance previously had followCursor behavior, it will be\n // positioned incorrectly if triggered by `focus` afterwards.\n // Update the reference back to the real DOM element\n tip.popperInstance.reference = tip.reference;\n var arrow = tip.popperChildren.arrow;\n\n\n if (hasFollowCursorBehavior()) {\n if (arrow) {\n arrow.style.margin = '0';\n }\n var delay = getValue(tip.props.delay, 0, Defaults.delay);\n if (lastTriggerEvent.type) {\n positionVirtualReferenceNearCursor(delay && lastMouseMoveEvent ? lastMouseMoveEvent : lastTriggerEvent);\n }\n } else if (arrow) {\n arrow.style.margin = '';\n }\n\n afterPopperPositionUpdates(tip.popperInstance, callback);\n\n if (!tip.props.appendTo.contains(tip.popper)) {\n tip.props.appendTo.appendChild(tip.popper);\n tip.props.onMount(tip);\n tip.state.isMounted = true;\n }\n }\n\n /**\n * Determines if the instance is in `followCursor` mode\n */\n function hasFollowCursorBehavior() {\n return tip.props.followCursor && !isUsingTouch && lastTriggerEvent.type !== 'focus';\n }\n\n /**\n * Updates the tooltip's position on each animation frame + timeout\n */\n function makeSticky() {\n applyTransitionDuration([tip.popper], isIE ? 0 : tip.props.updateDuration);\n\n var updatePosition = function updatePosition() {\n if (tip.popperInstance) {\n tip.popperInstance.scheduleUpdate();\n }\n\n if (tip.state.isMounted) {\n requestAnimationFrame(updatePosition);\n } else {\n applyTransitionDuration([tip.popper], 0);\n }\n };\n\n updatePosition();\n }\n\n /**\n * Invokes a callback once the tooltip has fully transitioned out\n */\n function onTransitionedOut(duration, callback) {\n onTransitionEnd(duration, function () {\n if (!tip.state.isVisible && tip.props.appendTo.contains(tip.popper)) {\n callback();\n }\n });\n }\n\n /**\n * Invokes a callback once the tooltip has fully transitioned in\n */\n function onTransitionedIn(duration, callback) {\n onTransitionEnd(duration, callback);\n }\n\n /**\n * Invokes a callback once the tooltip's CSS transition ends\n */\n function onTransitionEnd(duration, callback) {\n // Make callback synchronous if duration is 0\n if (duration === 0) {\n return callback();\n }\n\n var tooltip = tip.popperChildren.tooltip;\n\n\n var listener = function listener(e) {\n if (e.target === tooltip) {\n toggleTransitionEndListener(tooltip, 'remove', listener);\n callback();\n }\n };\n\n toggleTransitionEndListener(tooltip, 'remove', transitionEndListener);\n toggleTransitionEndListener(tooltip, 'add', listener);\n\n transitionEndListener = listener;\n }\n\n /**\n * Adds an event listener to the reference and stores it in `listeners`\n */\n function on(eventType, handler) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n tip.reference.addEventListener(eventType, handler, options);\n listeners.push({ eventType: eventType, handler: handler, options: options });\n }\n\n /**\n * Adds event listeners to the reference based on the `trigger` prop\n */\n function addTriggersToReference() {\n if (tip.props.touchHold && !tip.props.target) {\n on('touchstart', onTrigger, PASSIVE);\n on('touchend', onMouseLeave, PASSIVE);\n }\n\n tip.props.trigger.trim().split(' ').forEach(function (eventType) {\n if (eventType === 'manual') {\n return;\n }\n\n if (!tip.props.target) {\n on(eventType, onTrigger);\n switch (eventType) {\n case 'mouseenter':\n on('mouseleave', onMouseLeave);\n break;\n case 'focus':\n on(isIE ? 'focusout' : 'blur', onBlur);\n break;\n }\n } else {\n switch (eventType) {\n case 'mouseenter':\n on('mouseover', onDelegateShow);\n on('mouseout', onDelegateHide);\n break;\n case 'focus':\n on('focusin', onDelegateShow);\n on('focusout', onDelegateHide);\n break;\n case 'click':\n on(eventType, onDelegateShow);\n break;\n }\n }\n });\n }\n\n /**\n * Removes event listeners from the reference\n */\n function removeTriggersFromReference() {\n listeners.forEach(function (_ref) {\n var eventType = _ref.eventType,\n handler = _ref.handler,\n options = _ref.options;\n\n tip.reference.removeEventListener(eventType, handler, options);\n });\n listeners = [];\n }\n\n /* ======================= 🔑 Public methods 🔑 ======================= */\n /**\n * Enables the instance to allow it to show or hide\n */\n function enable() {\n tip.state.isEnabled = true;\n }\n\n /**\n * Disables the instance to disallow it to show or hide\n */\n function disable() {\n tip.state.isEnabled = false;\n }\n\n /**\n * Clears pending timeouts related to the `delay` prop if any\n */\n function clearDelayTimeouts() {\n clearTimeout(showTimeoutId);\n clearTimeout(hideTimeoutId);\n }\n\n /**\n * Sets new props for the instance and redraws the tooltip\n */\n function set$$1() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n validateOptions(options, Defaults);\n\n var prevProps = tip.props;\n var nextProps = evaluateProps(tip.reference, _extends({}, tip.props, options, {\n performance: true\n }));\n nextProps.performance = hasOwnProperty(options, 'performance') ? options.performance : prevProps.performance;\n tip.props = nextProps;\n\n if (hasOwnProperty(options, 'trigger') || hasOwnProperty(options, 'touchHold')) {\n removeTriggersFromReference();\n addTriggersToReference();\n }\n\n if (hasOwnProperty(options, 'interactiveDebounce')) {\n cleanupOldMouseListeners();\n debouncedOnMouseMove = debounce(onMouseMove, options.interactiveDebounce);\n }\n\n updatePopperElement(tip.popper, prevProps, nextProps);\n tip.popperChildren = getChildren(tip.popper);\n\n if (tip.popperInstance && POPPER_INSTANCE_RELATED_PROPS.some(function (prop) {\n return hasOwnProperty(options, prop);\n })) {\n tip.popperInstance.destroy();\n tip.popperInstance = createPopperInstance();\n if (!tip.state.isVisible) {\n tip.popperInstance.disableEventListeners();\n }\n if (tip.props.followCursor && lastMouseMoveEvent) {\n positionVirtualReferenceNearCursor(lastMouseMoveEvent);\n }\n }\n }\n\n /**\n * Shortcut for .set({ content: newContent })\n */\n function setContent$$1(content) {\n set$$1({ content: content });\n }\n\n /**\n * Shows the tooltip\n */\n function show() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getValue(tip.props.duration, 0, Defaults.duration[0]);\n\n if (tip.state.isDestroyed || !tip.state.isEnabled || isUsingTouch && !tip.props.touch) {\n return;\n }\n\n // Destroy tooltip if the reference element is no longer on the DOM\n if (!tip.reference.isVirtual && !document.documentElement.contains(tip.reference)) {\n return destroy();\n }\n\n // Do not show tooltip if the reference element has a `disabled` attribute\n if (tip.reference.hasAttribute('disabled')) {\n return;\n }\n\n // If the reference was just programmatically focused for accessibility\n // reasons\n if (referenceJustProgrammaticallyFocused) {\n referenceJustProgrammaticallyFocused = false;\n return;\n }\n\n if (tip.props.onShow(tip) === false) {\n return;\n }\n\n tip.popper.style.visibility = 'visible';\n tip.state.isVisible = true;\n\n // Prevent a transition if the popper is at the opposite placement\n applyTransitionDuration([tip.popper, tip.popperChildren.tooltip, tip.popperChildren.backdrop], 0);\n\n mount(function () {\n if (!tip.state.isVisible) {\n return;\n }\n\n // Arrow will sometimes not be positioned correctly. Force another update\n if (!hasFollowCursorBehavior()) {\n tip.popperInstance.update();\n }\n\n applyTransitionDuration([tip.popperChildren.tooltip, tip.popperChildren.backdrop, tip.popperChildren.content], duration);\n if (tip.popperChildren.backdrop) {\n tip.popperChildren.content.style.transitionDelay = Math.round(duration / 6) + 'ms';\n }\n\n if (tip.props.interactive) {\n tip.reference.classList.add('tippy-active');\n }\n\n if (tip.props.sticky) {\n makeSticky();\n }\n\n setVisibilityState([tip.popperChildren.tooltip, tip.popperChildren.backdrop, tip.popperChildren.content], 'visible');\n\n onTransitionedIn(duration, function () {\n if (tip.props.updateDuration === 0) {\n tip.popperChildren.tooltip.classList.add('tippy-notransition');\n }\n\n if (tip.props.autoFocus && tip.props.interactive && includes(['focus', 'click'], lastTriggerEvent.type)) {\n focus(tip.popper);\n }\n\n if (tip.props.aria) {\n tip.reference.setAttribute('aria-' + tip.props.aria, tip.popper.id);\n }\n\n tip.props.onShown(tip);\n tip.state.isShown = true;\n });\n });\n }\n\n /**\n * Hides the tooltip\n */\n function hide() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getValue(tip.props.duration, 1, Defaults.duration[1]);\n\n if (tip.state.isDestroyed || !tip.state.isEnabled) {\n return;\n }\n\n if (tip.props.onHide(tip) === false) {\n return;\n }\n\n if (tip.props.updateDuration === 0) {\n tip.popperChildren.tooltip.classList.remove('tippy-notransition');\n }\n\n if (tip.props.interactive) {\n tip.reference.classList.remove('tippy-active');\n }\n\n tip.popper.style.visibility = 'hidden';\n tip.state.isVisible = false;\n tip.state.isShown = false;\n\n applyTransitionDuration([tip.popperChildren.tooltip, tip.popperChildren.backdrop, tip.popperChildren.content], duration);\n\n setVisibilityState([tip.popperChildren.tooltip, tip.popperChildren.backdrop, tip.popperChildren.content], 'hidden');\n\n if (tip.props.autoFocus && tip.props.interactive && !referenceJustProgrammaticallyFocused && includes(['focus', 'click'], lastTriggerEvent.type)) {\n if (lastTriggerEvent.type === 'focus') {\n referenceJustProgrammaticallyFocused = true;\n }\n focus(tip.reference);\n }\n\n onTransitionedOut(duration, function () {\n if (!isPreparingToShow) {\n removeFollowCursorListener();\n }\n\n if (tip.props.aria) {\n tip.reference.removeAttribute('aria-' + tip.props.aria);\n }\n\n tip.popperInstance.disableEventListeners();\n\n tip.props.appendTo.removeChild(tip.popper);\n tip.state.isMounted = false;\n\n tip.props.onHidden(tip);\n });\n }\n\n /**\n * Destroys the tooltip\n */\n function destroy(destroyTargetInstances) {\n if (tip.state.isDestroyed) {\n return;\n }\n\n // If the popper is currently mounted to the DOM, we want to ensure it gets\n // hidden and unmounted instantly upon destruction\n if (tip.state.isMounted) {\n hide(0);\n }\n\n removeTriggersFromReference();\n\n tip.reference.removeEventListener('click', onReferenceClick);\n\n delete tip.reference._tippy;\n\n if (tip.props.target && destroyTargetInstances) {\n arrayFrom(tip.reference.querySelectorAll(tip.props.target)).forEach(function (child) {\n return child._tippy && child._tippy.destroy();\n });\n }\n\n if (tip.popperInstance) {\n tip.popperInstance.destroy();\n }\n\n if (popperMutationObserver) {\n popperMutationObserver.disconnect();\n }\n\n tip.state.isDestroyed = true;\n }\n}\n\nvar globalEventListenersBound = false;\n\n/**\n * Exported module\n * @param {String|Element|Element[]|NodeList|Object} targets\n * @param {Object} options\n * @param {Boolean} one\n * @return {Object}\n */\nfunction tippy$1(targets, options, one) {\n validateOptions(options, Defaults);\n\n if (!globalEventListenersBound) {\n bindGlobalEventListeners();\n globalEventListenersBound = true;\n }\n\n var props = _extends({}, Defaults, options);\n\n /**\n * If they are specifying a virtual positioning reference, we need to polyfill\n * some native DOM props\n */\n if (isPlainObject(targets)) {\n polyfillElementPrototypeProperties(targets);\n }\n\n var references = getArrayOfElements(targets);\n var firstReference = references[0];\n\n var instances = (one && firstReference ? [firstReference] : references).reduce(function (acc, reference) {\n var tip = reference && createTippy(reference, props);\n if (tip) {\n acc.push(tip);\n }\n return acc;\n }, []);\n\n var collection = {\n targets: targets,\n props: props,\n instances: instances,\n destroyAll: function destroyAll() {\n collection.instances.forEach(function (instance) {\n instance.destroy();\n });\n collection.instances = [];\n }\n };\n\n return collection;\n}\n\n/**\n * Static props\n */\ntippy$1.version = version;\ntippy$1.defaults = Defaults;\n\n/**\n * Static methods\n */\ntippy$1.one = function (targets, options) {\n return tippy$1(targets, options, true).instances[0];\n};\ntippy$1.setDefaults = function (partialDefaults) {\n Object.keys(partialDefaults).forEach(function (key) {\n Defaults[key] = partialDefaults[key];\n });\n};\ntippy$1.disableAnimations = function () {\n tippy$1.setDefaults({\n duration: 0,\n updateDuration: 0,\n animateFill: false\n });\n};\ntippy$1.hideAllPoppers = hideAllPoppers;\n// noop: deprecated static method as capture phase is now default\ntippy$1.useCapture = function () {};\n\n/**\n * Auto-init tooltips for elements with a `data-tippy=\"...\"` attribute\n */\nvar autoInit = function autoInit() {\n arrayFrom(document.querySelectorAll('[data-tippy]')).forEach(function (el) {\n var content = el.getAttribute('data-tippy');\n if (content) {\n tippy$1(el, { content: content });\n }\n });\n};\nif (isBrowser) {\n setTimeout(autoInit);\n}\n\nexport default tippy$1;\n//# sourceMappingURL=tippy.standalone.js.map\n","export const missingTippy = 'Using the attachment feature of Shepherd requires the Tippy.js library';\n","import isObjectLike from 'lodash-es/isObjectLike';\nimport isString from 'lodash-es/isString';\nimport isUndefined from 'lodash-es/isUndefined';\nimport zipObject from 'lodash-es/zipObject';\nimport tippy from 'tippy.js';\nimport { missingTippy } from './utils/error-messages';\n\nconst centeredStylePopperModifier = {\n computeStyle: {\n enabled: true,\n fn(data) {\n data.styles = Object.assign({}, data.styles, {\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)'\n });\n\n return data;\n }\n }\n};\n\n// Used to compose settings for tippyOptions.popperOptions (https://atomiks.github.io/tippyjs/#popper-options-option)\nconst defaultPopperOptions = {\n positionFixed: true\n};\n\n/**\n * TODO rewrite the way items are being added to use more performant documentFragment code\n * @param html\n * @return {HTMLElement} The element created from the passed HTML string\n */\nexport function createFromHTML(html) {\n const el = document.createElement('div');\n el.innerHTML = html;\n return el.children[0];\n}\n\n/**\n * Parse the position object or string to return the attachment and element to attach to\n * @param {Object|String} position Either a string or object denoting the selector and position for attachment\n * @return {Object} The object with `element` and `on` for the step\n * @private\n */\nexport function _parseAttachToOpts(opts) {\n if (isObjectLike(opts)) {\n if (opts.hasOwnProperty('element') && opts.hasOwnProperty('on')) {\n return opts;\n }\n return null;\n }\n\n const positionRe = /^(.+) ((auto|top|left|right|bottom)(-start|-end)?)$/;\n const matches = positionRe.exec(opts);\n\n if (!matches) {\n return null;\n }\n\n return {\n element: matches[1],\n on: matches[2]\n };\n}\n\n/**\n * @param obj\n * @param {Array} props\n * @return {*}\n */\nexport function parseShorthand(obj, props) {\n if (obj === null || isUndefined(obj)) {\n return obj;\n } else if (isObjectLike(obj)) {\n return obj;\n }\n\n const values = obj.split(' ');\n return zipObject(props, values);\n}\n\n/**\n * Determines options for the tooltip and initializes\n * `this.tooltip` as a Tippy.js instance.\n */\nexport function setupTooltip() {\n if (isUndefined(tippy)) {\n throw new Error(missingTippy);\n }\n\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n\n const attachToOpts = this.parseAttachTo();\n\n this.tooltip = _makeTippyInstance.call(this, attachToOpts);\n\n this.target = attachToOpts.element || document.body;\n\n this.el.classList.add('shepherd-element');\n}\n\n/**\n * Passes `options.attachTo` to `_parseAttachToOpts` to get the correct `attachTo` format\n * @returns {({} & {element, on}) | ({})}\n * `element` is a qualified HTML Element\n * `on` is a string position value\n */\nexport function parseAttachTo() {\n const options = _parseAttachToOpts(this.options.attachTo) || {};\n const returnOpts = Object.assign({}, options);\n\n if (isString(options.element)) {\n // Can't override the element in user opts reference because we can't\n // guarantee that the element will exist in the future.\n try {\n returnOpts.element = document.querySelector(options.element);\n } catch(e) {\n // TODO\n }\n if (!returnOpts.element) {\n console.error(`The element for this Shepherd step was not found ${options.element}`);\n }\n }\n\n return returnOpts;\n}\n\n/**\n * Generates a `Tippy` instance from a set of base `attachTo` options\n *\n * @return {tippy} The final tippy instance\n * @private\n */\nfunction _makeTippyInstance(attachToOptions) {\n if (!attachToOptions.element) {\n return _makeCenteredTippy.call(this);\n }\n\n const tippyOptions = _makeAttachedTippyOptions.call(this, attachToOptions);\n\n return tippy.one(attachToOptions.element, tippyOptions);\n}\n\n/**\n * Generates the hash of options that will be passed to `Tippy` instances\n * target an element in the DOM.\n *\n * @param {Object} attachToOptions The local `attachTo` options\n * @return {Object} The final tippy options object\n * @private\n */\nfunction _makeAttachedTippyOptions(attachToOptions) {\n const resultingTippyOptions = {\n content: this.el,\n placement: attachToOptions.on || 'right',\n ...this.options.tippyOptions\n };\n\n if (this.options.tippyOptions && this.options.tippyOptions.popperOptions) {\n Object.assign(defaultPopperOptions, this.options.tippyOptions.popperOptions);\n }\n\n resultingTippyOptions.popperOptions = defaultPopperOptions;\n\n return resultingTippyOptions;\n}\n\n/**\n * Generates a `Tippy` instance for a tooltip that doesn't have a\n * target element in the DOM -- and thus is positioned in the center\n * of the view\n *\n * @return {tippy} The final tippy instance\n * @private\n */\nfunction _makeCenteredTippy() {\n const tippyOptions = {\n content: this.el,\n placement: 'top',\n ...this.options.tippyOptions\n };\n\n tippyOptions.arrow = false;\n tippyOptions.popperOptions = tippyOptions.popperOptions || {};\n\n const finalPopperOptions = Object.assign(\n {},\n defaultPopperOptions,\n tippyOptions.popperOptions,\n {\n modifiers: Object.assign(\n centeredStylePopperModifier,\n tippyOptions.popperOptions.modifiers\n )\n }\n );\n\n tippyOptions.popperOptions = finalPopperOptions;\n\n return tippy.one(document.body, tippyOptions);\n}\n","/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n}\n\nexport default baseZipObject;\n","import assignValue from './_assignValue.js';\nimport baseZipObject from './_baseZipObject.js';\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n}\n\nexport default zipObject;\n","import { parseShorthand } from './utils.js';\nimport forOwn from 'lodash-es/forOwn';\nimport isString from 'lodash-es/isString';\nimport isUndefined from 'lodash-es/isUndefined';\n\n/**\n * Sets up the handler to determine if we should advance the tour\n * @private\n */\nfunction _setupAdvanceOnHandler(selector) {\n return (event) => {\n if (this.isOpen()) {\n const targetIsEl = this.el && event.target === this.el;\n const targetIsSelector = !isUndefined(selector) && event.target.matches(selector);\n\n if (targetIsSelector || targetIsEl) {\n this.tour.next();\n }\n }\n };\n}\n\n/**\n * Bind the event handler for advanceOn\n */\nexport function bindAdvance() {\n // An empty selector matches the step element\n const { event, selector } = parseShorthand(this.options.advanceOn, ['selector', 'event']);\n const handler = _setupAdvanceOnHandler.call(this, selector);\n\n // TODO: this should also bind/unbind on show/hide\n const el = document.querySelector(selector);\n if (!isUndefined(selector) && el) {\n el.addEventListener(event, handler);\n } else {\n document.body.addEventListener(event, handler, true);\n }\n this.on('destroy', () => {\n return document.body.removeEventListener(event, handler, true);\n });\n}\n\n/**\n * Bind events to the buttons for next, back, etc\n * @param {Object} cfg An object containing the config options for the button\n * @param {HTMLElement} el The element for the button\n */\nexport function bindButtonEvents(cfg, el) {\n cfg.events = cfg.events || {};\n if (!isUndefined(cfg.action)) {\n // Including both a click event and an action is not supported\n cfg.events.click = cfg.action;\n }\n\n forOwn(cfg.events, (handler, event) => {\n if (isString(handler)) {\n const page = handler;\n handler = () => this.tour.show(page);\n }\n el.dataset.buttonEvent = true;\n el.addEventListener(event, handler);\n\n // Cleanup event listeners on destroy\n this.on('destroy', () => {\n el.removeAttribute('data-button-event');\n el.removeEventListener(event, handler);\n });\n });\n}\n\n/**\n * Add a click listener to the cancel link that cancels the tour\n * @param {HTMLElement} link The cancel link element\n */\nexport function bindCancelLink(link) {\n link.addEventListener('click', (e) => {\n e.preventDefault();\n this.cancel();\n });\n}\n\n/**\n * Take an array of strings and look up methods by name, then bind them to `this`\n * @param {String[]} methods The names of methods to bind\n */\nexport function bindMethods(methods) {\n methods.map((method) => {\n this[method] = this[method].bind(this);\n });\n}\n","import forOwn from 'lodash-es/forOwn';\nimport isElement from 'lodash-es/isElement';\nimport isEmpty from 'lodash-es/isEmpty';\nimport isFunction from 'lodash-es/isFunction';\nimport isString from 'lodash-es/isString';\nimport isUndefined from 'lodash-es/isUndefined';\nimport { Evented } from './evented.js';\nimport 'element-matches';\nimport { bindAdvance, bindButtonEvents, bindCancelLink, bindMethods } from './bind.js';\nimport { createFromHTML, setupTooltip, parseAttachTo } from './utils.js';\n\n/**\n * Creates incremented ID for each newly created step\n *\n * @private\n * @return {Number} The unique id for the step\n */\nconst uniqueId = (function() {\n let id = 0;\n return function() {\n return ++id;\n };\n})();\n\n/**\n * Class representing steps to be added to a tour\n * @extends {Evented}\n */\nexport class Step extends Evented {\n /**\n * Create a step\n * @param {Tour} tour The tour for the step\n * @param {Object} options The options for the step\n * @param {Object|string} options.attachTo What element the step should be attached to on the page.\n * It can either be a string of the form \"element on\", or an object with those properties.\n * For example: \".some #element left\", or {element: '.some #element', on: 'left'}.\n * If you use the object syntax, element can also be a DOM element. If you don’t specify an attachTo the\n * element will appear in the middle of the screen.\n * @param {HTMLElement|string} options.attachTo.element\n * @param {string} options.attachTo.on\n * @param {Object|string} options.advanceOn An action on the page which should advance shepherd to the next step.\n * It can be of the form `\"selector event\"`, or an object with those properties.\n * For example: `\".some-element click\"`, or `{selector: '.some-element', event: 'click'}`.\n * It doesn’t have to be an event inside the tour, it can be any event fired on any element on the page.\n * You can also always manually advance the Tour by calling `myTour.next()`.\n * @param {function} options.beforeShowPromise A function that returns a promise.\n * When the promise resolves, the rest of the `show` code for the step will execute.\n * @param {Object[]} options.buttons An array of buttons to add to the step. These will be rendered in a\n * footer below the main body text.\n * @param {function} options.buttons.button.action A function executed when the button is clicked on\n * @param {string} options.buttons.button.classes Extra classes to apply to the `<a>`\n * @param {Object} options.buttons.button.events A hash of events to bind onto the button, for example\n * `{'mouseover': function(){}}`. Adding a `click` event to events when you already have an `action` specified is not supported.\n * You can use events to skip steps or navigate to specific steps, with something like:\n * ```js\n * events: {\n * click: function() {\n * return Shepherd.activeTour.show('some_step_name');\n * }\n * }\n * ```\n * @param {string} options.buttons.button.text The HTML text of the button\n * @param {string} options.classes A string of extra classes to add to the step's content element.\n * @param {string} options.highlightClass An extra class to apply to the `attachTo` element when it is\n * highlighted (that is, when its step is active). You can then target that selector in your CSS.\n * @param {Object} options.tippyOptions Extra [options to pass to tippy.js]{@link https://atomiks.github.io/tippyjs/#all-options}\n * @param {boolean} options.scrollTo Should the element be scrolled to when this step is shown?\n * @param {function} options.scrollToHandler A function that lets you override the default scrollTo behavior and\n * define a custom action to do the scrolling, and possibly other logic.\n * @param {boolean} options.showCancelLink Should a cancel “✕” be shown in the header of the step?\n * @param {function} options.showOn A function that, when it returns `true`, will show the step.\n * If it returns false, the step will be skipped.\n * @param {string} options.text The text in the body of the step. It can be one of four types:\n * ```\n * - HTML string\n * - Array of HTML strings\n * - `HTMLElement` object\n * - `Function` to be executed when the step is built. It must return one of the three options above.\n * ```\n * @param {string} options.title The step's title. It becomes an `h3` at the top of the step.\n * @param {Object} options.when You can define `show`, `hide`, etc events inside `when`. For example:\n * ```js\n * when: {\n * show: function() {\n * window.scrollTo(0, 0);\n * }\n * }\n * ```\n * @return {Step} The newly created Step instance\n */\n constructor(tour, options) {\n super(tour, options);\n this.tour = tour;\n bindMethods.call(this, [\n '_show',\n 'cancel',\n 'complete',\n 'destroy',\n 'hide',\n 'isOpen',\n 'scrollTo',\n 'setupElements',\n 'show'\n ]);\n this.setOptions(options);\n this.bindAdvance = bindAdvance.bind(this);\n this.bindButtonEvents = bindButtonEvents.bind(this);\n this.bindCancelLink = bindCancelLink.bind(this);\n this.setupTooltip = setupTooltip.bind(this);\n this.parseAttachTo = parseAttachTo.bind(this);\n\n return this;\n }\n\n /**\n * Adds buttons to the step as passed into options\n *\n * @private\n * @param {HTMLElement} content The element for the step, to append the footer with buttons to\n */\n _addButtons(content) {\n if (!isEmpty(this.options.buttons)) {\n const footer = document.createElement('footer');\n const buttons = createFromHTML('<ul class=\"shepherd-buttons\"></ul>');\n\n footer.classList.add('shepherd-footer');\n\n this.options.buttons.map((cfg) => {\n const button = createFromHTML(`<li><a class=\"shepherd-button ${cfg.classes || ''}\">${cfg.text}</a>`);\n buttons.appendChild(button);\n this.bindButtonEvents(cfg, button.querySelector('a'));\n });\n\n footer.appendChild(buttons);\n content.appendChild(footer);\n }\n }\n\n /**\n * Adds the \"x\" button to cancel the tour\n * @param {HTMLElement} element The step element\n * @param {HTMLElement} header The header element for the step\n * @private\n */\n _addCancelLink(element, header) {\n if (this.options.showCancelLink) {\n const link = createFromHTML('<a href class=\"shepherd-cancel-link\"></a>');\n header.appendChild(link);\n\n element.classList.add('shepherd-has-cancel-link');\n this.bindCancelLink(link);\n }\n }\n\n /**\n * Adds text passed in as options\n *\n * @private\n * @param {HTMLElement} content The content to append the text to\n */\n _addContent(content) {\n const text = createFromHTML('<div class=\"shepherd-text\"></div>');\n let paragraphs = this.options.text;\n\n if (isFunction(paragraphs)) {\n paragraphs = paragraphs.call(this, text);\n }\n\n if (paragraphs instanceof HTMLElement) {\n text.appendChild(paragraphs);\n } else {\n if (isString(paragraphs)) {\n paragraphs = [paragraphs];\n }\n\n paragraphs.map((paragraph) => {\n text.innerHTML += `<p>${paragraph}</p>`;\n });\n }\n\n content.appendChild(text);\n }\n\n /**\n * Creates Shepherd element for step based on options\n *\n * @private\n * @return {HTMLElement} The DOM element for the step tooltip\n */\n _createTooltipContent() {\n const content = document.createElement('div');\n const classes = this.options.classes || '';\n const element = createFromHTML(`<div class=\"${classes}\" data-shepherd-step-id=\"${this.id}\">`);\n const header = document.createElement('header');\n\n if (this.options.title) {\n const title = document.createElement('h3');\n title.classList.add('shepherd-title');\n title.innerHTML = `${this.options.title}`;\n header.appendChild(title);\n element.classList.add('shepherd-has-title');\n }\n\n content.classList.add('shepherd-content');\n header.classList.add('shepherd-header');\n element.appendChild(content);\n content.appendChild(header);\n\n if (!isUndefined(this.options.text)) {\n this._addContent(content);\n }\n\n this._addButtons(content);\n this._addCancelLink(element, header);\n\n return element;\n }\n\n /**\n * Returns the tour for the step\n * @return {Tour} The tour instance\n */\n getTour() {\n return this.tour;\n }\n\n /**\n * Cancel the tour\n * Triggers the `cancel` event\n */\n cancel() {\n this.tour.cancel();\n this.trigger('cancel');\n }\n\n /**\n * Complete the tour\n * Triggers the `complete` event\n */\n complete() {\n this.tour.complete();\n this.trigger('complete');\n }\n\n /**\n * Remove the step, delete the step's element, and destroy the tippy instance for the step\n * Triggers `destroy` event\n */\n destroy() {\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n\n if (isElement(this.el) && this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n this.el = null;\n }\n\n if (this.target) {\n this._updateStepTargetOnHide();\n }\n\n this.trigger('destroy');\n }\n\n /**\n * Hide the step and destroy the tippy instance\n */\n hide() {\n this.tour.modal.hide();\n\n this.trigger('before-hide');\n\n document.body.removeAttribute('data-shepherd-step');\n\n if (this.target) {\n this._updateStepTargetOnHide();\n }\n\n if (this.tooltip) {\n this.tooltip.hide();\n }\n\n this.trigger('hide');\n }\n\n /**\n * Check if the step is open and visible\n * @return {boolean} True if the step is open and visible\n */\n isOpen() {\n return Boolean(\n this.tooltip &&\n this.tooltip.state &&\n this.tooltip.state.isVisible\n );\n }\n\n /**\n * Create the element and set up the tippy instance\n */\n setupElements() {\n if (!isUndefined(this.el)) {\n this.destroy();\n }\n\n this.el = this._createTooltipContent();\n\n if (this.options.advanceOn) {\n this.bindAdvance();\n }\n\n this.setupTooltip();\n }\n\n /**\n * If a custom scrollToHandler is defined, call that, otherwise do the generic\n * scrollIntoView call.\n */\n scrollTo() {\n const { element } = this.parseAttachTo();\n\n if (isFunction(this.options.scrollToHandler)) {\n this.options.scrollToHandler(element);\n } else if (isElement(element)) {\n element.scrollIntoView();\n }\n }\n\n /**\n * Sets the options for the step, maps `when` to events, sets up buttons\n * @param {Object} options The options for the step\n */\n setOptions(options = {}) {\n this.options = options;\n const { when } = this.options;\n\n this.destroy();\n this.id = this.options.id || `step-${uniqueId()}`;\n\n forOwn(when, (handler, event) => {\n this.on(event, handler, this);\n });\n }\n\n /**\n * Wraps `_show` and ensures `beforeShowPromise` resolves before calling show\n * @return {*|Promise}\n */\n show() {\n if (isFunction(this.options.beforeShowPromise)) {\n const beforeShowPromise = this.options.beforeShowPromise();\n if (!isUndefined(beforeShowPromise)) {\n return beforeShowPromise.then(() => this._show());\n }\n }\n this._show();\n }\n\n /**\n * Triggers `before-show`, generates the tooltip DOM content,\n * sets up a tippy instance for the tooltip, then triggers `show`.\n * @private\n */\n _show() {\n this.tour.beforeShowStep(this);\n this.trigger('before-show');\n\n if (!this.el) {\n this.setupElements();\n }\n\n this.target.classList.add('shepherd-enabled', 'shepherd-target');\n\n document.body.setAttribute('data-shepherd-step', this.id);\n\n if (this.options.scrollTo) {\n setTimeout(() => {\n this.scrollTo();\n });\n }\n\n this.tooltip.show();\n this.trigger('show');\n }\n\n _updateStepTargetOnHide() {\n if (this.options.highlightClass) {\n this.target.classList.remove(this.options.highlightClass);\n }\n\n this.target.classList.remove('shepherd-enabled', 'shepherd-target');\n }\n}\n","export const isBrowser = typeof window !== 'undefined';\n\nconst nav = isBrowser ? navigator : {};\nconst win = isBrowser ? window : {};\n\nexport const isBrowserSupported = 'MutationObserver' in win;\nexport const isIE = /MSIE |Trident\\//.test(nav.userAgent);\nexport const isIOS = /iPhone|iPad|iPod/.test(nav.platform) && !win.MSStream;\nexport const supportsTouch = 'ontouchstart' in win;","const svgNS = 'http://www.w3.org/2000/svg';\n\nconst elementIds = {\n modalOverlay: 'shepherdModalOverlayContainer',\n modalOverlayMask: 'shepherdModalMask',\n modalOverlayMaskRect: 'shepherdModalMaskRect',\n modalOverlayMaskOpening: 'shepherdModalMaskOpening'\n};\n\nconst classNames = {\n isVisible: 'shepherd-modal-is-visible',\n modalTarget: 'shepherd-modal-target'\n};\n\n/**\n * <svg id=\"shepherdModalOverlayContainer\" xmlns=\"http://www.w3.org/2000/svg\">\n */\nfunction _createModalContainer() {\n const element = document.createElementNS(svgNS, 'svg');\n\n element.setAttributeNS(null, 'id', elementIds.modalOverlay);\n\n return element;\n}\n\n/**\n * <mask id=\"shepherdModalMask\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">\n */\nfunction _createMaskContainer() {\n const element = document.createElementNS(svgNS, 'mask');\n\n _setAttributes(element, {\n height: '100%',\n id: elementIds.modalOverlayMask,\n width: '100%',\n x: '0',\n y: '0'\n });\n\n return element;\n}\n\n/**\n * <rect id=\"modalOverlayMaskRect\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"#FFFFFF\"/>\n */\nfunction _createMaskRect() {\n const element = document.createElementNS(svgNS, 'rect');\n\n _setAttributes(element, {\n fill: '#FFFFFF',\n height: '100%',\n id: elementIds.modalOverlayMaskRect,\n width: '100%',\n x: '0',\n y: '0'\n });\n\n return element;\n}\n\n/**\n * <rect id=\"shepherdModalMaskOpening\" fill=\"#000000\"/>\n */\nfunction _createMaskOpening() {\n const element = document.createElementNS(svgNS, 'rect');\n\n _setAttributes(element, {\n fill: '#000000',\n id: elementIds.modalOverlayMaskOpening\n });\n\n return element;\n}\n\n/**\n * <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" mask=\"url(#shepherdModalMask)\"/>\n */\nfunction _createMaskConsumer() {\n const element = document.createElementNS(svgNS, 'rect');\n\n _setAttributes(element, {\n height: '100%',\n width: '100%',\n x: '0',\n y: '0'\n });\n element.setAttribute('mask', `url(#${elementIds.modalOverlayMask})`);\n\n return element;\n}\n\n/**\n * Generates an SVG with the following structure:\n * ```html\n * <svg id=\"shepherdModalOverlayContainer\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <mask id=\"shepherdModalMask\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" >\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"#FFFFFF\"/>\n <!-- This element will \"punch a hole\" through the mask by preventing it from rendering within the perimeter -->\n <rect id=\"shepherdModalMaskOpening\"/>\n </mask>\n </defs>\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" mask=\"url(#shepherdModalMask)\"/>\n </svg>\n * ```\n */\nfunction createModalOverlay() {\n const containerElement = _createModalContainer();\n const defsElement = document.createElementNS(svgNS, 'defs');\n const maskContainer = _createMaskContainer();\n const maskRect = _createMaskRect();\n const maskOpening = _createMaskOpening();\n const maskConsumer = _createMaskConsumer();\n\n maskContainer.appendChild(maskRect);\n maskContainer.appendChild(maskOpening);\n\n defsElement.appendChild(maskContainer);\n\n containerElement.appendChild(defsElement);\n containerElement.appendChild(maskConsumer);\n\n return containerElement;\n}\n\n/**\n * Uses the bounds of the element we want the opening overtop of to set the dimensions of the opening and position it\n * @param {HTMLElement} targetElement The element the opening will expose\n * @param {SVGElement} openingElement The svg mask for the opening\n */\nfunction positionModalOpening(targetElement, openingElement) {\n if (targetElement.getBoundingClientRect && openingElement instanceof SVGElement) {\n const { x, y, width, height } = targetElement.getBoundingClientRect();\n\n _setAttributes(openingElement, { x, y, width, height });\n }\n}\n\nfunction closeModalOpening(openingElement) {\n if (openingElement && openingElement instanceof SVGElement) {\n _setAttributes(openingElement, {\n height: '0',\n x: '0',\n y: '0',\n width: '0'\n });\n }\n}\n\nfunction getModalMaskOpening(modalElement) {\n return modalElement.querySelector(`#${elementIds.modalOverlayMaskOpening}`);\n}\n\nfunction preventModalBodyTouch(event) {\n event.preventDefault();\n}\n\nfunction preventModalOverlayTouch(event) {\n event.stopPropagation();\n}\n\n/**\n * Remove any leftover modal target classes and add the modal target class to the currentElement\n * @param {HTMLElement} currentElement The element for the current step\n */\nfunction toggleShepherdModalClass(currentElement) {\n const shepherdModal = document.querySelector(`${classNames.modalTarget}`);\n\n if (shepherdModal) {\n shepherdModal.classList.remove(classNames.modalTarget);\n }\n\n currentElement.classList.add(classNames.modalTarget);\n}\n\n/**\n * Set multiple attributes on an element, via a hash\n * @param {HTMLElement|SVGElement} el The element to set the attributes on\n * @param {Object} attrs A hash of key value pairs for attributes to set\n * @private\n */\nfunction _setAttributes(el, attrs) {\n Object.keys(attrs).forEach((key) => {\n el.setAttribute(key, attrs[key]);\n });\n}\n\nexport {\n createModalOverlay,\n positionModalOpening,\n preventModalBodyTouch,\n preventModalOverlayTouch,\n closeModalOpening,\n getModalMaskOpening,\n elementIds,\n classNames,\n toggleShepherdModalClass\n};\n","import { elementIds } from './modal';\nimport { preventModalBodyTouch, preventModalOverlayTouch } from './modal';\n\n/**\n * Helper method to check if element is hidden, since we cannot use :visible without jQuery\n * @param {HTMLElement} element The element to check for visibility\n * @returns {boolean} true if element is hidden\n * @private\n */\nfunction elementIsHidden(element) {\n return element.offsetWidth === 0 && element.offsetHeight === 0;\n}\n\n/**\n * Get the element from an option object\n *\n * @method getElementFromObject\n * @param Object attachTo\n * @returns {Element}\n * @private\n */\nfunction getElementFromObject(attachTo) {\n const op = attachTo.element;\n\n if (op instanceof HTMLElement) {\n return op;\n }\n\n return document.querySelector(op);\n}\n\n/**\n * Return the element for a step\n *\n * @method getElementForStep\n * @param step step the step to get an element for\n * @returns {Element} the element for this step\n * @private\n */\nfunction getElementForStep(step) {\n const { options: { attachTo } } = step;\n\n if (!attachTo) {\n return null;\n }\n\n const type = typeof attachTo;\n\n let element;\n\n if (type === 'string') {\n element = getElementFromString(attachTo);\n } else if (type === 'object') {\n element = getElementFromObject(attachTo);\n } else {\n /* istanbul ignore next: cannot test undefined attachTo, but it does work! */\n element = null;\n }\n return element;\n}\n\n/**\n * Get the element from an option string\n *\n * @method getElementFromString\n * @param element the string in the step configuration\n * @returns {Element} the element from the string\n * @private\n */\nfunction getElementFromString(element) {\n const [selector] = element.split(' ');\n\n return document.querySelector(selector);\n}\n\nfunction addStepEventListeners() {\n if (typeof this._onScreenChange === 'function') {\n window.removeEventListener('resize', this._onScreenChange, false);\n window.removeEventListener('scroll', this._onScreenChange, true);\n }\n\n window.addEventListener('resize', this._onScreenChange, false);\n window.addEventListener('scroll', this._onScreenChange, true);\n\n const overlay = document.querySelector(`#${elementIds.modalOverlay}`);\n // Prevents window from moving on touch.\n window.addEventListener('touchmove', preventModalBodyTouch, { passive: false });\n\n // Allows content to move on touch.\n if (overlay) {\n overlay.addEventListener('touchmove', preventModalOverlayTouch, false);\n }\n}\n\nexport {\n addStepEventListeners,\n elementIsHidden,\n getElementForStep\n};\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import baseDelay from './_baseDelay.js';\nimport baseRest from './_baseRest.js';\n\n/**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\nvar defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n});\n\nexport default defer;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\nfunction baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n}\n\nexport default baseDelay;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import {\n getModalMaskOpening,\n createModalOverlay,\n positionModalOpening,\n closeModalOpening,\n classNames as modalClassNames\n} from './utils/modal';\nimport { addStepEventListeners, getElementForStep } from './utils/dom';\nimport debounce from 'lodash-es/debounce';\nimport defer from 'lodash-es/defer';\n\nexport class Modal {\n constructor(options) {\n if (!this._modalOverlayElem) {\n this._modalOverlayElem = createModalOverlay();\n this._modalOverlayOpening = getModalMaskOpening(this._modalOverlayElem);\n\n // don't show yet -- each step will control that\n this.hide();\n\n document.body.appendChild(this._modalOverlayElem);\n }\n\n this.options = options;\n\n return this;\n }\n\n /**\n * Removes svg mask from modal overlay and removes classes for modal being visible\n */\n cleanup() {\n defer(() => {\n const element = this._modalOverlayElem;\n\n if (element && element instanceof SVGElement) {\n element.parentNode.removeChild(element);\n }\n\n this._modalOverlayElem = null;\n document.body.classList.remove(modalClassNames.isVisible);\n });\n }\n\n /**\n * Hide the modal overlay\n */\n hide() {\n document.body.classList.remove(modalClassNames.isVisible);\n\n if (this._modalOverlayElem) {\n this._modalOverlayElem.style.display = 'none';\n }\n }\n\n /**\n * If modal is enabled, setup the svg mask opening and modal overlay for the step\n * @param step\n */\n setupForStep(step) {\n if (this.options.useModalOverlay) {\n this._styleForStep(step);\n this.show();\n\n } else {\n this.hide();\n }\n }\n\n /**\n * Show the modal overlay\n */\n show() {\n document.body.classList.add(modalClassNames.isVisible);\n\n if (this._modalOverlayElem) {\n this._modalOverlayElem.style.display = 'block';\n }\n }\n\n /**\n * Style the modal for the step\n * @param {Step} step The step to style the opening for\n * @private\n */\n _styleForStep(step) {\n const modalOverlayOpening = this._modalOverlayOpening;\n const targetElement = getElementForStep(step);\n\n if (targetElement) {\n positionModalOpening(targetElement, modalOverlayOpening);\n\n this._onScreenChange = debounce(\n positionModalOpening.bind(this, targetElement, modalOverlayOpening),\n 0,\n { leading: false, trailing: true } // see https://lodash.com/docs/#debounce\n );\n\n addStepEventListeners.call(this);\n\n } else {\n closeModalOpening(this._modalOverlayOpening);\n }\n }\n}","export const defaults = {\n trigger: 'manual',\n arrow: true,\n arrowTransform: 'scale(2)',\n animation: 'fade',\n duration: 420,\n flip: true,\n animateFill: false, // https://atomiks.github.io/tippyjs/#animate-fill-option\n interactive: true, // https://atomiks.github.io/tippyjs/#interactive-option\n hideOnClick: 'toggle', // https://atomiks.github.io/tippyjs/#hide-on-click-option\n multiple: true // https://atomiks.github.io/tippyjs/#multiple-option\n};\n","import { injectCSS } from './css';\nimport isEmpty from 'lodash-es/isEmpty';\nimport isFunction from 'lodash-es/isFunction';\nimport isNumber from 'lodash-es/isNumber';\nimport isString from 'lodash-es/isString';\nimport isUndefined from 'lodash-es/isUndefined';\nimport { Evented } from './evented.js';\nimport { Modal } from './modal.js';\nimport { Step } from './step.js';\nimport { bindMethods } from './bind.js';\nimport tippy from 'tippy.js';\nimport tippyStyles from 'tippy.js/dist/tippy.css';\nimport { defaults as tooltipDefaults } from './utils/tooltip-defaults';\n\nimport {\n cleanupSteps,\n cleanupStepEventListeners\n} from './utils/cleanup';\n\nimport {\n addStepEventListeners,\n getElementForStep\n} from './utils/dom';\n\nimport {\n toggleShepherdModalClass\n} from './utils/modal';\n\n/**\n * Creates incremented ID for each newly created tour\n *\n * @private\n * @return {Number} The unique id for the tour\n */\nconst uniqueId = (function() {\n let id = 0;\n return function() {\n return ++id;\n };\n})();\n\nconst Shepherd = new Evented();\n\n/**\n * Class representing the site tour\n * @extends {Evented}\n */\nexport class Tour extends Evented {\n /**\n * @param {Object} options The options for the tour\n * @param {Object} options.defaultStepOptions Default options for Steps created through `addStep`\n * @param {Step[]} options.steps An array of Step instances to initialize the tour with\n * @param {string} options.tourName An optional \"name\" for the tour. This will be appended to the the tour's\n * dynamically generated `id` property -- which is also set on the `body` element as the `data-shepherd-active-tour` attribute\n * whenever the tour becomes active.\n * @param {boolean} options.useModalOverlay Whether or not steps should be placed above a darkened\n * modal overlay. If true, the overlay will create an opening around the target element so that it\n * can remain interactive\n * @returns {Tour}\n */\n constructor(options = {}) {\n super(options);\n bindMethods.call(this, [\n 'back',\n 'cancel',\n 'complete',\n 'next'\n ]);\n this.options = options;\n this.steps = this.options.steps || [];\n\n // Pass these events onto the global Shepherd object\n const events = ['active', 'cancel', 'complete', 'inactive', 'show', 'start'];\n events.map((event) => {\n ((e) => {\n this.on(e, (opts) => {\n opts = opts || {};\n opts.tour = this;\n Shepherd.trigger(e, opts);\n });\n })(event);\n });\n\n this.modal = new Modal(options);\n\n this._setTooltipDefaults();\n this._setTourID();\n\n injectCSS(tippyStyles);\n\n return this;\n }\n\n /**\n * Adds a new step to the tour\n * @param {Object|Number|Step|String} arg1\n * When arg2 is defined, arg1 can either be a string or number, to use for the `id` for the step\n * When arg2 is undefined, arg1 is either an object containing step options or a Step instance\n * @param {Object|Step} arg2 An object containing step options or a Step instance\n * @return {Step} The newly added step\n */\n addStep(arg1, arg2) {\n let name, step;\n\n // If we just have one argument, we can assume it is an object of step options, with an id\n if (isUndefined(arg2)) {\n step = arg1;\n } else {\n name = arg1;\n step = arg2;\n }\n\n if (!(step instanceof Step)) {\n step = this.setupStep(step, name);\n } else {\n step.tour = this;\n }\n\n this.steps.push(step);\n return step;\n }\n\n /**\n * Go to the previous step in the tour\n */\n back() {\n const index = this.steps.indexOf(this.currentStep);\n this.show(index - 1, false);\n }\n\n /**\n * Calls done() triggering the 'cancel' event\n * If `confirmCancel` is true, will show a window.confirm before cancelling\n */\n cancel() {\n if (this.options.confirmCancel) {\n const cancelMessage = this.options.confirmCancelMessage || 'Are you sure you want to stop the tour?';\n const stopTour = window.confirm(cancelMessage);\n if (stopTour) {\n this.done('cancel');\n }\n } else {\n this.done('cancel');\n }\n }\n\n /**\n * Calls done() triggering the `complete` event\n */\n complete() {\n this.done('complete');\n }\n\n /**\n * Called whenever the tour is cancelled or completed, basically anytime we exit the tour\n * @param {String} event The event name to trigger\n */\n done(event) {\n if (!isEmpty(this.steps)) {\n this.steps.forEach((step) => step.destroy());\n }\n\n cleanupStepEventListeners.call(this);\n cleanupSteps(this.tourObject);\n this.modal.cleanup();\n\n this.trigger(event);\n\n Shepherd.activeTour = null;\n this._removeBodyAttrs();\n this.trigger('inactive', { tour: this });\n }\n\n /**\n * Gets the step from a given id\n * @param {Number|String} id The id of the step to retrieve\n * @return {Step} The step corresponding to the `id`\n */\n getById(id) {\n return this.steps.find((step) => {\n return step.id === id;\n });\n }\n\n /**\n * Gets the current step\n * @returns {Step|null}\n */\n getCurrentStep() {\n return this.currentStep;\n }\n\n /**\n * Hide the current step\n */\n hide() {\n const currentStep = this.getCurrentStep();\n\n if (currentStep) {\n return currentStep.hide();\n }\n }\n\n isActive() {\n return Shepherd.activeTour === this;\n }\n\n /**\n * Go to the next step in the tour\n * If we are at the end, call `complete`\n */\n next() {\n const index = this.steps.indexOf(this.currentStep);\n\n if (index === this.steps.length - 1) {\n this.complete();\n } else {\n this.show(index + 1, true);\n }\n }\n\n /**\n * Removes the step from the tour\n * @param {String} name The id for the step to remove\n */\n removeStep(name) {\n const current = this.getCurrentStep();\n\n // Find the step, destroy it and remove it from this.steps\n this.steps.some((step, i) => {\n if (step.id === name) {\n if (step.isOpen()) {\n step.hide();\n }\n\n step.destroy();\n this.steps.splice(i, 1);\n\n return true;\n }\n });\n\n if (current && current.id === name) {\n this.currentStep = undefined;\n\n // If we have steps left, show the first one, otherwise just cancel the tour\n this.steps.length ? this.show(0) : this.cancel();\n }\n }\n\n /**\n * Setup a new step object\n * @param {Object} stepOptions The object describing the options for the step\n * @param {String|Number} name The string or number to use as the `id` for the step\n * @return {Step} The step instance\n */\n setupStep(stepOptions, name) {\n if (isString(name) || isNumber(name)) {\n stepOptions.id = name.toString();\n }\n\n stepOptions = Object.assign({}, this.options.defaultStepOptions, stepOptions);\n\n return new Step(this, stepOptions);\n }\n\n beforeShowStep(step) {\n this.modal.setupForStep(step);\n this._styleTargetElementForStep(step);\n }\n\n /**\n * Show a specific step in the tour\n * @param {Number|String} key The key to look up the step by\n * @param {Boolean} forward True if we are going forward, false if backward\n */\n show(key = 0, forward = true) {\n const step = isString(key) ? this.getById(key) : this.steps[key];\n\n if (step) {\n this._updateStateBeforeShow();\n\n const shouldSkipStep = isFunction(step.options.showOn) && !step.options.showOn();\n\n // If `showOn` returns false, we want to skip the step, otherwise, show the step like normal\n if (shouldSkipStep) {\n this._skipStep(step, forward);\n } else {\n this.trigger('show', {\n step,\n previous: this.currentStep\n });\n\n this.currentStep = step;\n step.show();\n }\n }\n }\n\n /**\n * Start the tour\n */\n start() {\n this.trigger('start');\n\n this.currentStep = null;\n this._setupActiveTour();\n addStepEventListeners.call(this);\n this.next();\n }\n\n /**\n * Make this tour \"active\"\n * @private\n */\n _setupActiveTour() {\n this._addBodyAttrs();\n this.trigger('active', { tour: this });\n\n Shepherd.activeTour = this;\n }\n\n /**\n * Modulates the styles of the passed step's target element, based on the step's options and\n * the tour's `modal` option, to visually emphasize the element\n *\n * @param step The step object that attaches to the element\n * @private\n */\n _styleTargetElementForStep(step) {\n const targetElement = getElementForStep(step);\n\n if (!targetElement) {\n return;\n }\n\n toggleShepherdModalClass(targetElement);\n\n if (step.options.highlightClass) {\n targetElement.classList.add(step.options.highlightClass);\n }\n\n if (step.options.canClickTarget === false) {\n targetElement.style.pointerEvents = 'none';\n }\n }\n\n /**\n * Called when `showOn` evaluates to false, to skip the step\n * @param {Step} step The step to skip\n * @param {Boolean} forward True if we are going forward, false if backward\n * @private\n */\n _skipStep(step, forward) {\n const index = this.steps.indexOf(step);\n const nextIndex = forward ? index + 1 : index - 1;\n this.show(nextIndex, forward);\n }\n\n _setTooltipDefaults() {\n tippy.setDefaults(tooltipDefaults);\n }\n\n _updateStateBeforeShow() {\n if (this.currentStep) {\n this.currentStep.hide();\n }\n\n if (!this.isActive()) {\n this._setupActiveTour();\n }\n }\n\n _setTourID() {\n const tourName = this.options.tourName || 'tour';\n const uuid = uniqueId();\n\n this.id = `${tourName}--${uuid}`;\n }\n\n _addBodyAttrs() {\n document.body.setAttribute('data-shepherd-active-tour', this.id);\n document.body.classList.add('shepherd-active');\n }\n\n _removeBodyAttrs() {\n document.body.removeAttribute('data-shepherd-active-tour');\n document.body.classList.remove('shepherd-active');\n }\n\n}\n\nexport { Shepherd };\n","import '../scss/shepherd-theme-dark.scss';\nimport '../scss/shepherd-theme-default.scss';\nimport '../scss/shepherd-theme-square.scss';\nimport '../scss/shepherd-theme-square-dark.scss';\n\nimport { Evented } from './evented.js';\nimport { Step } from './step.js';\nimport { Shepherd, Tour } from './tour.js';\n\nObject.assign(Shepherd, { Tour, Step, Evented });\n\nexport default Shepherd;\n","import { isBrowserSupported } from './browser';\n\n/**\n * Injects a string of CSS styles to a style node in <head>\n * @param {String} css\n */\nexport function injectCSS(css) {\n if (isBrowserSupported) {\n const style = document.createElement('style');\n style.type = 'text/css';\n style.textContent = css;\n document.head.insertBefore(style, document.head.firstChild);\n }\n}","import { preventModalBodyTouch } from './modal';\nimport { getElementForStep } from './dom';\n\n/**\n * Cleanup the steps and set pointerEvents back to 'auto'\n * @param tour The tour object\n */\nexport function cleanupSteps(tour) {\n if (tour) {\n const { steps } = tour;\n\n steps.forEach((step) => {\n if (step.options && step.options.canClickTarget === false && step.options.attachTo) {\n const stepElement = getElementForStep(step);\n\n if (stepElement instanceof HTMLElement) {\n stepElement.style.pointerEvents = 'auto';\n }\n }\n });\n }\n}\n\n/**\n * Remove resize and scroll event listeners\n */\nexport function cleanupStepEventListeners() {\n if (typeof this._onScreenChange === 'function') {\n window.removeEventListener('resize', this._onScreenChange, false);\n window.removeEventListener('scroll', this._onScreenChange, false);\n\n this._onScreenChange = null;\n }\n window.removeEventListener('touchmove', preventModalBodyTouch, {\n passive: false\n });\n}\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\n"],"names":["isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","nullTag","undefinedTag","baseGetTag","isOwn","call","tag","unmasked","e","result","getRawTag","isObjectLike","symbolTag","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","replace","isBinary","test","slice","INFINITY","MAX_INTEGER","toInteger","remainder","drop","array","n","guard","length","start","end","index","Array","baseSlice","isUndefined","Evented","event","handler","ctx","once","arguments","this","bindings","push","on","forEach","binding","_this","splice","args","context","_this2","apply","fromRight","baseFor","object","iteratee","keysFunc","iterable","props","key","baseIsArguments","propertyIsEnumerable","isArguments","isArray","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","MAX_SAFE_INTEGER","reIsUint","isLength","typedArrayTags","func","freeProcess","process","nodeUtil","types","require","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","baseTimes","String","isPrototype","Ctor","constructor","overArg","transform","arg","nativeKeys","keys","baseKeys","asyncTag","funcTag","genTag","proxyTag","isFunction","isArrayLike","identity","forOwn","getPrototype","getPrototypeOf","objectTag","funcProto","funcToString","objectCtorString","isElement","proto","isPlainObject","uid","coreJsData","maskSrcKey","exec","IE_PROTO","toSource","reIsHostCtor","reIsNative","RegExp","baseIsNative","getNative","DataView","Map","Promise","Set","WeakMap","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","resolve","ctorString","isEmpty","size","stringTag","isString","Element","matches","matchesSelector","msMatchesSelector","webkitMatchesSelector","defineProperty","assignValue","objValue","configurable","enumerable","writable","isBrowser","window","document","longerTimeoutBrowsers","timeoutDuration","i","navigator","userAgent","indexOf","debounce","fn","called","then","scheduled","setTimeout","functionToCheck","getStyleComputedProperty","element","property","css","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","contains","firstElementChild","element1root","getScroll","upperSide","html","scrollingElement","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","height","width","createClass","defineProperties","target","descriptor","Constructor","protoProps","staticProps","obj","_extends","assign","source","getClientRect","offsets","right","left","bottom","top","getBoundingClientRect","rect","scrollTop","scrollLeft","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","subtract","modifier","includeScroll","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","excludeScroll","relativeOffset","innerWidth","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","area","_ref","sort","a","b","filteredAreas","filter","_ref2","computedPlacement","variation","split","getReferenceOffsets","state","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","runModifiers","modifiers","data","ends","prop","findIndex","cur","match","console","warn","enabled","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","getWindow","setupEventListeners","options","updateBound","addEventListener","passive","scrollElement","attachToScrollParents","callback","scrollParents","isBody","eventsEnabled","disableEventListeners","cancelAnimationFrame","scheduleUpdate","removeEventListener","isNumeric","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","concat","reverse","BEHAVIORS","parseOffset","offset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","positionFixed","removeOnDestroy","onCreate","onUpdate","shift","shiftvariation","_data$offsets","isVertical","side","shiftOffsets","preventOverflow","instance","transformProp","popperStyles","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","len","sideCapitalized","toLowerCase","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","flip","flipped","originalPlacement","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","inner","subtractLength","hide","bound","attributes","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","shouldRound","isVariation","sameWidthOddness","bothOddWidth","noRound","horizontalToInteger","verticalToInteger","offsetParentRect","position","devicePixelRatio","v","prefixedProperty","willChange","invertTop","invertLeft","x-placement","arrowStyles","applyStyle","setAttribute","removeAttribute","onLoad","modifierOptions","Popper","TypeError","classCallCheck","requestAnimationFrame","update","bind","isDestroyed","isCreated","jquery","enableEventListeners","removeChild","Utils","PopperUtils","nav","win","isIOS","platform","MSStream","supportsTouch","a11y","allowHTML","animateFill","animation","appendTo","aria","arrowTransform","arrowType","autoFocus","boundary","content","delay","distance","duration","flipBehavior","followCursor","hideOnClick","inertia","interactive","interactiveBorder","interactiveDebounce","lazy","livePlacement","maxWidth","multiple","onHidden","onHide","onMount","onShow","onShown","performance","popperOptions","shouldPopperHideOnBlur","showOnInit","sticky","theme","touch","touchHold","trigger","updateDuration","wait","zIndex","POPPER_INSTANCE_RELATED_PROPS","Selectors","POPPER","TOOLTIP","CONTENT","BACKDROP","ARROW","ROUND_ARROW","elementProto","mozMatchesSelector","arrayFrom","closest","parentSelector","selector","closestCallback","PASSIVE","div","createElement","setInnerHTML","setContent","contentEl","appendChild","getChildren","tooltip","backdrop","addInertia","createArrowElement","className","createBackdropElement","addInteractive","applyTransitionDuration","els","transitionDuration","toggleTransitionEndListener","action","listener","getPopperPlacement","fullPlacement","getAttribute","setVisibilityState","hideAllPoppers","tippyInstanceToExclude","querySelectorAll","tip","_tippy","isCursorOutsideInteractiveBorder","popperPlacement","clientX","clientY","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","getOffsetDistanceInPx","defaultDistance","getValue","defaultValue","focus","scrollX","pageXOffset","scrollY","pageYOffset","scroll","ms","timeoutId","_arguments","clearTimeout","getModifier","includes","isUsingTouch","onDocumentTouch","classList","add","onDocumentMouseMove","lastMouseMoveTime","now","remove","onDocumentClick","isClickTrigger","clearDelayTimeouts","onWindowBlur","activeElement","blur","onWindowResize","tippyInstance","popperInstance","getDataAttributeOptions","acc","valueAsString","JSON","parse","Number","evaluateProps","out","validateOptions","defaults$$1","option","Error","TRANSFORM_NUMBER_RE","translate","scale","transformAxisBasedOnPlacement","X","Y","transformNumbersBasedOnPlacement","numbers","isReverse","getTransformAxis","cssFunction","getTransformNumbers","regex","computeArrowTransform","matches$$1","computedTransform","idCounter","createTippy","collectionProps","popperMutationObserver","lastTriggerEvent","lastMouseMoveEvent","showTimeoutId","hideTimeoutId","isPreparingToShow","transitionEndListener","listeners","referenceJustProgrammaticallyFocused","debouncedOnMouseMove","onMouseMove","id","t","relatedTarget","createPopperElement","isVisible","prepareShow","prepareHide","popperChildren","isEnabled","isMounted","isShown","set","set$$1","show","enable","disable","destroy","addTriggersToReference","onReferenceClick","createPopperInstance","hasAttribute","positionVirtualReferenceNearCursor","_lastMouseMoveEvent","isVerticalPlacement","isHorizontalPlacement","isHorizontal","removeFollowCursorListener","targetEl","hasFollowCursorBehavior","cleanupOldMouseListeners","onTrigger","isEventListenerStopped","referenceTheCursorIsOver","isCursorOverPopper","isCursorOverReference","onMouseLeave","onBlur","onDelegateShow","onDelegateHide","isTouchEvent","caseA","caseB","_tip$popperChildren","mount","MutationObserver","observe","childList","subtree","characterData","margin","onTransitionEnd","eventType","removeTriggersFromReference","prevProps","nextProps","_getChildren","replaceChild","isVirtual","visibility","transitionDelay","updatePosition","destroyTargetInstances","child","disconnect","globalEventListenersBound","tippy$1","targets","one","maxTouchPoints","msMaxTouchPoints","virtualReference","polyfills","classNames","polyfillElementPrototypeProperties","references","NodeList","getArrayOfElements","firstReference","instances","collection","destroyAll","defaults","setDefaults","partialDefaults","disableAnimations","useCapture","missingTippy","centeredStylePopperModifier","defaultPopperOptions","createFromHTML","innerHTML","parseShorthand","values","assignFunc","valsLength","baseZipObject","setupTooltip","tippy","attachToOpts","parseAttachTo","attachToOptions","tippyOptions","finalPopperOptions","resultingTippyOptions","opts","_parseAttachToOpts","attachTo","returnOpts","error","bindAdvance","advanceOn","isOpen","targetIsEl","tour","next","bindMethods","methods","method","_this4","uniqueId","Step","setOptions","bindButtonEvents","cfg","events","click","page","dataset","buttonEvent","bindCancelLink","link","preventDefault","_this3","cancel","buttons","footer","button","classes","text","header","showCancelLink","paragraphs","HTMLElement","paragraph","title","_addContent","_addButtons","_addCancelLink","complete","_updateStepTargetOnHide","modal","Boolean","_createTooltipContent","scrollToHandler","scrollIntoView","when","beforeShowPromise","_show","beforeShowStep","setupElements","scrollTo","_this5","highlightClass","isBrowserSupported","svgNS","elementIds","modalOverlay","modalOverlayMask","modalOverlayMaskRect","modalOverlayMaskOpening","createModalOverlay","containerElement","createElementNS","setAttributeNS","defsElement","maskContainer","_setAttributes","maskRect","fill","maskOpening","maskConsumer","positionModalOpening","targetElement","openingElement","SVGElement","preventModalBodyTouch","preventModalOverlayTouch","stopPropagation","attrs","getElementForStep","addStepEventListeners","_onScreenChange","overlay","Date","nativeMax","nativeMin","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","thisArg","shouldInvoke","timeSinceLastCall","timerExpired","timeWaiting","trailingEdge","debounced","isInvoking","flush","count","lastCalled","baseSetToString","string","nativeNow","defer","stamp","remaining","baseDelay","otherArgs","Modal","_modalOverlayElem","_modalOverlayOpening","modalClassNames","display","useModalOverlay","_styleForStep","modalOverlayOpening","Shepherd","Tour","steps","_setTooltipDefaults","_setTourID","textContent","head","insertBefore","firstChild","injectCSS","arg1","arg2","setupStep","currentStep","confirmCancel","cancelMessage","confirmCancelMessage","confirm","done","tourObject","canClickTarget","stepElement","pointerEvents","cleanup","activeTour","_removeBodyAttrs","getCurrentStep","current","stepOptions","defaultStepOptions","setupForStep","_styleTargetElementForStep","forward","getById","_updateStateBeforeShow","showOn","_skipStep","previous","_setupActiveTour","_addBodyAttrs","currentElement","shepherdModal","nextIndex","tooltipDefaults","isActive","tourName","uuid"],"mappings":"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"}
1
+ {"version":3,"file":"shepherd.min.js","sources":["../../node_modules/lodash-es/isObject.js","../../node_modules/lodash-es/_freeGlobal.js","../../node_modules/lodash-es/_root.js","../../node_modules/lodash-es/_Symbol.js","../../node_modules/lodash-es/_getRawTag.js","../../node_modules/lodash-es/_objectToString.js","../../node_modules/lodash-es/_baseGetTag.js","../../node_modules/lodash-es/isObjectLike.js","../../node_modules/lodash-es/isSymbol.js","../../node_modules/lodash-es/toNumber.js","../../node_modules/lodash-es/toFinite.js","../../node_modules/lodash-es/toInteger.js","../../node_modules/lodash-es/drop.js","../../node_modules/lodash-es/_baseSlice.js","../../node_modules/lodash-es/isUndefined.js","../../src/js/evented.js","../../node_modules/lodash-es/_baseFor.js","../../node_modules/lodash-es/_createBaseFor.js","../../node_modules/lodash-es/_baseIsArguments.js","../../node_modules/lodash-es/isArguments.js","../../node_modules/lodash-es/isArray.js","../../node_modules/lodash-es/isBuffer.js","../../node_modules/lodash-es/stubFalse.js","../../node_modules/lodash-es/_isIndex.js","../../node_modules/lodash-es/isLength.js","../../node_modules/lodash-es/_baseIsTypedArray.js","../../node_modules/lodash-es/_nodeUtil.js","../../node_modules/lodash-es/_baseUnary.js","../../node_modules/lodash-es/isTypedArray.js","../../node_modules/lodash-es/_arrayLikeKeys.js","../../node_modules/lodash-es/_baseTimes.js","../../node_modules/lodash-es/_isPrototype.js","../../node_modules/lodash-es/_overArg.js","../../node_modules/lodash-es/_nativeKeys.js","../../node_modules/lodash-es/_baseKeys.js","../../node_modules/lodash-es/isFunction.js","../../node_modules/lodash-es/isArrayLike.js","../../node_modules/lodash-es/keys.js","../../node_modules/lodash-es/identity.js","../../node_modules/lodash-es/forOwn.js","../../node_modules/lodash-es/_baseForOwn.js","../../node_modules/lodash-es/_castFunction.js","../../node_modules/lodash-es/_getPrototype.js","../../node_modules/lodash-es/isPlainObject.js","../../node_modules/lodash-es/isElement.js","../../node_modules/lodash-es/_coreJsData.js","../../node_modules/lodash-es/_isMasked.js","../../node_modules/lodash-es/_toSource.js","../../node_modules/lodash-es/_baseIsNative.js","../../node_modules/lodash-es/_getNative.js","../../node_modules/lodash-es/_getValue.js","../../node_modules/lodash-es/_DataView.js","../../node_modules/lodash-es/_Map.js","../../node_modules/lodash-es/_Promise.js","../../node_modules/lodash-es/_Set.js","../../node_modules/lodash-es/_WeakMap.js","../../node_modules/lodash-es/_getTag.js","../../node_modules/lodash-es/isEmpty.js","../../node_modules/lodash-es/isString.js","../../node_modules/element-matches/index.js","../../node_modules/lodash-es/_defineProperty.js","../../node_modules/lodash-es/_assignValue.js","../../node_modules/lodash-es/_baseAssignValue.js","../../node_modules/lodash-es/eq.js","../../node_modules/popper.js/dist/esm/popper.js","../../node_modules/tippy.js/esm/index.all.js","../../src/js/utils/error-messages.js","../../src/js/utils.js","../../node_modules/lodash-es/_baseZipObject.js","../../node_modules/lodash-es/zipObject.js","../../src/js/bind.js","../../src/js/step.js","../../src/js/utils/modal.js","../../src/js/utils/dom.js","../../node_modules/lodash-es/now.js","../../node_modules/lodash-es/debounce.js","../../node_modules/lodash-es/_overRest.js","../../node_modules/lodash-es/_baseSetToString.js","../../node_modules/lodash-es/_shortOut.js","../../node_modules/lodash-es/constant.js","../../node_modules/lodash-es/defer.js","../../node_modules/lodash-es/_baseRest.js","../../node_modules/lodash-es/_setToString.js","../../node_modules/lodash-es/_baseDelay.js","../../node_modules/lodash-es/_apply.js","../../src/js/modal.js","../../src/js/utils/tooltip-defaults.js","../../src/js/tour.js","../../src/js/shepherd.js","../../src/js/utils/cleanup.js","../../node_modules/lodash-es/isNumber.js"],"sourcesContent":["/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\nfunction drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n}\n\nexport default drop;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\n","import drop from 'lodash-es/drop';\nimport isUndefined from 'lodash-es/isUndefined';\n\nexport class Evented {\n on(event, handler, ctx) {\n const once = arguments.length <= 3 || arguments[3] === undefined ? false : arguments[3];\n\n if (isUndefined(this.bindings)) {\n this.bindings = {};\n }\n if (isUndefined(this.bindings[event])) {\n this.bindings[event] = [];\n }\n this.bindings[event].push({ handler, ctx, once });\n }\n\n once(event, handler, ctx) {\n this.on(event, handler, ctx, true);\n }\n\n off(event, handler) {\n if (isUndefined(this.bindings) || isUndefined(this.bindings[event])) {\n return false;\n }\n\n if (isUndefined(handler)) {\n delete this.bindings[event];\n } else {\n this.bindings[event].forEach((binding, index) => {\n if (binding.handler === handler) {\n this.bindings[event].splice(index, 1);\n }\n });\n }\n }\n\n trigger(event) {\n if (!isUndefined(this.bindings) && this.bindings[event]) {\n const args = drop(arguments);\n\n this.bindings[event].forEach((binding, index) => {\n const { ctx, handler, once } = binding;\n\n const context = ctx || this;\n\n handler.apply(context, args);\n\n if (once) {\n this.bindings[event].splice(index, 1);\n }\n });\n }\n }\n\n}\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import baseForOwn from './_baseForOwn.js';\nimport castFunction from './_castFunction.js';\n\n/**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forOwn(object, iteratee) {\n return object && baseForOwn(object, castFunction(iteratee));\n}\n\nexport default forOwn;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import isObjectLike from './isObjectLike.js';\nimport isPlainObject from './isPlainObject.js';\n\n/**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\nfunction isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n}\n\nexport default isElement;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","if (!Element.prototype.matches) {\n Element.prototype.matches =\n Element.prototype.matchesSelector ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n}\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.14.7\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n timeoutDuration = 1;\n break;\n }\n}\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.right - result.left;\n var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop, 10);\n var marginLeft = parseFloat(styles.marginLeft, 10);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['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'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport'\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**!\n* tippy.js v4.0.1\n* (c) 2017-2019 atomiks\n* MIT License\n*/\nimport Popper from 'popper.js';\n\nvar css = \".tippy-iOS{cursor:pointer!important}.tippy-notransition{transition:none}.tippy-popper{transition-timing-function:cubic-bezier(.165,.84,.44,1);max-width:calc(100% - 10px);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:-8px;-webkit-transform-origin:50% 0;transform-origin:50% 0}.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 6px;-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:-8px;-webkit-transform-origin:50% 100%;transform-origin:50% 100%}.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 6px;-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:-16px;-webkit-transform-origin:33.33333333% 50%;transform-origin:33.33333333% 50%}.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:-16px;-webkit-transform-origin:66.66666666% 50%;transform-origin:66.66666666% 50%}.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:4px;font-size:.9rem;padding:.3rem .6rem;line-height:1.4;text-align:center;will-change:transform;background-color:#333}.tippy-tooltip[data-size=small]{padding:.2rem .4rem;font-size:.75rem}.tippy-tooltip[data-size=large]{padding:.4rem .8rem;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:24px;height:8px;fill:#333;pointer-events:none}.tippy-backdrop{position:absolute;will-change:transform;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}\";\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar version = \"4.0.1\";\n\nvar isBrowser = typeof window !== 'undefined';\nvar isIE = isBrowser && /MSIE |Trident\\//.test(navigator.userAgent);\nvar isIOS = isBrowser && /iPhone|iPad|iPod/.test(navigator.platform) && !window.MSStream;\n\nvar Defaults = {\n a11y: true,\n allowHTML: true,\n animateFill: true,\n animation: 'shift-away',\n appendTo: function appendTo() {\n return document.body;\n },\n aria: 'describedby',\n arrow: false,\n arrowType: 'sharp',\n boundary: 'scrollParent',\n content: '',\n delay: [0, 20],\n distance: 10,\n duration: [325, 275],\n flip: true,\n flipBehavior: 'flip',\n flipOnUpdate: false,\n followCursor: false,\n hideOnClick: true,\n ignoreAttributes: false,\n inertia: false,\n interactive: false,\n interactiveBorder: 2,\n interactiveDebounce: 0,\n lazy: true,\n maxWidth: 350,\n multiple: false,\n offset: 0,\n onHidden: function onHidden() {},\n onHide: function onHide() {},\n onMount: function onMount() {},\n onShow: function onShow() {},\n onShown: function onShown() {},\n placement: 'top',\n popperOptions: {},\n role: 'tooltip',\n showOnInit: false,\n size: 'regular',\n sticky: false,\n target: '',\n theme: 'dark',\n touch: true,\n touchHold: false,\n trigger: 'mouseenter focus',\n updateDuration: 0,\n wait: null,\n zIndex: 9999\n /**\n * If the set() method encounters one of these, the popperInstance must be\n * recreated\n */\n\n};\nvar POPPER_INSTANCE_DEPENDENCIES = ['arrow', 'arrowType', 'boundary', 'distance', 'flip', 'flipBehavior', 'flipOnUpdate', 'offset', 'placement', 'popperOptions'];\n\nvar Selectors = {\n POPPER: '.tippy-popper',\n TOOLTIP: '.tippy-tooltip',\n CONTENT: '.tippy-content',\n BACKDROP: '.tippy-backdrop',\n ARROW: '.tippy-arrow',\n ROUND_ARROW: '.tippy-roundarrow'\n};\n\nvar elementProto = isBrowser ? Element.prototype : {};\nvar matches = elementProto.matches || elementProto.matchesSelector || elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector;\n/**\n * Ponyfill for Array.from - converts iterable values to an array\n * @param {Array-like} value\n * @return {Array}\n */\n\nfunction arrayFrom(value) {\n return [].slice.call(value);\n}\n/**\n * Ponyfill for Element.prototype.closest\n * @param {Element} element\n * @param {String} parentSelector\n * @return {Element}\n */\n\nfunction closest(element, parentSelector) {\n return (elementProto.closest || function (selector) {\n var el = this;\n\n while (el) {\n if (matches.call(el, selector)) return el;\n el = el.parentElement;\n }\n }).call(element, parentSelector);\n}\n/**\n * Works like Element.prototype.closest, but uses a callback instead\n * @param {Element} element\n * @param {Function} callback\n * @return {Element}\n */\n\nfunction closestCallback(element, callback) {\n while (element) {\n if (callback(element)) return element;\n element = element.parentElement;\n }\n}\n\n/**\n * Determines if a value is a plain object\n * @param {any} value\n * @return {Boolean}\n */\n\nfunction isPlainObject(value) {\n return {}.toString.call(value) === '[object Object]';\n}\n/**\n * Safe .hasOwnProperty check, for prototype-less objects\n * @param {Object} obj\n * @param {String} key\n * @return {Boolean}\n */\n\nfunction hasOwnProperty(obj, key) {\n return {}.hasOwnProperty.call(obj, key);\n}\n/**\n * Returns an array of elements based on the value\n * @param {any} value\n * @return {Array}\n */\n\nfunction getArrayOfElements(value) {\n if (isSingular(value)) {\n return [value];\n }\n\n if (value instanceof NodeList) {\n return arrayFrom(value);\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n try {\n return arrayFrom(document.querySelectorAll(value));\n } catch (e) {\n return [];\n }\n}\n/**\n * Returns a value at a given index depending on if it's an array or number\n * @param {any} value\n * @param {Number} index\n * @param {any} defaultValue\n */\n\nfunction getValue(value, index, defaultValue) {\n if (Array.isArray(value)) {\n var v = value[index];\n return v == null ? defaultValue : v;\n }\n\n return value;\n}\n/**\n * Debounce utility\n * @param {Function} fn\n * @param {Number} ms\n */\n\nfunction debounce(fn, ms) {\n var timeoutId;\n return function () {\n var _this = this,\n _arguments = arguments;\n\n clearTimeout(timeoutId);\n timeoutId = setTimeout(function () {\n return fn.apply(_this, _arguments);\n }, ms);\n };\n}\n/**\n * Prevents errors from being thrown while accessing nested modifier objects\n * in `popperOptions`\n * @param {Object} obj\n * @param {String} key\n * @return {Object|undefined}\n */\n\nfunction getModifier(obj, key) {\n return obj && obj.modifiers && obj.modifiers[key];\n}\n/**\n * Determines if an array or string includes a value\n * @param {Array|String} a\n * @param {any} b\n * @return {Boolean}\n */\n\nfunction includes(a, b) {\n return a.indexOf(b) > -1;\n}\n/**\n * Determines if the value is singular-like\n * @param {any} value\n * @return {Boolean}\n */\n\nfunction isSingular(value) {\n return isPlainObject(value) || value instanceof Element;\n}\n/**\n * Tricking bundlers, linters, and minifiers\n * @return {String}\n */\n\nfunction innerHTML() {\n return 'innerHTML';\n}\n/**\n * Evaluates a function if one, or returns the value\n * @param {any} value\n * @param {any[]} args\n * @return {Boolean}\n */\n\nfunction evaluateValue(value, args) {\n return typeof value === 'function' ? value.apply(null, args) : value;\n}\n/**\n * Sets a popperInstance `flip` modifier's enabled state\n * @param {Object[]} modifiers\n * @param {any} value\n */\n\nfunction setFlipModifierEnabled(modifiers, value) {\n modifiers.filter(function (m) {\n return m.name === 'flip';\n })[0].enabled = value;\n}\n\n/**\n * Returns a new `div` element\n * @return {HTMLDivElement}\n */\n\nfunction div() {\n return document.createElement('div');\n}\n/**\n * Sets the innerHTML of an element while tricking linters & minifiers\n * @param {HTMLElement} el\n * @param {Element|String} html\n */\n\nfunction setInnerHTML(el, html) {\n el[innerHTML()] = html instanceof Element ? html[innerHTML()] : html;\n}\n/**\n * Sets the content of a tooltip\n * @param {HTMLElement} contentEl\n * @param {Object} props\n */\n\nfunction setContent(contentEl, props) {\n if (props.content instanceof Element) {\n setInnerHTML(contentEl, '');\n contentEl.appendChild(props.content);\n } else {\n contentEl[props.allowHTML ? 'innerHTML' : 'textContent'] = props.content;\n }\n}\n/**\n * Returns the child elements of a popper element\n * @param {HTMLElement} popper\n */\n\nfunction getChildren(popper) {\n return {\n tooltip: popper.querySelector(Selectors.TOOLTIP),\n backdrop: popper.querySelector(Selectors.BACKDROP),\n content: popper.querySelector(Selectors.CONTENT),\n arrow: popper.querySelector(Selectors.ARROW) || popper.querySelector(Selectors.ROUND_ARROW)\n };\n}\n/**\n * Adds `data-inertia` attribute\n * @param {HTMLElement} tooltip\n */\n\nfunction addInertia(tooltip) {\n tooltip.setAttribute('data-inertia', '');\n}\n/**\n * Removes `data-inertia` attribute\n * @param {HTMLElement} tooltip\n */\n\nfunction removeInertia(tooltip) {\n tooltip.removeAttribute('data-inertia');\n}\n/**\n * Creates an arrow element and returns it\n */\n\nfunction createArrowElement(arrowType) {\n var arrow = div();\n\n if (arrowType === 'round') {\n arrow.className = 'tippy-roundarrow';\n setInnerHTML(arrow, '<svg viewBox=\"0 0 24 8\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 8s2.021-.015 5.253-4.218C9.584 2.051 10.797 1.007 12 1c1.203-.007 2.416 1.035 3.761 2.782C19.012 8.005 21 8 21 8H3z\"/></svg>');\n } else {\n arrow.className = 'tippy-arrow';\n }\n\n return arrow;\n}\n/**\n * Creates a backdrop element and returns it\n */\n\nfunction createBackdropElement() {\n var backdrop = div();\n backdrop.className = 'tippy-backdrop';\n backdrop.setAttribute('data-state', 'hidden');\n return backdrop;\n}\n/**\n * Adds interactive-related attributes\n * @param {HTMLElement} popper\n * @param {HTMLElement} tooltip\n */\n\nfunction addInteractive(popper, tooltip) {\n popper.setAttribute('tabindex', '-1');\n tooltip.setAttribute('data-interactive', '');\n}\n/**\n * Removes interactive-related attributes\n * @param {HTMLElement} popper\n * @param {HTMLElement} tooltip\n */\n\nfunction removeInteractive(popper, tooltip) {\n popper.removeAttribute('tabindex');\n tooltip.removeAttribute('data-interactive');\n}\n/**\n * Applies a transition duration to a list of elements\n * @param {Array} els\n * @param {Number} value\n */\n\nfunction applyTransitionDuration(els, value) {\n els.forEach(function (el) {\n if (el) {\n el.style.transitionDuration = \"\".concat(value, \"ms\");\n }\n });\n}\n/**\n * Add/remove transitionend listener from tooltip\n * @param {Element} tooltip\n * @param {String} action\n * @param {Function} listener\n */\n\nfunction toggleTransitionEndListener(tooltip, action, listener) {\n tooltip[action + 'EventListener']('transitionend', listener);\n}\n/**\n * Returns the popper's placement, ignoring shifting (top-start, etc)\n * @param {Element} popper\n * @return {String}\n */\n\nfunction getPopperPlacement(popper) {\n var fullPlacement = popper.getAttribute('x-placement');\n return fullPlacement ? fullPlacement.split('-')[0] : '';\n}\n/**\n * Sets the visibility state to elements so they can begin to transition\n * @param {Array} els\n * @param {String} state\n */\n\nfunction setVisibilityState(els, state) {\n els.forEach(function (el) {\n if (el) {\n el.setAttribute('data-state', state);\n }\n });\n}\n/**\n * Triggers reflow\n * @param {Element} popper\n */\n\nfunction reflow(popper) {\n void popper.offsetHeight;\n}\n/**\n * Adds/removes theme from tooltip's classList\n * @param {HTMLDivElement} tooltip\n * @param {String} action\n * @param {String} theme\n */\n\nfunction toggleTheme(tooltip, action, theme) {\n theme.split(' ').forEach(function (themeName) {\n tooltip.classList[action](themeName + '-theme');\n });\n}\n/**\n * Constructs the popper element and returns it\n * @param {Number} id\n * @param {Object} props\n */\n\nfunction createPopperElement(id, props) {\n var popper = div();\n popper.className = 'tippy-popper';\n popper.id = \"tippy-\".concat(id);\n popper.style.zIndex = props.zIndex;\n\n if (props.role) {\n popper.setAttribute('role', props.role);\n }\n\n var tooltip = div();\n tooltip.className = 'tippy-tooltip';\n tooltip.style.maxWidth = props.maxWidth + (typeof props.maxWidth === 'number' ? 'px' : '');\n tooltip.setAttribute('data-size', props.size);\n tooltip.setAttribute('data-animation', props.animation);\n tooltip.setAttribute('data-state', 'hidden');\n toggleTheme(tooltip, 'add', props.theme);\n var content = div();\n content.className = 'tippy-content';\n content.setAttribute('data-state', 'hidden');\n\n if (props.interactive) {\n addInteractive(popper, tooltip);\n }\n\n if (props.arrow) {\n tooltip.appendChild(createArrowElement(props.arrowType));\n }\n\n if (props.animateFill) {\n tooltip.appendChild(createBackdropElement());\n tooltip.setAttribute('data-animatefill', '');\n }\n\n if (props.inertia) {\n addInertia(tooltip);\n }\n\n setContent(content, props);\n tooltip.appendChild(content);\n popper.appendChild(tooltip);\n return popper;\n}\n/**\n * Updates the popper element based on the new props\n * @param {HTMLElement} popper\n * @param {Object} prevProps\n * @param {Object} nextProps\n */\n\nfunction updatePopperElement(popper, prevProps, nextProps) {\n var _getChildren = getChildren(popper),\n tooltip = _getChildren.tooltip,\n content = _getChildren.content,\n backdrop = _getChildren.backdrop,\n arrow = _getChildren.arrow;\n\n popper.style.zIndex = nextProps.zIndex;\n tooltip.setAttribute('data-size', nextProps.size);\n tooltip.setAttribute('data-animation', nextProps.animation);\n tooltip.style.maxWidth = nextProps.maxWidth + (typeof nextProps.maxWidth === 'number' ? 'px' : '');\n\n if (nextProps.role) {\n popper.setAttribute('role', nextProps.role);\n } else {\n popper.removeAttribute('role');\n }\n\n if (prevProps.content !== nextProps.content) {\n setContent(content, nextProps);\n } // animateFill\n\n\n if (!prevProps.animateFill && nextProps.animateFill) {\n tooltip.appendChild(createBackdropElement());\n tooltip.setAttribute('data-animatefill', '');\n } else if (prevProps.animateFill && !nextProps.animateFill) {\n tooltip.removeChild(backdrop);\n tooltip.removeAttribute('data-animatefill');\n } // arrow\n\n\n if (!prevProps.arrow && nextProps.arrow) {\n tooltip.appendChild(createArrowElement(nextProps.arrowType));\n } else if (prevProps.arrow && !nextProps.arrow) {\n tooltip.removeChild(arrow);\n } // arrowType\n\n\n if (prevProps.arrow && nextProps.arrow && prevProps.arrowType !== nextProps.arrowType) {\n tooltip.replaceChild(createArrowElement(nextProps.arrowType), arrow);\n } // interactive\n\n\n if (!prevProps.interactive && nextProps.interactive) {\n addInteractive(popper, tooltip);\n } else if (prevProps.interactive && !nextProps.interactive) {\n removeInteractive(popper, tooltip);\n } // inertia\n\n\n if (!prevProps.inertia && nextProps.inertia) {\n addInertia(tooltip);\n } else if (prevProps.inertia && !nextProps.inertia) {\n removeInertia(tooltip);\n } // theme\n\n\n if (prevProps.theme !== nextProps.theme) {\n toggleTheme(tooltip, 'remove', prevProps.theme);\n toggleTheme(tooltip, 'add', nextProps.theme);\n }\n}\n/**\n * Runs the callback after the popper's position has been updated\n * update() is debounced with Promise.resolve() or setTimeout()\n * scheduleUpdate() is update() wrapped in requestAnimationFrame()\n * @param {Popper} popperInstance\n * @param {Function} callback\n */\n\nfunction afterPopperPositionUpdates(popperInstance, callback) {\n var popper = popperInstance.popper,\n options = popperInstance.options;\n var onCreate = options.onCreate,\n onUpdate = options.onUpdate;\n\n options.onCreate = options.onUpdate = function () {\n reflow(popper);\n callback();\n onUpdate();\n options.onCreate = onCreate;\n options.onUpdate = onUpdate;\n };\n}\n/**\n * Hides all visible poppers on the document\n * @param {Object} options\n */\n\nfunction hideAll() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n checkHideOnClick = _ref.checkHideOnClick,\n exclude = _ref.exclude,\n duration = _ref.duration;\n\n arrayFrom(document.querySelectorAll(Selectors.POPPER)).forEach(function (popper) {\n var instance = popper._tippy;\n\n if (instance && (checkHideOnClick ? instance.props.hideOnClick === true : true) && (!exclude || popper !== exclude.popper)) {\n instance.hide(duration);\n }\n });\n}\n/**\n * Determines if the mouse cursor is outside of the popper's interactive border\n * region\n * @param {String} popperPlacement\n * @param {Object} popperRect\n * @param {MouseEvent} event\n * @param {Object} props\n */\n\nfunction isCursorOutsideInteractiveBorder(popperPlacement, popperRect, event, props) {\n if (!popperPlacement) {\n return true;\n }\n\n var x = event.clientX,\n y = event.clientY;\n var interactiveBorder = props.interactiveBorder,\n distance = props.distance;\n var exceedsTop = popperRect.top - y > (popperPlacement === 'top' ? interactiveBorder + distance : interactiveBorder);\n var exceedsBottom = y - popperRect.bottom > (popperPlacement === 'bottom' ? interactiveBorder + distance : interactiveBorder);\n var exceedsLeft = popperRect.left - x > (popperPlacement === 'left' ? interactiveBorder + distance : interactiveBorder);\n var exceedsRight = x - popperRect.right > (popperPlacement === 'right' ? interactiveBorder + distance : interactiveBorder);\n return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight;\n}\n/**\n * Returns the distance offset, taking into account the default offset due to\n * the transform: translate() rule in CSS\n * @param {Number} distance\n * @param {Number} defaultDistance\n */\n\nfunction getOffsetDistanceInPx(distance, defaultDistance) {\n return -(distance - defaultDistance) + 'px';\n}\n\nvar PASSIVE = {\n passive: true\n};\nvar PADDING = 3;\n\nvar isUsingTouch = false;\nfunction onDocumentTouch() {\n if (isUsingTouch) {\n return;\n }\n\n isUsingTouch = true;\n\n if (isIOS) {\n document.body.classList.add('tippy-iOS');\n }\n\n if (window.performance) {\n document.addEventListener('mousemove', onDocumentMouseMove);\n }\n}\nvar lastMouseMoveTime = 0;\nfunction onDocumentMouseMove() {\n var now = performance.now(); // Chrome 60+ is 1 mousemove per animation frame, use 20ms time difference\n\n if (now - lastMouseMoveTime < 20) {\n isUsingTouch = false;\n document.removeEventListener('mousemove', onDocumentMouseMove);\n\n if (!isIOS) {\n document.body.classList.remove('tippy-iOS');\n }\n }\n\n lastMouseMoveTime = now;\n}\nfunction onDocumentClick(_ref) {\n var target = _ref.target;\n\n // Simulated events dispatched on the document\n if (!(target instanceof Element)) {\n return hideAll();\n } // Clicked on an interactive popper\n\n\n var popper = closest(target, Selectors.POPPER);\n\n if (popper && popper._tippy && popper._tippy.props.interactive) {\n return;\n } // Clicked on a reference\n\n\n var reference = closestCallback(target, function (el) {\n return el._tippy && el._tippy.reference === el;\n });\n\n if (reference) {\n var instance = reference._tippy;\n var isClickTrigger = includes(instance.props.trigger, 'click');\n\n if (isUsingTouch || isClickTrigger) {\n return hideAll({\n exclude: instance,\n checkHideOnClick: true\n });\n }\n\n if (instance.props.hideOnClick !== true || isClickTrigger) {\n return;\n }\n\n instance.clearDelayTimeouts();\n }\n\n hideAll({\n checkHideOnClick: true\n });\n}\nfunction onWindowBlur() {\n var _document = document,\n activeElement = _document.activeElement;\n\n if (activeElement && activeElement.blur && activeElement._tippy) {\n activeElement.blur();\n }\n}\n/**\n * Adds the needed global event listeners\n */\n\nfunction bindGlobalEventListeners() {\n document.addEventListener('click', onDocumentClick, true);\n document.addEventListener('touchstart', onDocumentTouch, PASSIVE);\n window.addEventListener('blur', onWindowBlur);\n}\n\nvar keys = Object.keys(Defaults);\n/**\n * Determines if an element can receive focus\n * @param {Element} el\n * @return {Boolean}\n */\n\nfunction canReceiveFocus(el) {\n return el instanceof Element ? matches.call(el, 'a[href],area[href],button,details,input,textarea,select,iframe,[tabindex]') && !el.hasAttribute('disabled') : true;\n}\n/**\n * Returns an object of optional props from data-tippy-* attributes\n * @param {Element} reference\n * @return {Object}\n */\n\nfunction getDataAttributeOptions(reference) {\n return keys.reduce(function (acc, key) {\n var valueAsString = (reference.getAttribute(\"data-tippy-\".concat(key)) || '').trim();\n\n if (!valueAsString) {\n return acc;\n }\n\n if (key === 'content') {\n acc[key] = valueAsString;\n } else {\n try {\n acc[key] = JSON.parse(valueAsString);\n } catch (e) {\n acc[key] = valueAsString;\n }\n }\n\n return acc;\n }, {});\n}\n/**\n * Polyfills the virtual reference (plain object) with Element.prototype props\n * Mutating because DOM elements are mutated, adds `_tippy` property\n * @param {Object} virtualReference\n * @return {Object}\n */\n\nfunction polyfillElementPrototypeProperties(virtualReference) {\n var polyfills = {\n isVirtual: true,\n attributes: virtualReference.attributes || {},\n setAttribute: function setAttribute(key, value) {\n virtualReference.attributes[key] = value;\n },\n getAttribute: function getAttribute(key) {\n return virtualReference.attributes[key];\n },\n removeAttribute: function removeAttribute(key) {\n delete virtualReference.attributes[key];\n },\n hasAttribute: function hasAttribute(key) {\n return key in virtualReference.attributes;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n classList: {\n classNames: {},\n add: function add(key) {\n virtualReference.classList.classNames[key] = true;\n },\n remove: function remove(key) {\n delete virtualReference.classList.classNames[key];\n },\n contains: function contains(key) {\n return key in virtualReference.classList.classNames;\n }\n }\n };\n\n for (var key in polyfills) {\n virtualReference[key] = polyfills[key];\n }\n}\n\n/**\n * Evaluates the props object by merging data attributes and\n * disabling conflicting options where necessary\n * @param {Element} reference\n * @param {Object} props\n * @return {Object}\n */\n\nfunction evaluateProps(reference, props) {\n var out = _extends({}, props, {\n content: evaluateValue(props.content, [reference])\n }, props.ignoreAttributes ? {} : getDataAttributeOptions(reference));\n\n if (out.arrow) {\n out.animateFill = false;\n }\n\n return out;\n}\n/**\n * Validates an object of options with the valid default props object\n * @param {Object} options\n * @param {Object} defaults\n */\n\nfunction validateOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var defaults = arguments.length > 1 ? arguments[1] : undefined;\n Object.keys(options).forEach(function (option) {\n if (!hasOwnProperty(defaults, option)) {\n throw new Error(\"[tippy]: `\".concat(option, \"` is not a valid option\"));\n }\n });\n}\n\nvar idCounter = 1;\n/**\n * Creates and returns a Tippy object. We're using a closure pattern instead of\n * a class so that the exposed object API is clean without private members\n * prefixed with `_`.\n * @param {Element} reference\n * @param {Object} collectionProps\n * @return {Object} instance\n */\n\nfunction createTippy(reference, collectionProps) {\n var props = evaluateProps(reference, collectionProps); // If the reference shouldn't have multiple tippys, return null early\n\n if (!props.multiple && reference._tippy) {\n return null;\n }\n /* ======================= 🔒 Private members 🔒 ======================= */\n // The last trigger event object that caused the tippy to show\n\n\n var lastTriggerEvent = {}; // The last mousemove event object created by the document mousemove event\n\n var lastMouseMoveEvent = null; // Timeout created by the show delay\n\n var showTimeoutId = 0; // Timeout created by the hide delay\n\n var hideTimeoutId = 0; // Flag to determine if the tippy is preparing to show due to the show timeout\n\n var isPreparingToShow = false; // The current `transitionend` callback reference\n\n var transitionEndListener = function transitionEndListener() {}; // Array of event listeners currently attached to the reference element\n\n\n var listeners = []; // Private onMouseMove handler reference, debounced or not\n\n var debouncedOnMouseMove = props.interactiveDebounce > 0 ? debounce(onMouseMove, props.interactiveDebounce) : onMouseMove; // Node the tippy is currently appended to\n\n var parentNode = null;\n /* ======================= 🔑 Public members 🔑 ======================= */\n // id used for the `aria-describedby` / `aria-labelledby` attribute\n\n var id = idCounter++; // Popper element reference\n\n var popper = createPopperElement(id, props); // Prevent a tippy with a delay from hiding if the cursor left then returned\n // before it started hiding\n\n popper.addEventListener('mouseenter', function (event) {\n if (instance.props.interactive && instance.state.isVisible && lastTriggerEvent.type === 'mouseenter') {\n prepareShow(event);\n }\n });\n popper.addEventListener('mouseleave', function () {\n if (instance.props.interactive && lastTriggerEvent.type === 'mouseenter') {\n document.addEventListener('mousemove', debouncedOnMouseMove);\n }\n }); // Popper element children: { arrow, backdrop, content, tooltip }\n\n var popperChildren = getChildren(popper); // The state of the tippy\n\n var state = {\n // If the tippy is currently enabled\n isEnabled: true,\n // show() invoked, not currently transitioning out\n isVisible: false,\n // If the tippy has been destroyed\n isDestroyed: false,\n // If the tippy is on the DOM (transitioning out or in)\n isMounted: false,\n // show() transition finished\n isShown: false // Popper.js instance for the tippy is lazily created\n\n };\n var popperInstance = null; // 🌟 tippy instance\n\n var instance = {\n // properties\n id: id,\n reference: reference,\n popper: popper,\n popperChildren: popperChildren,\n popperInstance: popperInstance,\n props: props,\n state: state,\n // methods\n clearDelayTimeouts: clearDelayTimeouts,\n set: set,\n setContent: setContent$$1,\n show: show,\n hide: hide,\n enable: enable,\n disable: disable,\n destroy: destroy\n };\n addTriggersToReference();\n\n if (!props.lazy) {\n createPopperInstance();\n instance.popperInstance.disableEventListeners();\n }\n\n if (props.showOnInit) {\n prepareShow();\n } // Ensure the reference element can receive focus (and is not a delegate)\n\n\n if (props.a11y && !props.target && !canReceiveFocus(reference)) {\n reference.setAttribute('tabindex', '0');\n } // Install shortcuts\n\n\n reference._tippy = instance;\n popper._tippy = instance;\n return instance;\n /* ======================= 🔒 Private methods 🔒 ======================= */\n\n /**\n * Positions the virtual reference near the mouse cursor\n */\n\n function positionVirtualReferenceNearCursor(event) {\n var _lastMouseMoveEvent = lastMouseMoveEvent = event,\n clientX = _lastMouseMoveEvent.clientX,\n clientY = _lastMouseMoveEvent.clientY;\n\n if (!instance.popperInstance) {\n return;\n } // Ensure virtual reference is padded to prevent tooltip from\n // overflowing. Maybe Popper.js issue?\n\n\n var placement = getPopperPlacement(instance.popper);\n var padding = instance.popperChildren.arrow ? PADDING + 16 : PADDING;\n var isVerticalPlacement = includes(['top', 'bottom'], placement);\n var isHorizontalPlacement = includes(['left', 'right'], placement); // Top / left boundary\n\n var x = isVerticalPlacement ? Math.max(padding, clientX) : clientX;\n var y = isHorizontalPlacement ? Math.max(padding, clientY) : clientY; // Bottom / right boundary\n\n if (isVerticalPlacement && x > padding) {\n x = Math.min(clientX, window.innerWidth - padding);\n }\n\n if (isHorizontalPlacement && y > padding) {\n y = Math.min(clientY, window.innerHeight - padding);\n }\n\n var rect = instance.reference.getBoundingClientRect();\n var followCursor = instance.props.followCursor;\n var isHorizontal = followCursor === 'horizontal';\n var isVertical = followCursor === 'vertical';\n instance.popperInstance.reference = {\n getBoundingClientRect: function getBoundingClientRect() {\n return {\n width: 0,\n height: 0,\n top: isHorizontal ? rect.top : y,\n bottom: isHorizontal ? rect.bottom : y,\n left: isVertical ? rect.left : x,\n right: isVertical ? rect.right : x\n };\n },\n clientWidth: 0,\n clientHeight: 0\n };\n instance.popperInstance.scheduleUpdate();\n\n if (followCursor === 'initial' && instance.state.isVisible) {\n removeFollowCursorListener();\n }\n }\n /**\n * Creates the tippy instance for a delegate when it's been triggered\n */\n\n\n function createDelegateChildTippy(event) {\n var targetEl = closest(event.target, instance.props.target);\n\n if (targetEl && !targetEl._tippy) {\n createTippy(targetEl, _extends({}, instance.props, {\n content: evaluateValue(collectionProps.content, [targetEl]),\n appendTo: collectionProps.appendTo,\n target: '',\n showOnInit: true\n }));\n prepareShow(event);\n }\n }\n /**\n * Setup before show() is invoked (delays, etc.)\n */\n\n\n function prepareShow(event) {\n clearDelayTimeouts();\n\n if (instance.state.isVisible) {\n return;\n } // Is a delegate, create an instance for the child target\n\n\n if (instance.props.target) {\n return createDelegateChildTippy(event);\n }\n\n isPreparingToShow = true;\n\n if (instance.props.wait) {\n return instance.props.wait(instance, event);\n } // If the tooltip has a delay, we need to be listening to the mousemove as\n // soon as the trigger event is fired, so that it's in the correct position\n // upon mount.\n // Edge case: if the tooltip is still mounted, but then prepareShow() is\n // called, it causes a jump.\n\n\n if (hasFollowCursorBehavior() && !instance.state.isMounted) {\n document.addEventListener('mousemove', positionVirtualReferenceNearCursor);\n }\n\n var delay = getValue(instance.props.delay, 0, Defaults.delay);\n\n if (delay) {\n showTimeoutId = setTimeout(function () {\n show();\n }, delay);\n } else {\n show();\n }\n }\n /**\n * Setup before hide() is invoked (delays, etc.)\n */\n\n\n function prepareHide() {\n clearDelayTimeouts();\n\n if (!instance.state.isVisible) {\n return removeFollowCursorListener();\n }\n\n isPreparingToShow = false;\n var delay = getValue(instance.props.delay, 1, Defaults.delay);\n\n if (delay) {\n hideTimeoutId = setTimeout(function () {\n if (instance.state.isVisible) {\n hide();\n }\n }, delay);\n } else {\n hide();\n }\n }\n /**\n * Removes the follow cursor listener\n */\n\n\n function removeFollowCursorListener() {\n document.removeEventListener('mousemove', positionVirtualReferenceNearCursor);\n lastMouseMoveEvent = null;\n }\n /**\n * Cleans up old listeners\n */\n\n\n function cleanupOldMouseListeners() {\n document.body.removeEventListener('mouseleave', prepareHide);\n document.removeEventListener('mousemove', debouncedOnMouseMove);\n }\n /**\n * Event listener invoked upon trigger\n */\n\n\n function onTrigger(event) {\n if (!instance.state.isEnabled || isEventListenerStopped(event)) {\n return;\n }\n\n if (!instance.state.isVisible) {\n lastTriggerEvent = event; // Use the `mouseenter` event as a \"mock\" mousemove event for touch\n // devices\n\n if (isUsingTouch && includes(event.type, 'mouse')) {\n lastMouseMoveEvent = event;\n }\n } // Toggle show/hide when clicking click-triggered tooltips\n\n\n if (event.type === 'click' && instance.props.hideOnClick !== false && instance.state.isVisible) {\n prepareHide();\n } else {\n prepareShow(event);\n }\n }\n /**\n * Event listener used for interactive tooltips to detect when they should\n * hide\n */\n\n\n function onMouseMove(event) {\n var referenceTheCursorIsOver = closestCallback(event.target, function (el) {\n return el._tippy;\n });\n var isCursorOverPopper = closest(event.target, Selectors.POPPER) === instance.popper;\n var isCursorOverReference = referenceTheCursorIsOver === instance.reference;\n\n if (isCursorOverPopper || isCursorOverReference) {\n return;\n }\n\n if (isCursorOutsideInteractiveBorder(getPopperPlacement(instance.popper), instance.popper.getBoundingClientRect(), event, instance.props)) {\n cleanupOldMouseListeners();\n prepareHide();\n }\n }\n /**\n * Event listener invoked upon mouseleave\n */\n\n\n function onMouseLeave(event) {\n if (isEventListenerStopped(event)) {\n return;\n }\n\n if (instance.props.interactive) {\n document.body.addEventListener('mouseleave', prepareHide);\n document.addEventListener('mousemove', debouncedOnMouseMove);\n return;\n }\n\n prepareHide();\n }\n /**\n * Event listener invoked upon blur\n */\n\n\n function onBlur(event) {\n if (event.target !== instance.reference) {\n return;\n }\n\n if (instance.props.interactive && event.relatedTarget && instance.popper.contains(event.relatedTarget)) {\n return;\n }\n\n prepareHide();\n }\n /**\n * Event listener invoked when a child target is triggered\n */\n\n\n function onDelegateShow(event) {\n if (closest(event.target, instance.props.target)) {\n prepareShow(event);\n }\n }\n /**\n * Event listener invoked when a child target should hide\n */\n\n\n function onDelegateHide(event) {\n if (closest(event.target, instance.props.target)) {\n prepareHide();\n }\n }\n /**\n * Determines if an event listener should stop further execution due to the\n * `touchHold` option\n */\n\n\n function isEventListenerStopped(event) {\n var supportsTouch = 'ontouchstart' in window;\n var isTouchEvent = includes(event.type, 'touch');\n var touchHold = instance.props.touchHold;\n return supportsTouch && isUsingTouch && touchHold && !isTouchEvent || isUsingTouch && !touchHold && isTouchEvent;\n }\n /**\n * Creates the popper instance for the instance\n */\n\n\n function createPopperInstance() {\n var popperOptions = instance.props.popperOptions;\n var _instance$popperChild = instance.popperChildren,\n tooltip = _instance$popperChild.tooltip,\n arrow = _instance$popperChild.arrow;\n instance.popperInstance = new Popper(instance.reference, instance.popper, _extends({\n placement: instance.props.placement\n }, popperOptions, {\n modifiers: _extends({}, popperOptions ? popperOptions.modifiers : {}, {\n preventOverflow: _extends({\n boundariesElement: instance.props.boundary,\n padding: PADDING\n }, getModifier(popperOptions, 'preventOverflow')),\n arrow: _extends({\n element: arrow,\n enabled: !!arrow\n }, getModifier(popperOptions, 'arrow')),\n flip: _extends({\n enabled: instance.props.flip,\n // The tooltip is offset by 10px from the popper in CSS,\n // we need to account for its distance\n padding: instance.props.distance + PADDING,\n behavior: instance.props.flipBehavior\n }, getModifier(popperOptions, 'flip')),\n offset: _extends({\n offset: instance.props.offset\n }, getModifier(popperOptions, 'offset'))\n }),\n onCreate: function onCreate() {\n tooltip.style[getPopperPlacement(instance.popper)] = getOffsetDistanceInPx(instance.props.distance, Defaults.distance);\n },\n onUpdate: function onUpdate(data) {\n if (data && !instance.props.flipOnUpdate) {\n if (data.flipped) {\n instance.popperInstance.options.placement = data.placement;\n }\n\n setFlipModifierEnabled(instance.popperInstance.modifiers, false);\n }\n\n var styles = tooltip.style;\n styles.top = '';\n styles.bottom = '';\n styles.left = '';\n styles.right = '';\n styles[getPopperPlacement(instance.popper)] = getOffsetDistanceInPx(instance.props.distance, Defaults.distance);\n }\n }));\n }\n /**\n * Mounts the tooltip to the DOM, callback to show tooltip is run **after**\n * popper's position has updated\n */\n\n\n function mount(callback) {\n var shouldEnableListeners = !hasFollowCursorBehavior() && !(instance.props.followCursor === 'initial' && isUsingTouch);\n\n if (!instance.popperInstance) {\n createPopperInstance();\n\n if (!shouldEnableListeners) {\n instance.popperInstance.disableEventListeners();\n }\n } else {\n if (!hasFollowCursorBehavior()) {\n instance.popperInstance.scheduleUpdate();\n\n if (shouldEnableListeners) {\n instance.popperInstance.enableEventListeners();\n }\n }\n\n setFlipModifierEnabled(instance.popperInstance.modifiers, true);\n } // If the instance previously had followCursor behavior, it will be\n // positioned incorrectly if triggered by `focus` afterwards.\n // Update the reference back to the real DOM element\n\n\n instance.popperInstance.reference = instance.reference;\n var arrow = instance.popperChildren.arrow;\n\n if (hasFollowCursorBehavior()) {\n if (arrow) {\n arrow.style.margin = '0';\n }\n\n var delay = getValue(instance.props.delay, 0, Defaults.delay);\n\n if (lastTriggerEvent.type) {\n positionVirtualReferenceNearCursor(delay && lastMouseMoveEvent ? lastMouseMoveEvent : lastTriggerEvent);\n }\n } else if (arrow) {\n arrow.style.margin = '';\n }\n\n afterPopperPositionUpdates(instance.popperInstance, callback);\n var appendTo = instance.props.appendTo;\n parentNode = appendTo === 'parent' ? instance.reference.parentNode : evaluateValue(appendTo, [instance.reference]);\n\n if (!parentNode.contains(instance.popper)) {\n parentNode.appendChild(instance.popper);\n instance.props.onMount(instance);\n instance.state.isMounted = true;\n }\n }\n /**\n * Determines if the instance is in `followCursor` mode\n */\n\n\n function hasFollowCursorBehavior() {\n return instance.props.followCursor && !isUsingTouch && lastTriggerEvent.type !== 'focus';\n }\n /**\n * Updates the tooltip's position on each animation frame + timeout\n */\n\n\n function makeSticky() {\n applyTransitionDuration([instance.popper], isIE ? 0 : instance.props.updateDuration);\n\n var updatePosition = function updatePosition() {\n if (instance.popperInstance) {\n instance.popperInstance.scheduleUpdate();\n }\n\n if (instance.state.isMounted) {\n requestAnimationFrame(updatePosition);\n } else {\n applyTransitionDuration([instance.popper], 0);\n }\n };\n\n updatePosition();\n }\n /**\n * Invokes a callback once the tooltip has fully transitioned out\n */\n\n\n function onTransitionedOut(duration, callback) {\n onTransitionEnd(duration, function () {\n if (!instance.state.isVisible && parentNode && parentNode.contains(instance.popper)) {\n callback();\n }\n });\n }\n /**\n * Invokes a callback once the tooltip has fully transitioned in\n */\n\n\n function onTransitionedIn(duration, callback) {\n onTransitionEnd(duration, callback);\n }\n /**\n * Invokes a callback once the tooltip's CSS transition ends\n */\n\n\n function onTransitionEnd(duration, callback) {\n // Make callback synchronous if duration is 0\n if (duration === 0) {\n return callback();\n }\n\n var tooltip = instance.popperChildren.tooltip;\n\n var listener = function listener(e) {\n if (e.target === tooltip) {\n toggleTransitionEndListener(tooltip, 'remove', listener);\n callback();\n }\n };\n\n toggleTransitionEndListener(tooltip, 'remove', transitionEndListener);\n toggleTransitionEndListener(tooltip, 'add', listener);\n transitionEndListener = listener;\n }\n /**\n * Adds an event listener to the reference and stores it in `listeners`\n */\n\n\n function on(eventType, handler) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n instance.reference.addEventListener(eventType, handler, options);\n listeners.push({\n eventType: eventType,\n handler: handler,\n options: options\n });\n }\n /**\n * Adds event listeners to the reference based on the `trigger` prop\n */\n\n\n function addTriggersToReference() {\n if (instance.props.touchHold && !instance.props.target) {\n on('touchstart', onTrigger, PASSIVE);\n on('touchend', onMouseLeave, PASSIVE);\n }\n\n instance.props.trigger.trim().split(' ').forEach(function (eventType) {\n if (eventType === 'manual') {\n return;\n }\n\n if (!instance.props.target) {\n on(eventType, onTrigger);\n\n switch (eventType) {\n case 'mouseenter':\n on('mouseleave', onMouseLeave);\n break;\n\n case 'focus':\n on(isIE ? 'focusout' : 'blur', onBlur);\n break;\n }\n } else {\n switch (eventType) {\n case 'mouseenter':\n on('mouseover', onDelegateShow);\n on('mouseout', onDelegateHide);\n break;\n\n case 'focus':\n on('focusin', onDelegateShow);\n on('focusout', onDelegateHide);\n break;\n\n case 'click':\n on(eventType, onDelegateShow);\n break;\n }\n }\n });\n }\n /**\n * Removes event listeners from the reference\n */\n\n\n function removeTriggersFromReference() {\n listeners.forEach(function (_ref) {\n var eventType = _ref.eventType,\n handler = _ref.handler,\n options = _ref.options;\n instance.reference.removeEventListener(eventType, handler, options);\n });\n listeners = [];\n }\n /**\n * Returns inner elements used in show/hide methods\n */\n\n\n function getInnerElements() {\n return [instance.popperChildren.tooltip, instance.popperChildren.backdrop, instance.popperChildren.content];\n }\n /* ======================= 🔑 Public methods 🔑 ======================= */\n\n /**\n * Enables the instance to allow it to show or hide\n */\n\n\n function enable() {\n instance.state.isEnabled = true;\n }\n /**\n * Disables the instance to disallow it to show or hide\n */\n\n\n function disable() {\n instance.state.isEnabled = false;\n }\n /**\n * Clears pending timeouts related to the `delay` prop if any\n */\n\n\n function clearDelayTimeouts() {\n clearTimeout(showTimeoutId);\n clearTimeout(hideTimeoutId);\n }\n /**\n * Sets new props for the instance and redraws the tooltip\n */\n\n\n function set() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n validateOptions(options, Defaults);\n var prevProps = instance.props;\n var nextProps = evaluateProps(instance.reference, _extends({}, instance.props, options, {\n ignoreAttributes: true\n }));\n nextProps.ignoreAttributes = hasOwnProperty(options, 'ignoreAttributes') ? options.ignoreAttributes : prevProps.ignoreAttributes;\n instance.props = nextProps;\n\n if (hasOwnProperty(options, 'trigger') || hasOwnProperty(options, 'touchHold')) {\n removeTriggersFromReference();\n addTriggersToReference();\n }\n\n if (hasOwnProperty(options, 'interactiveDebounce')) {\n cleanupOldMouseListeners();\n debouncedOnMouseMove = debounce(onMouseMove, options.interactiveDebounce);\n }\n\n updatePopperElement(instance.popper, prevProps, nextProps);\n instance.popperChildren = getChildren(instance.popper);\n\n if (instance.popperInstance) {\n instance.popperInstance.update();\n\n if (POPPER_INSTANCE_DEPENDENCIES.some(function (prop) {\n return hasOwnProperty(options, prop);\n })) {\n instance.popperInstance.destroy();\n createPopperInstance();\n\n if (!instance.state.isVisible) {\n instance.popperInstance.disableEventListeners();\n }\n\n if (instance.props.followCursor && lastMouseMoveEvent) {\n positionVirtualReferenceNearCursor(lastMouseMoveEvent);\n }\n }\n }\n }\n /**\n * Shortcut for .set({ content: newContent })\n */\n\n\n function setContent$$1(content) {\n set({\n content: content\n });\n }\n /**\n * Shows the tooltip\n */\n\n\n function show() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getValue(instance.props.duration, 0, Defaults.duration[0]);\n\n if (instance.state.isDestroyed || !instance.state.isEnabled || isUsingTouch && !instance.props.touch) {\n return;\n } // Destroy tooltip if the reference element is no longer on the DOM\n\n\n if (!instance.reference.isVirtual && !document.documentElement.contains(instance.reference)) {\n return destroy();\n } // Do not show tooltip if the reference element has a `disabled` attribute\n\n\n if (instance.reference.hasAttribute('disabled')) {\n return;\n }\n\n if (instance.props.onShow(instance) === false) {\n return;\n }\n\n instance.popper.style.visibility = 'visible';\n instance.state.isVisible = true;\n\n if (instance.props.interactive) {\n instance.reference.classList.add('tippy-active');\n } // Prevent a transition if the popper is at the opposite placement\n\n\n applyTransitionDuration([instance.popper, instance.popperChildren.tooltip, instance.popperChildren.backdrop], 0);\n mount(function () {\n if (!instance.state.isVisible) {\n return;\n } // Arrow will sometimes not be positioned correctly. Force another update\n\n\n if (!hasFollowCursorBehavior()) {\n instance.popperInstance.update();\n } // Allow followCursor: 'initial' on touch devices\n\n\n if (isUsingTouch && instance.props.followCursor === 'initial') {\n positionVirtualReferenceNearCursor(lastMouseMoveEvent);\n }\n\n applyTransitionDuration([instance.popper], props.updateDuration);\n applyTransitionDuration(getInnerElements(), duration);\n\n if (instance.popperChildren.backdrop) {\n instance.popperChildren.content.style.transitionDelay = Math.round(duration / 12) + 'ms';\n }\n\n if (instance.props.sticky) {\n makeSticky();\n }\n\n setVisibilityState(getInnerElements(), 'visible');\n onTransitionedIn(duration, function () {\n instance.popperChildren.tooltip.classList.add('tippy-notransition');\n\n if (instance.props.aria) {\n instance.reference.setAttribute(\"aria-\".concat(instance.props.aria), instance.popper.id);\n }\n\n instance.props.onShown(instance);\n instance.state.isShown = true;\n });\n });\n }\n /**\n * Hides the tooltip\n */\n\n\n function hide() {\n var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getValue(instance.props.duration, 1, Defaults.duration[1]);\n\n if (instance.state.isDestroyed || !instance.state.isEnabled) {\n return;\n }\n\n if (instance.props.onHide(instance) === false) {\n return;\n }\n\n instance.popperChildren.tooltip.classList.remove('tippy-notransition');\n\n if (instance.props.interactive) {\n instance.reference.classList.remove('tippy-active');\n }\n\n instance.popper.style.visibility = 'hidden';\n instance.state.isVisible = false;\n instance.state.isShown = false;\n applyTransitionDuration(getInnerElements(), duration);\n setVisibilityState(getInnerElements(), 'hidden');\n onTransitionedOut(duration, function () {\n if (!isPreparingToShow) {\n removeFollowCursorListener();\n }\n\n if (instance.props.aria) {\n instance.reference.removeAttribute(\"aria-\".concat(instance.props.aria));\n }\n\n instance.popperInstance.disableEventListeners();\n instance.popperInstance.options.placement = instance.props.placement;\n parentNode.removeChild(instance.popper);\n instance.props.onHidden(instance);\n instance.state.isMounted = false;\n });\n }\n /**\n * Destroys the tooltip\n */\n\n\n function destroy(destroyTargetInstances) {\n if (instance.state.isDestroyed) {\n return;\n } // If the popper is currently mounted to the DOM, we want to ensure it gets\n // hidden and unmounted instantly upon destruction\n\n\n if (instance.state.isMounted) {\n hide(0);\n }\n\n removeTriggersFromReference();\n delete instance.reference._tippy;\n\n if (instance.props.target && destroyTargetInstances) {\n arrayFrom(instance.reference.querySelectorAll(instance.props.target)).forEach(function (child) {\n if (child._tippy) {\n child._tippy.destroy();\n }\n });\n }\n\n if (instance.popperInstance) {\n instance.popperInstance.destroy();\n }\n\n instance.state.isDestroyed = true;\n }\n}\n\nfunction group(instances) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$delay = _ref.delay,\n delay = _ref$delay === void 0 ? instances[0].props.delay : _ref$delay,\n _ref$duration = _ref.duration,\n duration = _ref$duration === void 0 ? 0 : _ref$duration;\n\n var isAnyTippyOpen = false;\n instances.forEach(function (instance) {\n instance._originalProps = {\n duration: instance.props.duration,\n onHide: instance.props.onHide,\n onShow: instance.props.onShow,\n onShown: instance.props.onShown\n };\n });\n\n function setIsAnyTippyOpen(value) {\n isAnyTippyOpen = value;\n updateInstances();\n }\n\n function onShow(instance) {\n instance._originalProps.onShow(instance);\n\n instances.forEach(function (instance) {\n instance.set({\n duration: duration\n });\n instance.hide();\n });\n setIsAnyTippyOpen(true);\n }\n\n function onHide(instance) {\n instance._originalProps.onHide(instance);\n\n setIsAnyTippyOpen(false);\n }\n\n function onShown(instance) {\n instance._originalProps.onShown(instance);\n\n instance.set({\n duration: instance._originalProps.duration\n });\n }\n\n function updateInstances() {\n instances.forEach(function (instance) {\n instance.set({\n onShow: onShow,\n onShown: onShown,\n onHide: onHide,\n delay: isAnyTippyOpen ? [0, Array.isArray(delay) ? delay[1] : delay] : delay,\n duration: isAnyTippyOpen ? duration : instance._originalProps.duration\n });\n });\n }\n\n updateInstances();\n}\n\nvar globalEventListenersBound = false;\n/**\n * Exported module\n * @param {String|Element|Element[]|NodeList|Object} targets\n * @param {Object} options\n * @return {Object}\n */\n\nfunction tippy(targets, options) {\n validateOptions(options, Defaults);\n\n if (!globalEventListenersBound) {\n bindGlobalEventListeners();\n globalEventListenersBound = true;\n }\n\n var props = _extends({}, Defaults, options); // If they are specifying a virtual positioning reference, we need to polyfill\n // some native DOM props\n\n\n if (isPlainObject(targets)) {\n polyfillElementPrototypeProperties(targets);\n }\n\n var instances = getArrayOfElements(targets).reduce(function (acc, reference) {\n var instance = reference && createTippy(reference, props);\n\n if (instance) {\n acc.push(instance);\n }\n\n return acc;\n }, []);\n return isSingular(targets) ? instances[0] : instances;\n}\n/**\n * Static props\n */\n\n\ntippy.version = version;\ntippy.defaults = Defaults;\n/**\n * Static methods\n */\n\ntippy.setDefaults = function (partialDefaults) {\n Object.keys(partialDefaults).forEach(function (key) {\n Defaults[key] = partialDefaults[key];\n });\n};\n\ntippy.hideAll = hideAll;\ntippy.group = group;\n/**\n * Auto-init tooltips for elements with a `data-tippy=\"...\"` attribute\n */\n\nfunction autoInit() {\n arrayFrom(document.querySelectorAll('[data-tippy]')).forEach(function (el) {\n var content = el.getAttribute('data-tippy');\n\n if (content) {\n tippy(el, {\n content: content\n });\n }\n });\n}\n\nif (isBrowser) {\n setTimeout(autoInit);\n}\n\n/**\n * Injects a string of CSS styles to a style node in <head>\n * @param {String} css\n */\n\nfunction injectCSS(css) {\n if (isBrowser) {\n var style = document.createElement('style');\n style.type = 'text/css';\n style.textContent = css;\n document.head.insertBefore(style, document.head.firstChild);\n }\n}\n\ninjectCSS(css);\n\nexport default tippy;\n//# sourceMappingURL=index.all.js.map\n","export const missingTippy = 'Using the attachment feature of Shepherd requires the Tippy.js library';\n","import isObjectLike from 'lodash-es/isObjectLike';\nimport isString from 'lodash-es/isString';\nimport isUndefined from 'lodash-es/isUndefined';\nimport zipObject from 'lodash-es/zipObject';\nimport tippy from 'tippy.js';\nimport { missingTippy } from './utils/error-messages';\n\nconst centeredStylePopperModifier = {\n computeStyle: {\n enabled: true,\n fn(data) {\n data.styles = Object.assign({}, data.styles, {\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)'\n });\n\n return data;\n }\n }\n};\n\n// Used to compose settings for tippyOptions.popperOptions (https://atomiks.github.io/tippyjs/#popper-options-option)\nconst defaultPopperOptions = {\n positionFixed: true\n};\n\n/**\n * TODO rewrite the way items are being added to use more performant documentFragment code\n * @param html\n * @return {HTMLElement} The element created from the passed HTML string\n */\nexport function createFromHTML(html) {\n const el = document.createElement('div');\n el.innerHTML = html;\n return el.children[0];\n}\n\n/**\n * Parse the position object or string to return the attachment and element to attach to\n * @param {Object|String} position Either a string or object denoting the selector and position for attachment\n * @return {Object} The object with `element` and `on` for the step\n * @private\n */\nexport function _parseAttachToOpts(opts) {\n if (isObjectLike(opts)) {\n if (opts.hasOwnProperty('element') && opts.hasOwnProperty('on')) {\n return opts;\n }\n return null;\n }\n\n const positionRe = /^(.+) ((auto|top|left|right|bottom)(-start|-end)?)$/;\n const matches = positionRe.exec(opts);\n\n if (!matches) {\n return null;\n }\n\n return {\n element: matches[1],\n on: matches[2]\n };\n}\n\n/**\n * @param obj\n * @param {Array} props\n * @return {*}\n */\nexport function parseShorthand(obj, props) {\n if (obj === null || isUndefined(obj)) {\n return obj;\n } else if (isObjectLike(obj)) {\n return obj;\n }\n\n const values = obj.split(' ');\n return zipObject(props, values);\n}\n\n/**\n * Determines options for the tooltip and initializes\n * `this.tooltip` as a Tippy.js instance.\n */\nexport function setupTooltip() {\n if (isUndefined(tippy)) {\n throw new Error(missingTippy);\n }\n\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n\n const attachToOpts = this.parseAttachTo();\n\n this.tooltip = _makeTippyInstance.call(this, attachToOpts);\n\n this.target = attachToOpts.element || document.body;\n\n this.el.classList.add('shepherd-element');\n}\n\n/**\n * Passes `options.attachTo` to `_parseAttachToOpts` to get the correct `attachTo` format\n * @returns {({} & {element, on}) | ({})}\n * `element` is a qualified HTML Element\n * `on` is a string position value\n */\nexport function parseAttachTo() {\n const options = _parseAttachToOpts(this.options.attachTo) || {};\n const returnOpts = Object.assign({}, options);\n\n if (isString(options.element)) {\n // Can't override the element in user opts reference because we can't\n // guarantee that the element will exist in the future.\n try {\n returnOpts.element = document.querySelector(options.element);\n } catch(e) {\n // TODO\n }\n if (!returnOpts.element) {\n console.error(`The element for this Shepherd step was not found ${options.element}`);\n }\n }\n\n return returnOpts;\n}\n\n/**\n * Generates a `Tippy` instance from a set of base `attachTo` options\n *\n * @return {tippy} The final tippy instance\n * @private\n */\nfunction _makeTippyInstance(attachToOptions) {\n if (!attachToOptions.element) {\n return _makeCenteredTippy.call(this);\n }\n\n const tippyOptions = _makeAttachedTippyOptions.call(this, attachToOptions);\n\n return tippy(attachToOptions.element, tippyOptions);\n}\n\n/**\n * Generates the hash of options that will be passed to `Tippy` instances\n * target an element in the DOM.\n *\n * @param {Object} attachToOptions The local `attachTo` options\n * @return {Object} The final tippy options object\n * @private\n */\nfunction _makeAttachedTippyOptions(attachToOptions) {\n const resultingTippyOptions = {\n content: this.el,\n placement: attachToOptions.on || 'right',\n ...this.options.tippyOptions\n };\n\n if (this.options.tippyOptions && this.options.tippyOptions.popperOptions) {\n Object.assign(defaultPopperOptions, this.options.tippyOptions.popperOptions);\n }\n\n resultingTippyOptions.popperOptions = defaultPopperOptions;\n\n return resultingTippyOptions;\n}\n\n/**\n * Generates a `Tippy` instance for a tooltip that doesn't have a\n * target element in the DOM -- and thus is positioned in the center\n * of the view\n *\n * @return {tippy} The final tippy instance\n * @private\n */\nfunction _makeCenteredTippy() {\n const tippyOptions = {\n content: this.el,\n placement: 'top',\n ...this.options.tippyOptions\n };\n\n tippyOptions.arrow = false;\n tippyOptions.popperOptions = tippyOptions.popperOptions || {};\n\n const finalPopperOptions = Object.assign(\n {},\n defaultPopperOptions,\n tippyOptions.popperOptions,\n {\n modifiers: Object.assign(\n centeredStylePopperModifier,\n tippyOptions.popperOptions.modifiers\n )\n }\n );\n\n tippyOptions.popperOptions = finalPopperOptions;\n\n return tippy(document.body, tippyOptions);\n}\n","/**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\nfunction baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n}\n\nexport default baseZipObject;\n","import assignValue from './_assignValue.js';\nimport baseZipObject from './_baseZipObject.js';\n\n/**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\nfunction zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n}\n\nexport default zipObject;\n","import { parseShorthand } from './utils.js';\nimport forOwn from 'lodash-es/forOwn';\nimport isString from 'lodash-es/isString';\nimport isUndefined from 'lodash-es/isUndefined';\n\n/**\n * Sets up the handler to determine if we should advance the tour\n * @private\n */\nfunction _setupAdvanceOnHandler(selector) {\n return (event) => {\n if (this.isOpen()) {\n const targetIsEl = this.el && event.target === this.el;\n const targetIsSelector = !isUndefined(selector) && event.target.matches(selector);\n\n if (targetIsSelector || targetIsEl) {\n this.tour.next();\n }\n }\n };\n}\n\n/**\n * Bind the event handler for advanceOn\n */\nexport function bindAdvance() {\n // An empty selector matches the step element\n const { event, selector } = parseShorthand(this.options.advanceOn, ['selector', 'event']);\n const handler = _setupAdvanceOnHandler.call(this, selector);\n\n // TODO: this should also bind/unbind on show/hide\n const el = document.querySelector(selector);\n if (!isUndefined(selector) && el) {\n el.addEventListener(event, handler);\n } else {\n document.body.addEventListener(event, handler, true);\n }\n this.on('destroy', () => {\n return document.body.removeEventListener(event, handler, true);\n });\n}\n\n/**\n * Bind events to the buttons for next, back, etc\n * @param {Object} cfg An object containing the config options for the button\n * @param {HTMLElement} el The element for the button\n */\nexport function bindButtonEvents(cfg, el) {\n cfg.events = cfg.events || {};\n if (!isUndefined(cfg.action)) {\n // Including both a click event and an action is not supported\n cfg.events.click = cfg.action;\n }\n\n forOwn(cfg.events, (handler, event) => {\n if (isString(handler)) {\n const page = handler;\n handler = () => this.tour.show(page);\n }\n el.dataset.buttonEvent = true;\n el.addEventListener(event, handler);\n\n // Cleanup event listeners on destroy\n this.on('destroy', () => {\n el.removeAttribute('data-button-event');\n el.removeEventListener(event, handler);\n });\n });\n}\n\n/**\n * Add a click listener to the cancel link that cancels the tour\n * @param {HTMLElement} link The cancel link element\n */\nexport function bindCancelLink(link) {\n link.addEventListener('click', (e) => {\n e.preventDefault();\n this.cancel();\n });\n}\n\n/**\n * Take an array of strings and look up methods by name, then bind them to `this`\n * @param {String[]} methods The names of methods to bind\n */\nexport function bindMethods(methods) {\n methods.map((method) => {\n this[method] = this[method].bind(this);\n });\n}\n","import forOwn from 'lodash-es/forOwn';\nimport isElement from 'lodash-es/isElement';\nimport isEmpty from 'lodash-es/isEmpty';\nimport isFunction from 'lodash-es/isFunction';\nimport isString from 'lodash-es/isString';\nimport isUndefined from 'lodash-es/isUndefined';\nimport { Evented } from './evented.js';\nimport 'element-matches';\nimport { bindAdvance, bindButtonEvents, bindCancelLink, bindMethods } from './bind.js';\nimport { createFromHTML, setupTooltip, parseAttachTo } from './utils.js';\n\n/**\n * Creates incremented ID for each newly created step\n *\n * @private\n * @return {Number} The unique id for the step\n */\nconst uniqueId = (function() {\n let id = 0;\n return function() {\n return ++id;\n };\n})();\n\n/**\n * Class representing steps to be added to a tour\n * @extends {Evented}\n */\nexport class Step extends Evented {\n /**\n * Create a step\n * @param {Tour} tour The tour for the step\n * @param {Object} options The options for the step\n * @param {Object|string} options.attachTo What element the step should be attached to on the page.\n * It can either be a string of the form \"element on\", or an object with those properties.\n * For example: \".some #element left\", or {element: '.some #element', on: 'left'}.\n * If you use the object syntax, element can also be a DOM element. If you don’t specify an attachTo the\n * element will appear in the middle of the screen.\n * @param {HTMLElement|string} options.attachTo.element\n * @param {string} options.attachTo.on\n * @param {Object|string} options.advanceOn An action on the page which should advance shepherd to the next step.\n * It can be of the form `\"selector event\"`, or an object with those properties.\n * For example: `\".some-element click\"`, or `{selector: '.some-element', event: 'click'}`.\n * It doesn’t have to be an event inside the tour, it can be any event fired on any element on the page.\n * You can also always manually advance the Tour by calling `myTour.next()`.\n * @param {function} options.beforeShowPromise A function that returns a promise.\n * When the promise resolves, the rest of the `show` code for the step will execute.\n * @param {Object[]} options.buttons An array of buttons to add to the step. These will be rendered in a\n * footer below the main body text.\n * @param {function} options.buttons.button.action A function executed when the button is clicked on\n * @param {string} options.buttons.button.classes Extra classes to apply to the `<a>`\n * @param {Object} options.buttons.button.events A hash of events to bind onto the button, for example\n * `{'mouseover': function(){}}`. Adding a `click` event to events when you already have an `action` specified is not supported.\n * You can use events to skip steps or navigate to specific steps, with something like:\n * ```js\n * events: {\n * click: function() {\n * return Shepherd.activeTour.show('some_step_name');\n * }\n * }\n * ```\n * @param {string} options.buttons.button.text The HTML text of the button\n * @param {string} options.classes A string of extra classes to add to the step's content element.\n * @param {string} options.highlightClass An extra class to apply to the `attachTo` element when it is\n * highlighted (that is, when its step is active). You can then target that selector in your CSS.\n * @param {Object} options.tippyOptions Extra [options to pass to tippy.js]{@link https://atomiks.github.io/tippyjs/#all-options}\n * @param {boolean} options.scrollTo Should the element be scrolled to when this step is shown?\n * @param {function} options.scrollToHandler A function that lets you override the default scrollTo behavior and\n * define a custom action to do the scrolling, and possibly other logic.\n * @param {boolean} options.showCancelLink Should a cancel “✕” be shown in the header of the step?\n * @param {function} options.showOn A function that, when it returns `true`, will show the step.\n * If it returns false, the step will be skipped.\n * @param {string} options.text The text in the body of the step. It can be one of four types:\n * ```\n * - HTML string\n * - Array of HTML strings\n * - `HTMLElement` object\n * - `Function` to be executed when the step is built. It must return one of the three options above.\n * ```\n * @param {string} options.title The step's title. It becomes an `h3` at the top of the step.\n * @param {Object} options.when You can define `show`, `hide`, etc events inside `when`. For example:\n * ```js\n * when: {\n * show: function() {\n * window.scrollTo(0, 0);\n * }\n * }\n * ```\n * @return {Step} The newly created Step instance\n */\n constructor(tour, options) {\n super(tour, options);\n this.tour = tour;\n bindMethods.call(this, [\n '_show',\n 'cancel',\n 'complete',\n 'destroy',\n 'hide',\n 'isOpen',\n 'scrollTo',\n 'setupElements',\n 'show'\n ]);\n this.setOptions(options);\n this.bindAdvance = bindAdvance.bind(this);\n this.bindButtonEvents = bindButtonEvents.bind(this);\n this.bindCancelLink = bindCancelLink.bind(this);\n this.setupTooltip = setupTooltip.bind(this);\n this.parseAttachTo = parseAttachTo.bind(this);\n\n return this;\n }\n\n /**\n * Adds buttons to the step as passed into options\n *\n * @private\n * @param {HTMLElement} content The element for the step, to append the footer with buttons to\n */\n _addButtons(content) {\n if (!isEmpty(this.options.buttons)) {\n const footer = document.createElement('footer');\n const buttons = createFromHTML('<ul class=\"shepherd-buttons\"></ul>');\n\n footer.classList.add('shepherd-footer');\n\n this.options.buttons.map((cfg) => {\n const button = createFromHTML(`<li><a class=\"shepherd-button ${cfg.classes || ''}\" tabindex=\"0\">${cfg.text}</a>`);\n buttons.appendChild(button);\n this.bindButtonEvents(cfg, button.querySelector('a'));\n });\n\n footer.appendChild(buttons);\n content.appendChild(footer);\n }\n }\n\n /**\n * Adds the \"x\" button to cancel the tour\n * @param {HTMLElement} element The step element\n * @param {HTMLElement} header The header element for the step\n * @private\n */\n _addCancelLink(element, header) {\n if (this.options.showCancelLink) {\n const link = createFromHTML('<a href class=\"shepherd-cancel-link\"></a>');\n header.appendChild(link);\n\n element.classList.add('shepherd-has-cancel-link');\n this.bindCancelLink(link);\n }\n }\n\n /**\n * Adds text passed in as options\n *\n * @private\n * @param {HTMLElement} content The content to append the text to\n */\n _addContent(content) {\n const text = createFromHTML('<div class=\"shepherd-text\"></div>');\n let paragraphs = this.options.text;\n\n if (isFunction(paragraphs)) {\n paragraphs = paragraphs.call(this, text);\n }\n\n if (paragraphs instanceof HTMLElement) {\n text.appendChild(paragraphs);\n } else {\n if (isString(paragraphs)) {\n paragraphs = [paragraphs];\n }\n\n paragraphs.map((paragraph) => {\n text.innerHTML += `<p>${paragraph}</p>`;\n });\n }\n\n content.appendChild(text);\n }\n\n /**\n * Creates Shepherd element for step based on options\n *\n * @private\n * @return {HTMLElement} The DOM element for the step tooltip\n */\n _createTooltipContent() {\n const content = document.createElement('div');\n const classes = this.options.classes || '';\n const element = createFromHTML(`<div class=\"${classes}\" data-shepherd-step-id=\"${this.id}\">`);\n const header = document.createElement('header');\n\n if (this.options.title) {\n const title = document.createElement('h3');\n title.classList.add('shepherd-title');\n title.innerHTML = `${this.options.title}`;\n header.appendChild(title);\n element.classList.add('shepherd-has-title');\n }\n\n content.classList.add('shepherd-content');\n header.classList.add('shepherd-header');\n element.appendChild(content);\n content.appendChild(header);\n\n if (!isUndefined(this.options.text)) {\n this._addContent(content);\n }\n\n this._addButtons(content);\n this._addCancelLink(element, header);\n\n return element;\n }\n\n /**\n * Returns the tour for the step\n * @return {Tour} The tour instance\n */\n getTour() {\n return this.tour;\n }\n\n /**\n * Cancel the tour\n * Triggers the `cancel` event\n */\n cancel() {\n this.tour.cancel();\n this.trigger('cancel');\n }\n\n /**\n * Complete the tour\n * Triggers the `complete` event\n */\n complete() {\n this.tour.complete();\n this.trigger('complete');\n }\n\n /**\n * Remove the step, delete the step's element, and destroy the tippy instance for the step\n * Triggers `destroy` event\n */\n destroy() {\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n\n if (isElement(this.el) && this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n this.el = null;\n }\n\n if (this.target) {\n this._updateStepTargetOnHide();\n }\n\n this.trigger('destroy');\n }\n\n /**\n * Hide the step and destroy the tippy instance\n */\n hide() {\n this.tour.modal.hide();\n\n this.trigger('before-hide');\n\n document.body.removeAttribute('data-shepherd-step');\n\n if (this.target) {\n this._updateStepTargetOnHide();\n }\n\n if (this.tooltip) {\n this.tooltip.hide();\n }\n\n this.trigger('hide');\n }\n\n /**\n * Check if the step is open and visible\n * @return {boolean} True if the step is open and visible\n */\n isOpen() {\n return Boolean(\n this.tooltip &&\n this.tooltip.state &&\n this.tooltip.state.isVisible\n );\n }\n\n /**\n * Create the element and set up the tippy instance\n */\n setupElements() {\n if (!isUndefined(this.el)) {\n this.destroy();\n }\n\n this.el = this._createTooltipContent();\n\n if (this.options.advanceOn) {\n this.bindAdvance();\n }\n\n this.setupTooltip();\n }\n\n /**\n * If a custom scrollToHandler is defined, call that, otherwise do the generic\n * scrollIntoView call.\n */\n scrollTo() {\n const { element } = this.parseAttachTo();\n\n if (isFunction(this.options.scrollToHandler)) {\n this.options.scrollToHandler(element);\n } else if (isElement(element)) {\n element.scrollIntoView();\n }\n }\n\n /**\n * Sets the options for the step, maps `when` to events, sets up buttons\n * @param {Object} options The options for the step\n */\n setOptions(options = {}) {\n this.options = options;\n const { when } = this.options;\n\n this.destroy();\n this.id = this.options.id || `step-${uniqueId()}`;\n\n forOwn(when, (handler, event) => {\n this.on(event, handler, this);\n });\n }\n\n /**\n * Wraps `_show` and ensures `beforeShowPromise` resolves before calling show\n * @return {*|Promise}\n */\n show() {\n if (isFunction(this.options.beforeShowPromise)) {\n const beforeShowPromise = this.options.beforeShowPromise();\n if (!isUndefined(beforeShowPromise)) {\n return beforeShowPromise.then(() => this._show());\n }\n }\n this._show();\n }\n\n /**\n * Triggers `before-show`, generates the tooltip DOM content,\n * sets up a tippy instance for the tooltip, then triggers `show`.\n * @private\n */\n _show() {\n this.tour.beforeShowStep(this);\n this.trigger('before-show');\n\n if (!this.el) {\n this.setupElements();\n }\n\n this.target.classList.add('shepherd-enabled', 'shepherd-target');\n\n document.body.setAttribute('data-shepherd-step', this.id);\n\n if (this.options.scrollTo) {\n setTimeout(() => {\n this.scrollTo();\n });\n }\n\n this.tooltip.show();\n this.trigger('show');\n }\n\n _updateStepTargetOnHide() {\n if (this.options.highlightClass) {\n this.target.classList.remove(this.options.highlightClass);\n }\n\n this.target.classList.remove('shepherd-enabled', 'shepherd-target');\n }\n}\n","const svgNS = 'http://www.w3.org/2000/svg';\n\nconst elementIds = {\n modalOverlay: 'shepherdModalOverlayContainer',\n modalOverlayMask: 'shepherdModalMask',\n modalOverlayMaskRect: 'shepherdModalMaskRect',\n modalOverlayMaskOpening: 'shepherdModalMaskOpening'\n};\n\nconst classNames = {\n isVisible: 'shepherd-modal-is-visible',\n modalTarget: 'shepherd-modal-target'\n};\n\n/**\n * <svg id=\"shepherdModalOverlayContainer\" xmlns=\"http://www.w3.org/2000/svg\">\n */\nfunction _createModalContainer() {\n const element = document.createElementNS(svgNS, 'svg');\n\n element.setAttributeNS(null, 'id', elementIds.modalOverlay);\n\n return element;\n}\n\n/**\n * <mask id=\"shepherdModalMask\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">\n */\nfunction _createMaskContainer() {\n const element = document.createElementNS(svgNS, 'mask');\n\n _setAttributes(element, {\n height: '100%',\n id: elementIds.modalOverlayMask,\n width: '100%',\n x: '0',\n y: '0'\n });\n\n return element;\n}\n\n/**\n * <rect id=\"modalOverlayMaskRect\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"#FFFFFF\"/>\n */\nfunction _createMaskRect() {\n const element = document.createElementNS(svgNS, 'rect');\n\n _setAttributes(element, {\n fill: '#FFFFFF',\n height: '100%',\n id: elementIds.modalOverlayMaskRect,\n width: '100%',\n x: '0',\n y: '0'\n });\n\n return element;\n}\n\n/**\n * <rect id=\"shepherdModalMaskOpening\" fill=\"#000000\"/>\n */\nfunction _createMaskOpening() {\n const element = document.createElementNS(svgNS, 'rect');\n\n _setAttributes(element, {\n fill: '#000000',\n id: elementIds.modalOverlayMaskOpening\n });\n\n return element;\n}\n\n/**\n * <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" mask=\"url(#shepherdModalMask)\"/>\n */\nfunction _createMaskConsumer() {\n const element = document.createElementNS(svgNS, 'rect');\n\n _setAttributes(element, {\n height: '100%',\n width: '100%',\n x: '0',\n y: '0'\n });\n element.setAttribute('mask', `url(#${elementIds.modalOverlayMask})`);\n\n return element;\n}\n\n/**\n * Generates an SVG with the following structure:\n * ```html\n * <svg id=\"shepherdModalOverlayContainer\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <mask id=\"shepherdModalMask\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" >\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"#FFFFFF\"/>\n <!-- This element will \"punch a hole\" through the mask by preventing it from rendering within the perimeter -->\n <rect id=\"shepherdModalMaskOpening\"/>\n </mask>\n </defs>\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" mask=\"url(#shepherdModalMask)\"/>\n </svg>\n * ```\n */\nfunction createModalOverlay() {\n const containerElement = _createModalContainer();\n const defsElement = document.createElementNS(svgNS, 'defs');\n const maskContainer = _createMaskContainer();\n const maskRect = _createMaskRect();\n const maskOpening = _createMaskOpening();\n const maskConsumer = _createMaskConsumer();\n\n maskContainer.appendChild(maskRect);\n maskContainer.appendChild(maskOpening);\n\n defsElement.appendChild(maskContainer);\n\n containerElement.appendChild(defsElement);\n containerElement.appendChild(maskConsumer);\n\n return containerElement;\n}\n\n/**\n * Uses the bounds of the element we want the opening overtop of to set the dimensions of the opening and position it\n * @param {HTMLElement} targetElement The element the opening will expose\n * @param {SVGElement} openingElement The svg mask for the opening\n */\nfunction positionModalOpening(targetElement, openingElement) {\n if (targetElement.getBoundingClientRect && openingElement instanceof SVGElement) {\n const { x, y, width, height, left, top } = targetElement.getBoundingClientRect();\n\n // getBoundingClientRect is not consistent. Some browsers use x and y, while others use left and top\n _setAttributes(openingElement, { x: x || left, y: y || top, width, height });\n }\n}\n\nfunction closeModalOpening(openingElement) {\n if (openingElement && openingElement instanceof SVGElement) {\n _setAttributes(openingElement, {\n height: '0',\n x: '0',\n y: '0',\n width: '0'\n });\n }\n}\n\nfunction getModalMaskOpening(modalElement) {\n return modalElement.querySelector(`#${elementIds.modalOverlayMaskOpening}`);\n}\n\nfunction preventModalBodyTouch(event) {\n event.preventDefault();\n}\n\nfunction preventModalOverlayTouch(event) {\n event.stopPropagation();\n}\n\n/**\n * Remove any leftover modal target classes and add the modal target class to the currentElement\n * @param {HTMLElement} currentElement The element for the current step\n */\nfunction toggleShepherdModalClass(currentElement) {\n const shepherdModal = document.querySelector(`${classNames.modalTarget}`);\n\n if (shepherdModal) {\n shepherdModal.classList.remove(classNames.modalTarget);\n }\n\n currentElement.classList.add(classNames.modalTarget);\n}\n\n/**\n * Set multiple attributes on an element, via a hash\n * @param {HTMLElement|SVGElement} el The element to set the attributes on\n * @param {Object} attrs A hash of key value pairs for attributes to set\n * @private\n */\nfunction _setAttributes(el, attrs) {\n Object.keys(attrs).forEach((key) => {\n el.setAttribute(key, attrs[key]);\n });\n}\n\nexport {\n createModalOverlay,\n positionModalOpening,\n preventModalBodyTouch,\n preventModalOverlayTouch,\n closeModalOpening,\n getModalMaskOpening,\n elementIds,\n classNames,\n toggleShepherdModalClass\n};\n","import { elementIds } from './modal';\nimport { preventModalBodyTouch, preventModalOverlayTouch } from './modal';\n\n/**\n * Helper method to check if element is hidden, since we cannot use :visible without jQuery\n * @param {HTMLElement} element The element to check for visibility\n * @returns {boolean} true if element is hidden\n * @private\n */\nfunction elementIsHidden(element) {\n return element.offsetWidth === 0 && element.offsetHeight === 0;\n}\n\n/**\n * Get the element from an option object\n *\n * @method getElementFromObject\n * @param Object attachTo\n * @returns {Element}\n * @private\n */\nfunction getElementFromObject(attachTo) {\n const op = attachTo.element;\n\n if (op instanceof HTMLElement) {\n return op;\n }\n\n return document.querySelector(op);\n}\n\n/**\n * Return the element for a step\n *\n * @method getElementForStep\n * @param step step the step to get an element for\n * @returns {Element} the element for this step\n * @private\n */\nfunction getElementForStep(step) {\n const { options: { attachTo } } = step;\n\n if (!attachTo) {\n return null;\n }\n\n const type = typeof attachTo;\n\n let element;\n\n if (type === 'string') {\n element = getElementFromString(attachTo);\n } else if (type === 'object') {\n element = getElementFromObject(attachTo);\n } else {\n /* istanbul ignore next: cannot test undefined attachTo, but it does work! */\n element = null;\n }\n return element;\n}\n\n/**\n * Get the element from an option string\n *\n * @method getElementFromString\n * @param element the string in the step configuration\n * @returns {Element} the element from the string\n * @private\n */\nfunction getElementFromString(element) {\n const [selector] = element.split(' ');\n\n return document.querySelector(selector);\n}\n\nfunction addStepEventListeners() {\n if (typeof this._onScreenChange === 'function') {\n window.removeEventListener('resize', this._onScreenChange, false);\n window.removeEventListener('scroll', this._onScreenChange, true);\n }\n\n window.addEventListener('resize', this._onScreenChange, false);\n window.addEventListener('scroll', this._onScreenChange, true);\n\n const overlay = document.querySelector(`#${elementIds.modalOverlay}`);\n // Prevents window from moving on touch.\n window.addEventListener('touchmove', preventModalBodyTouch, { passive: false });\n\n // Allows content to move on touch.\n if (overlay) {\n overlay.addEventListener('touchmove', preventModalOverlayTouch, false);\n }\n}\n\nexport {\n addStepEventListeners,\n elementIsHidden,\n getElementForStep\n};\n","import root from './_root.js';\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import isObject from './isObject.js';\nimport now from './now.js';\nimport toNumber from './toNumber.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nexport default debounce;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import baseDelay from './_baseDelay.js';\nimport baseRest from './_baseRest.js';\n\n/**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\nvar defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n});\n\nexport default defer;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\nfunction baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n}\n\nexport default baseDelay;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import {\n getModalMaskOpening,\n createModalOverlay,\n positionModalOpening,\n closeModalOpening,\n classNames as modalClassNames\n} from './utils/modal';\nimport { addStepEventListeners, getElementForStep } from './utils/dom';\nimport debounce from 'lodash-es/debounce';\nimport defer from 'lodash-es/defer';\n\nexport class Modal {\n constructor(options) {\n if (!this._modalOverlayElem) {\n this._modalOverlayElem = createModalOverlay();\n this._modalOverlayOpening = getModalMaskOpening(this._modalOverlayElem);\n\n // don't show yet -- each step will control that\n this.hide();\n\n document.body.appendChild(this._modalOverlayElem);\n }\n\n this.options = options;\n\n return this;\n }\n\n /**\n * Removes svg mask from modal overlay and removes classes for modal being visible\n */\n cleanup() {\n defer(() => {\n const element = this._modalOverlayElem;\n\n if (element && element instanceof SVGElement) {\n element.parentNode.removeChild(element);\n }\n\n this._modalOverlayElem = null;\n document.body.classList.remove(modalClassNames.isVisible);\n });\n }\n\n /**\n * Hide the modal overlay\n */\n hide() {\n document.body.classList.remove(modalClassNames.isVisible);\n\n if (this._modalOverlayElem) {\n this._modalOverlayElem.style.display = 'none';\n }\n }\n\n /**\n * If modal is enabled, setup the svg mask opening and modal overlay for the step\n * @param step\n */\n setupForStep(step) {\n if (this.options.useModalOverlay) {\n this._styleForStep(step);\n this.show();\n\n } else {\n this.hide();\n }\n }\n\n /**\n * Show the modal overlay\n */\n show() {\n document.body.classList.add(modalClassNames.isVisible);\n\n if (this._modalOverlayElem) {\n this._modalOverlayElem.style.display = 'block';\n }\n }\n\n /**\n * Style the modal for the step\n * @param {Step} step The step to style the opening for\n * @private\n */\n _styleForStep(step) {\n const modalOverlayOpening = this._modalOverlayOpening;\n const targetElement = getElementForStep(step);\n\n if (targetElement) {\n positionModalOpening(targetElement, modalOverlayOpening);\n\n this._onScreenChange = debounce(\n positionModalOpening.bind(this, targetElement, modalOverlayOpening),\n 0,\n { leading: false, trailing: true } // see https://lodash.com/docs/#debounce\n );\n\n addStepEventListeners.call(this);\n\n } else {\n closeModalOpening(this._modalOverlayOpening);\n }\n }\n}","export const defaults = {\n trigger: 'manual',\n arrow: true,\n animation: 'fade',\n duration: 420,\n flip: true,\n animateFill: false, // https://atomiks.github.io/tippyjs/#animate-fill-option\n interactive: true, // https://atomiks.github.io/tippyjs/#interactive-option\n hideOnClick: 'toggle', // https://atomiks.github.io/tippyjs/#hide-on-click-option\n multiple: true // https://atomiks.github.io/tippyjs/#multiple-option\n};\n","import isEmpty from 'lodash-es/isEmpty';\nimport isFunction from 'lodash-es/isFunction';\nimport isNumber from 'lodash-es/isNumber';\nimport isString from 'lodash-es/isString';\nimport isUndefined from 'lodash-es/isUndefined';\nimport { Evented } from './evented.js';\nimport { Modal } from './modal.js';\nimport { Step } from './step.js';\nimport { bindMethods } from './bind.js';\nimport tippy from 'tippy.js';\nimport { defaults as tooltipDefaults } from './utils/tooltip-defaults';\n\nimport {\n cleanupSteps,\n cleanupStepEventListeners\n} from './utils/cleanup';\n\nimport {\n addStepEventListeners,\n getElementForStep\n} from './utils/dom';\n\nimport {\n toggleShepherdModalClass\n} from './utils/modal';\n\n/**\n * Creates incremented ID for each newly created tour\n *\n * @private\n * @return {Number} The unique id for the tour\n */\nconst uniqueId = (function() {\n let id = 0;\n return function() {\n return ++id;\n };\n})();\n\nconst Shepherd = new Evented();\n\n/**\n * Class representing the site tour\n * @extends {Evented}\n */\nexport class Tour extends Evented {\n /**\n * @param {Object} options The options for the tour\n * @param {Object} options.defaultStepOptions Default options for Steps created through `addStep`\n * @param {Step[]} options.steps An array of Step instances to initialize the tour with\n * @param {string} options.tourName An optional \"name\" for the tour. This will be appended to the the tour's\n * dynamically generated `id` property -- which is also set on the `body` element as the `data-shepherd-active-tour` attribute\n * whenever the tour becomes active.\n * @param {boolean} options.useModalOverlay Whether or not steps should be placed above a darkened\n * modal overlay. If true, the overlay will create an opening around the target element so that it\n * can remain interactive\n * @returns {Tour}\n */\n constructor(options = {}) {\n super(options);\n bindMethods.call(this, [\n 'back',\n 'cancel',\n 'complete',\n 'hide',\n 'next'\n ]);\n this.options = options;\n this.steps = this.options.steps || [];\n\n // Pass these events onto the global Shepherd object\n const events = ['active', 'cancel', 'complete', 'inactive', 'show', 'start'];\n events.map((event) => {\n ((e) => {\n this.on(e, (opts) => {\n opts = opts || {};\n opts.tour = this;\n Shepherd.trigger(e, opts);\n });\n })(event);\n });\n\n this.modal = new Modal(options);\n\n this._setTooltipDefaults();\n this._setTourID();\n\n return this;\n }\n\n /**\n * Adds a new step to the tour\n * @param {Object|Number|Step|String} arg1\n * When arg2 is defined, arg1 can either be a string or number, to use for the `id` for the step\n * When arg2 is undefined, arg1 is either an object containing step options or a Step instance\n * @param {Object|Step} arg2 An object containing step options or a Step instance\n * @return {Step} The newly added step\n */\n addStep(arg1, arg2) {\n let name, step;\n\n // If we just have one argument, we can assume it is an object of step options, with an id\n if (isUndefined(arg2)) {\n step = arg1;\n } else {\n name = arg1;\n step = arg2;\n }\n\n if (!(step instanceof Step)) {\n step = this.setupStep(step, name);\n } else {\n step.tour = this;\n }\n\n this.steps.push(step);\n return step;\n }\n\n /**\n * Go to the previous step in the tour\n */\n back() {\n const index = this.steps.indexOf(this.currentStep);\n this.show(index - 1, false);\n }\n\n /**\n * Calls done() triggering the 'cancel' event\n * If `confirmCancel` is true, will show a window.confirm before cancelling\n */\n cancel() {\n if (this.options.confirmCancel) {\n const cancelMessage = this.options.confirmCancelMessage || 'Are you sure you want to stop the tour?';\n const stopTour = window.confirm(cancelMessage);\n if (stopTour) {\n this.done('cancel');\n }\n } else {\n this.done('cancel');\n }\n }\n\n /**\n * Calls done() triggering the `complete` event\n */\n complete() {\n this.done('complete');\n }\n\n /**\n * Called whenever the tour is cancelled or completed, basically anytime we exit the tour\n * @param {String} event The event name to trigger\n */\n done(event) {\n if (!isEmpty(this.steps)) {\n this.steps.forEach((step) => step.destroy());\n }\n\n cleanupStepEventListeners.call(this);\n cleanupSteps(this.tourObject);\n this.modal.cleanup();\n\n this.trigger(event);\n\n Shepherd.activeTour = null;\n this._removeBodyAttrs();\n this.trigger('inactive', { tour: this });\n }\n\n /**\n * Gets the step from a given id\n * @param {Number|String} id The id of the step to retrieve\n * @return {Step} The step corresponding to the `id`\n */\n getById(id) {\n return this.steps.find((step) => {\n return step.id === id;\n });\n }\n\n /**\n * Gets the current step\n * @returns {Step|null}\n */\n getCurrentStep() {\n return this.currentStep;\n }\n\n /**\n * Hide the current step\n */\n hide() {\n const currentStep = this.getCurrentStep();\n\n if (currentStep) {\n return currentStep.hide();\n }\n }\n\n isActive() {\n return Shepherd.activeTour === this;\n }\n\n /**\n * Go to the next step in the tour\n * If we are at the end, call `complete`\n */\n next() {\n const index = this.steps.indexOf(this.currentStep);\n\n if (index === this.steps.length - 1) {\n this.complete();\n } else {\n this.show(index + 1, true);\n }\n }\n\n /**\n * Removes the step from the tour\n * @param {String} name The id for the step to remove\n */\n removeStep(name) {\n const current = this.getCurrentStep();\n\n // Find the step, destroy it and remove it from this.steps\n this.steps.some((step, i) => {\n if (step.id === name) {\n if (step.isOpen()) {\n step.hide();\n }\n\n step.destroy();\n this.steps.splice(i, 1);\n\n return true;\n }\n });\n\n if (current && current.id === name) {\n this.currentStep = undefined;\n\n // If we have steps left, show the first one, otherwise just cancel the tour\n this.steps.length ? this.show(0) : this.cancel();\n }\n }\n\n /**\n * Setup a new step object\n * @param {Object} stepOptions The object describing the options for the step\n * @param {String|Number} name The string or number to use as the `id` for the step\n * @return {Step} The step instance\n */\n setupStep(stepOptions, name) {\n if (isString(name) || isNumber(name)) {\n stepOptions.id = name.toString();\n }\n\n stepOptions = Object.assign({}, this.options.defaultStepOptions, stepOptions);\n\n return new Step(this, stepOptions);\n }\n\n beforeShowStep(step) {\n this.modal.setupForStep(step);\n this._styleTargetElementForStep(step);\n }\n\n /**\n * Show a specific step in the tour\n * @param {Number|String} key The key to look up the step by\n * @param {Boolean} forward True if we are going forward, false if backward\n */\n show(key = 0, forward = true) {\n const step = isString(key) ? this.getById(key) : this.steps[key];\n\n if (step) {\n this._updateStateBeforeShow();\n\n const shouldSkipStep = isFunction(step.options.showOn) && !step.options.showOn();\n\n // If `showOn` returns false, we want to skip the step, otherwise, show the step like normal\n if (shouldSkipStep) {\n this._skipStep(step, forward);\n } else {\n this.trigger('show', {\n step,\n previous: this.currentStep\n });\n\n this.currentStep = step;\n step.show();\n }\n }\n }\n\n /**\n * Start the tour\n */\n start() {\n this.trigger('start');\n\n this.currentStep = null;\n this._setupActiveTour();\n addStepEventListeners.call(this);\n this.next();\n }\n\n /**\n * Make this tour \"active\"\n * @private\n */\n _setupActiveTour() {\n this._addBodyAttrs();\n this.trigger('active', { tour: this });\n\n Shepherd.activeTour = this;\n }\n\n /**\n * Modulates the styles of the passed step's target element, based on the step's options and\n * the tour's `modal` option, to visually emphasize the element\n *\n * @param step The step object that attaches to the element\n * @private\n */\n _styleTargetElementForStep(step) {\n const targetElement = getElementForStep(step);\n\n if (!targetElement) {\n return;\n }\n\n toggleShepherdModalClass(targetElement);\n\n if (step.options.highlightClass) {\n targetElement.classList.add(step.options.highlightClass);\n }\n\n if (step.options.canClickTarget === false) {\n targetElement.style.pointerEvents = 'none';\n }\n }\n\n /**\n * Called when `showOn` evaluates to false, to skip the step\n * @param {Step} step The step to skip\n * @param {Boolean} forward True if we are going forward, false if backward\n * @private\n */\n _skipStep(step, forward) {\n const index = this.steps.indexOf(step);\n const nextIndex = forward ? index + 1 : index - 1;\n this.show(nextIndex, forward);\n }\n\n _setTooltipDefaults() {\n tippy.setDefaults(tooltipDefaults);\n }\n\n _updateStateBeforeShow() {\n if (this.currentStep) {\n this.currentStep.hide();\n }\n\n if (!this.isActive()) {\n this._setupActiveTour();\n }\n }\n\n _setTourID() {\n const tourName = this.options.tourName || 'tour';\n const uuid = uniqueId();\n\n this.id = `${tourName}--${uuid}`;\n }\n\n _addBodyAttrs() {\n document.body.setAttribute('data-shepherd-active-tour', this.id);\n document.body.classList.add('shepherd-active');\n }\n\n _removeBodyAttrs() {\n document.body.removeAttribute('data-shepherd-active-tour');\n document.body.classList.remove('shepherd-active');\n }\n\n}\n\nexport { Shepherd };\n","import '../scss/shepherd-theme-dark.scss';\nimport '../scss/shepherd-theme-default.scss';\nimport '../scss/shepherd-theme-square.scss';\nimport '../scss/shepherd-theme-square-dark.scss';\n\nimport { Evented } from './evented.js';\nimport { Step } from './step.js';\nimport { Shepherd, Tour } from './tour.js';\n\nObject.assign(Shepherd, { Tour, Step, Evented });\n\nexport default Shepherd;\n","import { preventModalBodyTouch } from './modal';\nimport { getElementForStep } from './dom';\n\n/**\n * Cleanup the steps and set pointerEvents back to 'auto'\n * @param tour The tour object\n */\nexport function cleanupSteps(tour) {\n if (tour) {\n const { steps } = tour;\n\n steps.forEach((step) => {\n if (step.options && step.options.canClickTarget === false && step.options.attachTo) {\n const stepElement = getElementForStep(step);\n\n if (stepElement instanceof HTMLElement) {\n stepElement.style.pointerEvents = 'auto';\n }\n }\n });\n }\n}\n\n/**\n * Remove resize and scroll event listeners\n */\nexport function cleanupStepEventListeners() {\n if (typeof this._onScreenChange === 'function') {\n window.removeEventListener('resize', this._onScreenChange, false);\n window.removeEventListener('scroll', this._onScreenChange, false);\n\n this._onScreenChange = null;\n }\n window.removeEventListener('touchmove', preventModalBodyTouch, {\n passive: false\n });\n}\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nexport default isNumber;\n"],"names":["isObject","value","type","freeGlobal","global","Object","freeSelf","self","root","Function","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","nullTag","undefinedTag","baseGetTag","isOwn","call","tag","unmasked","e","result","getRawTag","isObjectLike","symbolTag","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","other","valueOf","replace","isBinary","test","slice","INFINITY","MAX_INTEGER","toInteger","remainder","drop","array","n","guard","length","start","end","index","Array","baseSlice","isUndefined","Evented","event","handler","ctx","once","arguments","this","bindings","push","on","forEach","binding","_this","splice","args","context","_this2","apply","fromRight","baseFor","object","iteratee","keysFunc","iterable","props","key","baseIsArguments","propertyIsEnumerable","isArguments","isArray","freeExports","exports","nodeType","freeModule","module","Buffer","isBuffer","MAX_SAFE_INTEGER","reIsUint","isLength","typedArrayTags","func","freeProcess","process","nodeUtil","types","require","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","baseTimes","String","isPrototype","Ctor","constructor","overArg","transform","arg","nativeKeys","keys","baseKeys","asyncTag","funcTag","genTag","proxyTag","isFunction","isArrayLike","identity","forOwn","getPrototype","getPrototypeOf","objectTag","funcProto","funcToString","objectCtorString","isElement","proto","isPlainObject","uid","coreJsData","maskSrcKey","exec","IE_PROTO","toSource","reIsHostCtor","reIsNative","RegExp","baseIsNative","getNative","DataView","Map","Promise","Set","WeakMap","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","resolve","ctorString","isEmpty","size","stringTag","isString","Element","matches","matchesSelector","msMatchesSelector","webkitMatchesSelector","defineProperty","assignValue","objValue","configurable","enumerable","writable","isBrowser","window","document","longerTimeoutBrowsers","timeoutDuration","i","navigator","userAgent","indexOf","debounce","fn","called","then","scheduled","setTimeout","functionToCheck","getStyleComputedProperty","element","property","css","ownerDocument","defaultView","getComputedStyle","getParentNode","nodeName","parentNode","host","getScrollParent","body","_getStyleComputedProp","overflow","overflowX","overflowY","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","version","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","getRoot","node","findCommonOffsetParent","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","contains","firstElementChild","element1root","getScroll","upperSide","html","scrollingElement","getBordersSize","styles","axis","sideA","sideB","parseFloat","getSize","computedStyle","Math","max","getWindowSizes","height","width","createClass","defineProperties","target","descriptor","Constructor","protoProps","staticProps","obj","_extends","assign","source","getClientRect","offsets","right","left","bottom","top","getBoundingClientRect","rect","scrollTop","scrollLeft","sizes","clientWidth","clientHeight","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","children","parent","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","subtract","modifier","includeScroll","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","reference","padding","boundariesElement","boundaries","excludeScroll","relativeOffset","innerWidth","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","placement","refRect","rects","sortedAreas","map","area","_ref","sort","a","b","filteredAreas","filter","_ref2","computedPlacement","variation","split","getReferenceOffsets","state","getOuterSizes","x","marginBottom","y","marginRight","getOppositePlacement","hash","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","runModifiers","modifiers","data","ends","prop","findIndex","cur","match","console","warn","enabled","isModifierEnabled","modifierName","some","name","getSupportedPropertyName","prefixes","upperProp","charAt","toUpperCase","prefix","toCheck","style","getWindow","setupEventListeners","options","updateBound","addEventListener","passive","scrollElement","attachToScrollParents","callback","scrollParents","isBody","eventsEnabled","disableEventListeners","cancelAnimationFrame","scheduleUpdate","removeEventListener","isNumeric","isNaN","isFinite","setStyles","unit","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","concat","reverse","BEHAVIORS","parseOffset","offset","basePlacement","useHeight","fragments","frag","trim","divider","search","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","index2","Defaults","positionFixed","removeOnDestroy","onCreate","onUpdate","shift","shiftvariation","_data$offsets","isVertical","side","shiftOffsets","preventOverflow","instance","transformProp","popperStyles","priority","primary","escapeWithReference","secondary","min","keepTogether","floor","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","len","sideCapitalized","toLowerCase","altSide","arrowElementSize","center","popperMarginSide","popperBorderSide","sideValue","round","flip","flipped","originalPlacement","placementOpposite","flipOrder","behavior","step","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","flipVariations","inner","subtractLength","hide","bound","attributes","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","offsetParentRect","position","devicePixelRatio","v","prefixedProperty","willChange","invertTop","invertLeft","x-placement","arrowStyles","applyStyle","setAttribute","removeAttribute","onLoad","modifierOptions","Popper","TypeError","classCallCheck","requestAnimationFrame","update","bind","isDestroyed","isCreated","jquery","enableEventListeners","removeChild","Utils","PopperUtils","isIOS","platform","MSStream","a11y","allowHTML","animateFill","animation","appendTo","aria","arrowType","boundary","content","delay","distance","duration","flipBehavior","flipOnUpdate","followCursor","hideOnClick","ignoreAttributes","inertia","interactive","interactiveBorder","interactiveDebounce","lazy","maxWidth","multiple","onHidden","onHide","onMount","onShow","onShown","popperOptions","role","showOnInit","sticky","theme","touch","touchHold","trigger","updateDuration","wait","zIndex","POPPER_INSTANCE_DEPENDENCIES","Selectors","POPPER","TOOLTIP","CONTENT","BACKDROP","ARROW","ROUND_ARROW","elementProto","mozMatchesSelector","arrayFrom","closest","parentSelector","selector","closestCallback","getValue","defaultValue","ms","timeoutId","_arguments","clearTimeout","getModifier","includes","isSingular","evaluateValue","setFlipModifierEnabled","m","div","createElement","setInnerHTML","setContent","contentEl","appendChild","getChildren","tooltip","backdrop","addInertia","createArrowElement","className","createBackdropElement","addInteractive","applyTransitionDuration","els","transitionDuration","toggleTransitionEndListener","action","listener","getPopperPlacement","fullPlacement","getAttribute","setVisibilityState","toggleTheme","themeName","classList","hideAll","checkHideOnClick","exclude","querySelectorAll","_tippy","getOffsetDistanceInPx","defaultDistance","PASSIVE","PADDING","isUsingTouch","onDocumentTouch","add","performance","onDocumentMouseMove","lastMouseMoveTime","now","remove","onDocumentClick","isClickTrigger","clearDelayTimeouts","onWindowBlur","activeElement","blur","evaluateProps","out","acc","valueAsString","JSON","parse","validateOptions","defaults","option","Error","idCounter","createTippy","collectionProps","lastTriggerEvent","lastMouseMoveEvent","showTimeoutId","hideTimeoutId","isPreparingToShow","transitionEndListener","listeners","debouncedOnMouseMove","onMouseMove","id","createPopperElement","isVisible","prepareShow","popperChildren","popperInstance","isEnabled","isMounted","isShown","set","show","enable","disable","destroy","addTriggersToReference","createPopperInstance","hasAttribute","positionVirtualReferenceNearCursor","_lastMouseMoveEvent","clientX","clientY","isVerticalPlacement","isHorizontalPlacement","isHorizontal","removeFollowCursorListener","targetEl","hasFollowCursorBehavior","prepareHide","cleanupOldMouseListeners","onTrigger","isEventListenerStopped","referenceTheCursorIsOver","isCursorOverPopper","isCursorOverReference","popperPlacement","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","isCursorOutsideInteractiveBorder","onMouseLeave","onBlur","relatedTarget","onDelegateShow","onDelegateHide","supportsTouch","isTouchEvent","_instance$popperChild","onTransitionEnd","eventType","removeTriggersFromReference","getInnerElements","prevProps","nextProps","_getChildren","replaceChild","isVirtual","visibility","shouldEnableListeners","margin","mount","transitionDelay","updatePosition","destroyTargetInstances","child","globalEventListenersBound","tippy","targets","virtualReference","polyfills","classNames","polyfillElementPrototypeProperties","instances","NodeList","getArrayOfElements","setDefaults","partialDefaults","group","_ref$delay","_ref$duration","isAnyTippyOpen","setIsAnyTippyOpen","updateInstances","_originalProps","textContent","head","insertBefore","firstChild","injectCSS","missingTippy","centeredStylePopperModifier","defaultPopperOptions","createFromHTML","innerHTML","parseShorthand","values","assignFunc","valsLength","baseZipObject","setupTooltip","attachToOpts","parseAttachTo","attachToOptions","tippyOptions","finalPopperOptions","resultingTippyOptions","opts","_parseAttachToOpts","attachTo","returnOpts","error","bindAdvance","advanceOn","isOpen","targetIsEl","tour","next","bindMethods","methods","method","_this4","uniqueId","Step","setOptions","bindButtonEvents","cfg","events","click","page","dataset","buttonEvent","bindCancelLink","link","preventDefault","_this3","cancel","buttons","footer","button","classes","text","header","showCancelLink","paragraphs","HTMLElement","paragraph","title","_addContent","_addButtons","_addCancelLink","complete","_updateStepTargetOnHide","modal","Boolean","_createTooltipContent","scrollToHandler","scrollIntoView","when","beforeShowPromise","_show","beforeShowStep","setupElements","scrollTo","_this5","highlightClass","svgNS","elementIds","modalOverlay","modalOverlayMask","modalOverlayMaskRect","modalOverlayMaskOpening","createModalOverlay","containerElement","createElementNS","setAttributeNS","defsElement","maskContainer","_setAttributes","maskRect","fill","maskOpening","maskConsumer","positionModalOpening","targetElement","openingElement","SVGElement","preventModalBodyTouch","preventModalOverlayTouch","stopPropagation","attrs","getElementForStep","addStepEventListeners","_onScreenChange","overlay","Date","nativeMax","nativeMin","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","thisArg","shouldInvoke","timeSinceLastCall","timerExpired","timeWaiting","trailingEdge","debounced","isInvoking","flush","count","lastCalled","baseSetToString","string","nativeNow","defer","stamp","remaining","baseDelay","otherArgs","Modal","_modalOverlayElem","_modalOverlayOpening","modalClassNames","display","useModalOverlay","_styleForStep","modalOverlayOpening","Shepherd","Tour","steps","_setTooltipDefaults","_setTourID","arg1","arg2","setupStep","currentStep","confirmCancel","cancelMessage","confirmCancelMessage","confirm","done","tourObject","canClickTarget","stepElement","pointerEvents","cleanup","activeTour","_removeBodyAttrs","getCurrentStep","current","stepOptions","defaultStepOptions","setupForStep","_styleTargetElementForStep","forward","getById","_updateStateBeforeShow","showOn","_skipStep","previous","_setupActiveTour","_addBodyAttrs","currentElement","shepherdModal","nextIndex","tooltipDefaults","isActive","tourName","uuid"],"mappings":"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"}