{"version":3,"file":"js/507-33072f65173b83627abe.js","mappings":"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","sources":["webpack://iam-compliant/./node_modules/dropzone/dist/dropzone.js","webpack://iam-compliant/./node_modules/lodash-es/throttle.js","webpack://iam-compliant/./node_modules/lodash-es/_castFunction.js","webpack://iam-compliant/./node_modules/lodash-es/forEach.js","webpack://iam-compliant/./node_modules/muuri/dist/muuri.module.js","webpack://iam-compliant/./node_modules/chartjs-chart-matrix/dist/chartjs-chart-matrix.esm.js","webpack://iam-compliant/./node_modules/@glidejs/glide/dist/glide.esm.js","webpack://iam-compliant/./node_modules/lodash-es/parseInt.js","webpack://iam-compliant/plyr.js","webpack://iam-compliant/node_modules/.pnpm/rangetouch@2.0.1/node_modules/rangetouch/dist/rangetouch.mjs","webpack://iam-compliant/src/js/utils/is.js","webpack://iam-compliant/src/js/utils/animation.js","webpack://iam-compliant/src/js/utils/browser.js","webpack://iam-compliant/src/js/utils/objects.js","webpack://iam-compliant/src/js/utils/elements.js","webpack://iam-compliant/src/js/support.js","webpack://iam-compliant/src/js/utils/events.js","webpack://iam-compliant/src/js/utils/promise.js","webpack://iam-compliant/src/js/utils/arrays.js","webpack://iam-compliant/src/js/utils/style.js","webpack://iam-compliant/src/js/html5.js","webpack://iam-compliant/src/js/utils/strings.js","webpack://iam-compliant/src/js/utils/i18n.js","webpack://iam-compliant/src/js/storage.js","webpack://iam-compliant/src/js/utils/fetch.js","webpack://iam-compliant/src/js/utils/load-sprite.js","webpack://iam-compliant/src/js/utils/time.js","webpack://iam-compliant/src/js/controls.js","webpack://iam-compliant/src/js/utils/urls.js","webpack://iam-compliant/src/js/captions.js","webpack://iam-compliant/src/js/config/defaults.js","webpack://iam-compliant/src/js/config/states.js","webpack://iam-compliant/src/js/config/types.js","webpack://iam-compliant/src/js/console.js","webpack://iam-compliant/src/js/fullscreen.js","webpack://iam-compliant/src/js/utils/load-image.js","webpack://iam-compliant/src/js/ui.js","webpack://iam-compliant/src/js/listeners.js","webpack://iam-compliant/node_modules/.pnpm/loadjs@4.2.0/node_modules/loadjs/dist/loadjs.umd.js","webpack://iam-compliant/src/js/utils/load-script.js","webpack://iam-compliant/src/js/plugins/vimeo.js","webpack://iam-compliant/src/js/plugins/youtube.js","webpack://iam-compliant/src/js/media.js","webpack://iam-compliant/src/js/plugins/ads.js","webpack://iam-compliant/src/js/utils/numbers.js","webpack://iam-compliant/src/js/plugins/preview-thumbnails.js","webpack://iam-compliant/src/js/source.js","webpack://iam-compliant/src/js/plyr.js","webpack://iam-compliant/./node_modules/lodash-es/_baseSum.js","webpack://iam-compliant/./node_modules/lodash-es/sumBy.js","webpack://iam-compliant/./node_modules/lodash-es/_baseHas.js","webpack://iam-compliant/./node_modules/lodash-es/has.js","webpack://iam-compliant/./node_modules/lodash-es/map.js","webpack://iam-compliant/./node_modules/lodash-es/isInteger.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 3099:\n/***/ (function(module) {\n\nmodule.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ 6077:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ 1223:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar create = __webpack_require__(30);\nvar definePropertyModule = __webpack_require__(3070);\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ 1530:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = __webpack_require__(8710).charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n\n\n/***/ }),\n\n/***/ 5787:\n/***/ (function(module) {\n\nmodule.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ 9670:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ 4019:\n/***/ (function(module) {\n\nmodule.exports = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';\n\n\n/***/ }),\n\n/***/ 260:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(4019);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\nvar has = __webpack_require__(6656);\nvar classof = __webpack_require__(648);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar defineProperty = __webpack_require__(3070).f;\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar uid = __webpack_require__(9711);\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar isPrototypeOf = ObjectPrototype.isPrototypeOf;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || has(TypedArrayConstructorsList, klass)\n || has(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return has(TypedArrayConstructorsList, klass)\n || has(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (setPrototypeOf) {\n if (isPrototypeOf.call(TypedArray, C)) return C;\n } else for (var ARRAY in TypedArrayConstructorsList) if (has(TypedArrayConstructorsList, NAME)) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {\n return C;\n }\n } throw TypeError('Target is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) {\n delete TypedArrayConstructor.prototype[KEY];\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n redefine(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) {\n delete TypedArrayConstructor[KEY];\n }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n redefine(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n } });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n\n\n/***/ }),\n\n/***/ 3331:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(4019);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefineAll = __webpack_require__(2248);\nvar fails = __webpack_require__(7293);\nvar anInstance = __webpack_require__(5787);\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar IEEE754 = __webpack_require__(1179);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = __webpack_require__(8006).f;\nvar defineProperty = __webpack_require__(3070).f;\nvar arrayFill = __webpack_require__(1285);\nvar setToStringTag = __webpack_require__(8003);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar $DataView = global[DATA_VIEW];\nvar $DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar RangeError = global.RangeError;\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = bytes.slice(start, start + count);\n return isLittleEndian ? pack : pack.reverse();\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = conversion(+value);\n for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n setInternalState(this, {\n bytes: arrayFill.call(new Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) this.byteLength = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = getInternalState(buffer).byteLength;\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n setInternalState(this, {\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset\n });\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength');\n addGetter($DataView, 'buffer');\n addGetter($DataView, 'byteLength');\n addGetter($DataView, 'byteOffset');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n }\n });\n} else {\n /* eslint-disable no-new -- required for testing */\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1);\n }) || fails(function () {\n new NativeArrayBuffer();\n new NativeArrayBuffer(1.5);\n new NativeArrayBuffer(NaN);\n return NativeArrayBuffer.name != ARRAY_BUFFER;\n })) {\n /* eslint-enable no-new -- required for testing */\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new NativeArrayBuffer(toIndex(length));\n };\n var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer[PROTOTYPE];\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n }\n\n // WebKit bug - the same parent prototype for typed arrays and data view\n if (setPrototypeOf && getPrototypeOf($DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf($DataViewPrototype, ObjectPrototype);\n }\n\n // iOS Safari 7.x bug\n var testView = new $DataView(new $ArrayBuffer(2));\n var nativeSetInt8 = $DataViewPrototype.setInt8;\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll($DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n\n\n/***/ }),\n\n/***/ 1048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toLength = __webpack_require__(7466);\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n\n\n/***/ }),\n\n/***/ 1285:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toLength = __webpack_require__(7466);\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n\n\n/***/ }),\n\n/***/ 8533:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $forEach = __webpack_require__(2092).forEach;\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n\n\n/***/ }),\n\n/***/ 8457:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar bind = __webpack_require__(9974);\nvar toObject = __webpack_require__(7908);\nvar callWithSafeIterationClosing = __webpack_require__(3411);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar toLength = __webpack_require__(7466);\nvar createProperty = __webpack_require__(6135);\nvar getIteratorMethod = __webpack_require__(1246);\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n\n\n/***/ }),\n\n/***/ 1318:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(5656);\nvar toLength = __webpack_require__(7466);\nvar toAbsoluteIndex = __webpack_require__(1400);\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 2092:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar bind = __webpack_require__(9974);\nvar IndexedObject = __webpack_require__(8361);\nvar toObject = __webpack_require__(7908);\nvar toLength = __webpack_require__(7466);\nvar arraySpeciesCreate = __webpack_require__(5417);\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_OUT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push.call(target, value); // filterOut\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterOut` method\n // https://github.com/tc39/proposal-array-filtering\n filterOut: createMethod(7)\n};\n\n\n/***/ }),\n\n/***/ 6583:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toIndexedObject = __webpack_require__(5656);\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar min = Math.min;\nvar nativeLastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return nativeLastIndexOf.apply(this, arguments) || 0;\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n return -1;\n} : nativeLastIndexOf;\n\n\n/***/ }),\n\n/***/ 1194:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n\n\n/***/ }),\n\n/***/ 9341:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n\n\n/***/ }),\n\n/***/ 3671:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(3099);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\nvar toLength = __webpack_require__(7466);\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 5417:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar isArray = __webpack_require__(3157);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n\n\n/***/ }),\n\n/***/ 3411:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar iteratorClose = __webpack_require__(9212);\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n};\n\n\n/***/ }),\n\n/***/ 7072:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n\n\n/***/ }),\n\n/***/ 4326:\n/***/ (function(module) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n\n/***/ 648:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar classofRaw = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ 9920:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar has = __webpack_require__(6656);\nvar ownKeys = __webpack_require__(3887);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar definePropertyModule = __webpack_require__(3070);\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n\n\n/***/ }),\n\n/***/ 8544:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n\n/***/ }),\n\n/***/ 4994:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar IteratorPrototype = __webpack_require__(3383).IteratorPrototype;\nvar create = __webpack_require__(30);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar setToStringTag = __webpack_require__(8003);\nvar Iterators = __webpack_require__(7497);\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n\n\n/***/ }),\n\n/***/ 8880:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n/***/ }),\n\n/***/ 9114:\n/***/ (function(module) {\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n\n/***/ 6135:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toPrimitive = __webpack_require__(7593);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ 654:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar setToStringTag = __webpack_require__(8003);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\nvar Iterators = __webpack_require__(7497);\nvar IteratorsCore = __webpack_require__(3383);\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n\n\n/***/ }),\n\n/***/ 9781:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ 317:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ 8324:\n/***/ (function(module) {\n\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n\n\n/***/ }),\n\n/***/ 8113:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ 7392:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar userAgent = __webpack_require__(8113);\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n\n\n/***/ }),\n\n/***/ 748:\n/***/ (function(module) {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\n\n/***/ }),\n\n/***/ 2109:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar getOwnPropertyDescriptor = __webpack_require__(1236).f;\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar setGlobal = __webpack_require__(3505);\nvar copyConstructorProperties = __webpack_require__(9920);\nvar isForced = __webpack_require__(4705);\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n\n\n/***/ }),\n\n/***/ 7293:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n\n\n/***/ }),\n\n/***/ 7007:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: Remove from `core-js@4` since it's moved to entry points\n__webpack_require__(4916);\nvar redefine = __webpack_require__(1320);\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar regexpExec = __webpack_require__(2261);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !(\n REPLACE_SUPPORTS_NAMED_GROUPS &&\n REPLACE_KEEPS_$0 &&\n !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n )) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }, {\n REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n }\n\n if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n\n\n/***/ }),\n\n/***/ 9974:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(3099);\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n/***/ }),\n\n/***/ 5005:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar path = __webpack_require__(857);\nvar global = __webpack_require__(7854);\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n\n\n/***/ }),\n\n/***/ 1246:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(648);\nvar Iterators = __webpack_require__(7497);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n\n/***/ }),\n\n/***/ 8554:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar getIteratorMethod = __webpack_require__(1246);\n\nmodule.exports = function (it) {\n var iteratorMethod = getIteratorMethod(it);\n if (typeof iteratorMethod != 'function') {\n throw TypeError(String(it) + ' is not iterable');\n } return anObject(iteratorMethod.call(it));\n};\n\n\n/***/ }),\n\n/***/ 647:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toObject = __webpack_require__(7908);\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n\n\n/***/ }),\n\n/***/ 7854:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n /* global globalThis -- safe */\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n\n\n/***/ }),\n\n/***/ 6656:\n/***/ (function(module) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n\n/***/ 3501:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 490:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n\n/***/ }),\n\n/***/ 4664:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\nvar createElement = __webpack_require__(317);\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ 1179:\n/***/ (function(module) {\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = new Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number || number === Infinity) {\n // eslint-disable-next-line no-self-compare -- NaN check\n mantissa = number != number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n if (number * (c = pow(2, -exponent)) < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent = exponent + eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa = mantissa + pow(2, mantissaLength);\n exponent = exponent - eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n\n\n/***/ }),\n\n/***/ 8361:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar classof = __webpack_require__(4326);\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n\n\n/***/ }),\n\n/***/ 9587:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar setPrototypeOf = __webpack_require__(7674);\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n\n\n/***/ }),\n\n/***/ 2788:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar store = __webpack_require__(5465);\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ }),\n\n/***/ 9909:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(8536);\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar objectHas = __webpack_require__(6656);\nvar shared = __webpack_require__(5465);\nvar sharedKey = __webpack_require__(6200);\nvar hiddenKeys = __webpack_require__(3501);\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ 7659:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar Iterators = __webpack_require__(7497);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n\n\n/***/ }),\n\n/***/ 3157:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n\n\n/***/ }),\n\n/***/ 4705:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ 111:\n/***/ (function(module) {\n\nmodule.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n\n/***/ 1913:\n/***/ (function(module) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ 7850:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar classof = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ 9212:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n\n\n/***/ }),\n\n/***/ 3383:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\nvar getPrototypeOf = __webpack_require__(9518);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar has = __webpack_require__(6656);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\n\n/***/ }),\n\n/***/ 7497:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 133:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n /* global Symbol -- required for testing */\n return !String(Symbol());\n});\n\n\n/***/ }),\n\n/***/ 590:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n\n\n/***/ }),\n\n/***/ 8536:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar inspectSource = __webpack_require__(2788);\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ 1574:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\nvar objectKeys = __webpack_require__(1956);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n /* global Symbol -- required for testing */\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar defineProperties = __webpack_require__(6048);\nvar enumBugKeys = __webpack_require__(748);\nvar hiddenKeys = __webpack_require__(3501);\nvar html = __webpack_require__(490);\nvar documentCreateElement = __webpack_require__(317);\nvar sharedKey = __webpack_require__(6200);\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject -- old IE */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ 6048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar anObject = __webpack_require__(9670);\nvar objectKeys = __webpack_require__(1956);\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n\n\n/***/ }),\n\n/***/ 3070:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\nvar anObject = __webpack_require__(9670);\nvar toPrimitive = __webpack_require__(7593);\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n/***/ }),\n\n/***/ 1236:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar toIndexedObject = __webpack_require__(5656);\nvar toPrimitive = __webpack_require__(7593);\nvar has = __webpack_require__(6656);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ 8006:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ 5181:\n/***/ (function(__unused_webpack_module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ 9518:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar has = __webpack_require__(6656);\nvar toObject = __webpack_require__(7908);\nvar sharedKey = __webpack_require__(6200);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n\n\n/***/ }),\n\n/***/ 6324:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar has = __webpack_require__(6656);\nvar toIndexedObject = __webpack_require__(5656);\nvar indexOf = __webpack_require__(1318).indexOf;\nvar hiddenKeys = __webpack_require__(3501);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n\n/***/ }),\n\n/***/ 1956:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ 5296:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ 7674:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-proto -- safe */\nvar anObject = __webpack_require__(9670);\nvar aPossiblePrototype = __webpack_require__(6077);\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n\n\n/***/ }),\n\n/***/ 288:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar classof = __webpack_require__(648);\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n\n\n/***/ }),\n\n/***/ 3887:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar anObject = __webpack_require__(9670);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ 857:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ 2248:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar redefine = __webpack_require__(1320);\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n\n\n/***/ }),\n\n/***/ 1320:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar has = __webpack_require__(6656);\nvar setGlobal = __webpack_require__(3505);\nvar inspectSource = __webpack_require__(2788);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n\n\n/***/ }),\n\n/***/ 7651:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\nvar regexpExec = __webpack_require__(2261);\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n\n\n/***/ }),\n\n/***/ 2261:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar regexpFlags = __webpack_require__(7066);\nvar stickyHelpers = __webpack_require__(2999);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\n// eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = String(str).slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n\n\n/***/ }),\n\n/***/ 7066:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar anObject = __webpack_require__(9670);\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n\n\n/***/ }),\n\n/***/ 2999:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar fails = __webpack_require__(7293);\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n var re = RE('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = RE('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n\n\n/***/ }),\n\n/***/ 4488:\n/***/ (function(module) {\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n\n/***/ 3505:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n\n\n/***/ }),\n\n/***/ 6340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar getBuiltIn = __webpack_require__(5005);\nvar definePropertyModule = __webpack_require__(3070);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar DESCRIPTORS = __webpack_require__(9781);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n\n\n/***/ }),\n\n/***/ 8003:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineProperty = __webpack_require__(3070).f;\nvar has = __webpack_require__(6656);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n\n\n/***/ }),\n\n/***/ 6200:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar shared = __webpack_require__(2309);\nvar uid = __webpack_require__(9711);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ 5465:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar setGlobal = __webpack_require__(3505);\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ 2309:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar IS_PURE = __webpack_require__(1913);\nvar store = __webpack_require__(5465);\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.9.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ 6707:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar aFunction = __webpack_require__(3099);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n\n\n/***/ }),\n\n/***/ 8710:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\nvar requireObjectCoercible = __webpack_require__(4488);\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 3197:\n/***/ (function(module) {\n\n\"use strict\";\n\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements -- TODO\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's state to , but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n for (var k = base; /* no condition */; k += base) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join('');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n }\n return encoded.join('.');\n};\n\n\n/***/ }),\n\n/***/ 6091:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar whitespaces = __webpack_require__(1361);\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n\n\n/***/ }),\n\n/***/ 3111:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(4488);\nvar whitespaces = __webpack_require__(1361);\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n\n\n/***/ }),\n\n/***/ 1400:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ 7067:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n\n\n/***/ }),\n\n/***/ 5656:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(8361);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ 9958:\n/***/ (function(module) {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n\n\n/***/ }),\n\n/***/ 7466:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ 7908:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(4488);\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ 4590:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toPositiveInteger = __webpack_require__(3002);\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n\n\n/***/ }),\n\n/***/ 3002:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\n\nmodule.exports = function (it) {\n var result = toInteger(it);\n if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n return result;\n};\n\n\n/***/ }),\n\n/***/ 7593:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ 1694:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ 9843:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(3832);\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar ArrayBufferModule = __webpack_require__(3331);\nvar anInstance = __webpack_require__(5787);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar toOffset = __webpack_require__(4590);\nvar toPrimitive = __webpack_require__(7593);\nvar has = __webpack_require__(6656);\nvar classof = __webpack_require__(648);\nvar isObject = __webpack_require__(111);\nvar create = __webpack_require__(30);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = __webpack_require__(8006).f;\nvar typedArrayFrom = __webpack_require__(7321);\nvar forEach = __webpack_require__(2092).forEach;\nvar setSpecies = __webpack_require__(6340);\nvar definePropertyModule = __webpack_require__(3070);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar InternalStateModule = __webpack_require__(9909);\nvar inheritIfRequired = __webpack_require__(9587);\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n nativeDefineProperty(it, key, { get: function () {\n return getInternalState(this)[key];\n } });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return it instanceof ArrayBuffer || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n return isTypedArrayIndex(target, key = toPrimitive(key, true))\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n if (isTypedArrayIndex(target, key = toPrimitive(key, true))\n && isObject(descriptor)\n && has(descriptor, 'value')\n && !has(descriptor, 'get')\n && !has(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!has(descriptor, 'writable') || descriptor.writable)\n && (!has(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return typedArrayFrom.call(TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return typedArrayFrom.call(TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({\n global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\n\n\n/***/ }),\n\n/***/ 3832:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-new -- required for testing */\nvar global = __webpack_require__(7854);\nvar fails = __webpack_require__(7293);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\nvar NATIVE_ARRAY_BUFFER_VIEWS = __webpack_require__(260).NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n\n\n/***/ }),\n\n/***/ 3074:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aTypedArrayConstructor = __webpack_require__(260).aTypedArrayConstructor;\nvar speciesConstructor = __webpack_require__(6707);\n\nmodule.exports = function (instance, list) {\n var C = speciesConstructor(instance, instance.constructor);\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\n\n/***/ }),\n\n/***/ 7321:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toObject = __webpack_require__(7908);\nvar toLength = __webpack_require__(7466);\nvar getIteratorMethod = __webpack_require__(1246);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar bind = __webpack_require__(9974);\nvar aTypedArrayConstructor = __webpack_require__(260).aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, step, iterator, next;\n if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n O = [];\n while (!(step = next.call(iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2], 2);\n }\n length = toLength(O.length);\n result = new (aTypedArrayConstructor(this))(length);\n for (i = 0; length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n};\n\n\n/***/ }),\n\n/***/ 9711:\n/***/ (function(module) {\n\nvar id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n\n\n/***/ }),\n\n/***/ 3307:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_SYMBOL = __webpack_require__(133);\n\nmodule.exports = NATIVE_SYMBOL\n /* global Symbol -- safe */\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n\n\n/***/ }),\n\n/***/ 5112:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar shared = __webpack_require__(2309);\nvar has = __webpack_require__(6656);\nvar uid = __webpack_require__(9711);\nvar NATIVE_SYMBOL = __webpack_require__(133);\nvar USE_SYMBOL_AS_UID = __webpack_require__(3307);\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ 1361:\n/***/ (function(module) {\n\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n/***/ }),\n\n/***/ 8264:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar arrayBufferModule = __webpack_require__(3331);\nvar setSpecies = __webpack_require__(6340);\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({ global: true, forced: NativeArrayBuffer !== ArrayBuffer }, {\n ArrayBuffer: ArrayBuffer\n});\n\nsetSpecies(ARRAY_BUFFER);\n\n\n/***/ }),\n\n/***/ 2222:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar isArray = __webpack_require__(3157);\nvar isObject = __webpack_require__(111);\nvar toObject = __webpack_require__(7908);\nvar toLength = __webpack_require__(7466);\nvar createProperty = __webpack_require__(6135);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n\n\n/***/ }),\n\n/***/ 7327:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $filter = __webpack_require__(2092).filter;\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ 2772:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $indexOf = __webpack_require__(1318).indexOf;\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ 6992:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toIndexedObject = __webpack_require__(5656);\nvar addToUnscopables = __webpack_require__(1223);\nvar Iterators = __webpack_require__(7497);\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ 1249:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $map = __webpack_require__(2092).map;\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ 7042:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar isObject = __webpack_require__(111);\nvar isArray = __webpack_require__(3157);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toLength = __webpack_require__(7466);\nvar toIndexedObject = __webpack_require__(5656);\nvar createProperty = __webpack_require__(6135);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n\n\n/***/ }),\n\n/***/ 561:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\nvar toObject = __webpack_require__(7908);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar createProperty = __webpack_require__(6135);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n\n\n/***/ }),\n\n/***/ 8309:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar defineProperty = __webpack_require__(3070).f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n\n\n/***/ }),\n\n/***/ 489:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar toObject = __webpack_require__(7908);\nvar nativeGetPrototypeOf = __webpack_require__(9518);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n\n\n/***/ }),\n\n/***/ 1539:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar redefine = __webpack_require__(1320);\nvar toString = __webpack_require__(288);\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 4916:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar exec = __webpack_require__(2261);\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n\n\n/***/ }),\n\n/***/ 9714:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar redefine = __webpack_require__(1320);\nvar anObject = __webpack_require__(9670);\nvar fails = __webpack_require__(7293);\nvar flags = __webpack_require__(7066);\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 8783:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = __webpack_require__(8710).charAt;\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n\n\n/***/ }),\n\n/***/ 4723:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar anObject = __webpack_require__(9670);\nvar toLength = __webpack_require__(7466);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar advanceStringIndex = __webpack_require__(1530);\nvar regExpExec = __webpack_require__(7651);\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative(nativeMatch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n\n\n/***/ }),\n\n/***/ 5306:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar anObject = __webpack_require__(9670);\nvar toLength = __webpack_require__(7466);\nvar toInteger = __webpack_require__(9958);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar advanceStringIndex = __webpack_require__(1530);\nvar getSubstitution = __webpack_require__(647);\nvar regExpExec = __webpack_require__(7651);\n\nvar max = Math.max;\nvar min = Math.min;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n});\n\n\n/***/ }),\n\n/***/ 3123:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar isRegExp = __webpack_require__(7850);\nvar anObject = __webpack_require__(9670);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar speciesConstructor = __webpack_require__(6707);\nvar advanceStringIndex = __webpack_require__(1530);\nvar toLength = __webpack_require__(7466);\nvar callRegExpExec = __webpack_require__(7651);\nvar regexpExec = __webpack_require__(2261);\nvar fails = __webpack_require__(7293);\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\n\n\n/***/ }),\n\n/***/ 3210:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $trim = __webpack_require__(3111).trim;\nvar forcedStringTrimMethod = __webpack_require__(6091);\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n\n\n/***/ }),\n\n/***/ 2990:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $copyWithin = __webpack_require__(1048);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n return $copyWithin.call(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 8927:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $every = __webpack_require__(2092).every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3105:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $fill = __webpack_require__(1285);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n return $fill.apply(aTypedArray(this), arguments);\n});\n\n\n/***/ }),\n\n/***/ 5035:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $filter = __webpack_require__(2092).filter;\nvar fromSpeciesAndList = __webpack_require__(3074);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return fromSpeciesAndList(this, list);\n});\n\n\n/***/ }),\n\n/***/ 7174:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $findIndex = __webpack_require__(2092).findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4345:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $find = __webpack_require__(2092).find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 2846:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $forEach = __webpack_require__(2092).forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4731:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $includes = __webpack_require__(1318).includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 7209:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $indexOf = __webpack_require__(1318).indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 6319:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar ArrayIterators = __webpack_require__(6992);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = ArrayIterators.values;\nvar arrayKeys = ArrayIterators.keys;\nvar arrayEntries = ArrayIterators.entries;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar CORRECT_ITER_NAME = !!nativeTypedArrayIterator\n && (nativeTypedArrayIterator.name == 'values' || nativeTypedArrayIterator.name == undefined);\n\nvar typedArrayValues = function values() {\n return arrayValues.call(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n return arrayEntries.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n return arrayKeys.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, !CORRECT_ITER_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, !CORRECT_ITER_NAME);\n\n\n/***/ }),\n\n/***/ 8867:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = [].join;\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('join', function join(separator) {\n return $join.apply(aTypedArray(this), arguments);\n});\n\n\n/***/ }),\n\n/***/ 7789:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $lastIndexOf = __webpack_require__(6583);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n return $lastIndexOf.apply(aTypedArray(this), arguments);\n});\n\n\n/***/ }),\n\n/***/ 3739:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $map = __webpack_require__(2092).map;\nvar speciesConstructor = __webpack_require__(6707);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n return new (aTypedArrayConstructor(speciesConstructor(O, O.constructor)))(length);\n });\n});\n\n\n/***/ }),\n\n/***/ 4483:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $reduceRight = __webpack_require__(3671).right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n return $reduceRight(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 9368:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $reduce = __webpack_require__(3671).left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n return $reduce(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 2056:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n var that = this;\n var length = aTypedArray(that).length;\n var middle = floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n});\n\n\n/***/ }),\n\n/***/ 3462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar toLength = __webpack_require__(7466);\nvar toOffset = __webpack_require__(4590);\nvar toObject = __webpack_require__(7908);\nvar fails = __webpack_require__(7293);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n /* global Int8Array -- safe */\n new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 678:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar speciesConstructor = __webpack_require__(6707);\nvar fails = __webpack_require__(7293);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $slice = [].slice;\n\nvar FORCED = fails(function () {\n /* global Int8Array -- safe */\n new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n var list = $slice.call(aTypedArray(this), start, end);\n var C = speciesConstructor(this, this.constructor);\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 7462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $some = __webpack_require__(2092).some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3824:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $sort = [].sort;\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n return $sort.call(aTypedArray(this), comparefn);\n});\n\n\n/***/ }),\n\n/***/ 5021:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar toLength = __webpack_require__(7466);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar speciesConstructor = __webpack_require__(6707);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n var O = aTypedArray(this);\n var length = O.length;\n var beginIndex = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O.constructor))(\n O.buffer,\n O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n );\n});\n\n\n/***/ }),\n\n/***/ 2974:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar fails = __webpack_require__(7293);\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\nvar $slice = [].slice;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice.call(aTypedArray(this)) : aTypedArray(this), arguments);\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 5016:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar exportTypedArrayMethod = __webpack_require__(260).exportTypedArrayMethod;\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar arrayJoin = [].join;\n\nif (fails(function () { arrayToString.call({}); })) {\n arrayToString = function toString() {\n return arrayJoin.call(this);\n };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n\n\n/***/ }),\n\n/***/ 2472:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n\n\n/***/ }),\n\n/***/ 4747:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar forEach = __webpack_require__(8533);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n\n\n/***/ }),\n\n/***/ 3948:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar ArrayIteratorMethods = __webpack_require__(6992);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n\n\n/***/ }),\n\n/***/ 1637:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\n__webpack_require__(6992);\nvar $ = __webpack_require__(2109);\nvar getBuiltIn = __webpack_require__(5005);\nvar USE_NATIVE_URL = __webpack_require__(590);\nvar redefine = __webpack_require__(1320);\nvar redefineAll = __webpack_require__(2248);\nvar setToStringTag = __webpack_require__(8003);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar InternalStateModule = __webpack_require__(9909);\nvar anInstance = __webpack_require__(5787);\nvar hasOwn = __webpack_require__(6656);\nvar bind = __webpack_require__(9974);\nvar classof = __webpack_require__(648);\nvar anObject = __webpack_require__(9670);\nvar isObject = __webpack_require__(111);\nvar create = __webpack_require__(30);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar getIterator = __webpack_require__(8554);\nvar getIteratorMethod = __webpack_require__(1246);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = it.replace(plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = result.replace(percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replace[match];\n};\n\nvar serialize = function (it) {\n return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n if (query) {\n var attributes = query.split('&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = attribute.split('=');\n result.push({\n key: deserialize(entry.shift()),\n value: deserialize(entry.join('='))\n });\n }\n }\n }\n};\n\nvar updateSearchParams = function (query) {\n this.entries.length = 0;\n parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n var that = this;\n var entries = [];\n var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n setInternalState(that, {\n type: URL_SEARCH_PARAMS,\n entries: entries,\n updateURL: function () { /* empty */ },\n updateSearchParams: updateSearchParams\n });\n\n if (init !== undefined) {\n if (isObject(init)) {\n iteratorMethod = getIteratorMethod(init);\n if (typeof iteratorMethod === 'function') {\n iterator = iteratorMethod.call(init);\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = entryNext.call(entryIterator)).done ||\n (second = entryNext.call(entryIterator)).done ||\n !entryNext.call(entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n entries.push({ key: first.value + '', value: second.value + '' });\n }\n } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n } else {\n parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n }\n }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.append` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n state.entries.push({ key: name + '', value: value + '' });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) entries.splice(index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) result.push(entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = name + '';\n var val = value + '';\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) entries.splice(index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) entries.push({ key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n var entries = state.entries;\n // Array#sort is not stable in some engines\n var slice = entries.slice();\n var entry, entriesIndex, sliceIndex;\n entries.length = 0;\n for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n entry = slice[sliceIndex];\n for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n if (entries[entriesIndex].key > entry.key) {\n entries.splice(entriesIndex, 0, entry);\n break;\n }\n }\n if (entriesIndex === sliceIndex) entries.push(entry);\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n var entries = getInternalParamsState(this).entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n result.push(serialize(entry.key) + '=' + serialize(entry.value));\n } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n $({ global: true, enumerable: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n var args = [input];\n var init, body, headers;\n if (arguments.length > 1) {\n init = arguments[1];\n if (isObject(init)) {\n body = init.body;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n init = create(init, {\n body: createPropertyDescriptor(0, String(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n }\n args.push(init);\n } return $fetch.apply(this, args);\n }\n });\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n\n\n/***/ }),\n\n/***/ 285:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\n__webpack_require__(8783);\nvar $ = __webpack_require__(2109);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar USE_NATIVE_URL = __webpack_require__(590);\nvar global = __webpack_require__(7854);\nvar defineProperties = __webpack_require__(6048);\nvar redefine = __webpack_require__(1320);\nvar anInstance = __webpack_require__(5787);\nvar has = __webpack_require__(6656);\nvar assign = __webpack_require__(1574);\nvar arrayFrom = __webpack_require__(8457);\nvar codeAt = __webpack_require__(8710).codeAt;\nvar toASCII = __webpack_require__(3197);\nvar setToStringTag = __webpack_require__(8003);\nvar URLSearchParamsModule = __webpack_require__(1637);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n/* eslint-disable no-control-regex -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\t\\u000A\\u000D #%/:?@[\\\\]]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\t\\u000A\\u000D #/:?@[\\\\]]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\u000A\\u000D]/g;\n/* eslint-enable no-control-regex -- safe */\nvar EOF;\n\nvar parseHost = function (url, input) {\n var result, codePoints, index;\n if (input.charAt(0) == '[') {\n if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(input.slice(1, -1));\n if (!result) return INVALID_HOST;\n url.host = result;\n // opaque host\n } else if (!isSpecial(url)) {\n if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n url.host = result;\n } else {\n input = toASCII(input);\n if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n url.host = result;\n }\n};\n\nvar parseIPv4 = function (input) {\n var parts = input.split('.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.pop();\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && part.charAt(0) == '0') {\n radix = HEX_START.test(part) ? 16 : 8;\n part = part.slice(radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n number = parseInt(part, radix);\n }\n numbers.push(number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = numbers.pop();\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var char = function () {\n return input.charAt(pointer);\n };\n\n if (char() == ':') {\n if (input.charAt(1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (char()) {\n if (pieceIndex == 8) return;\n if (char() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && HEX.test(char())) {\n value = value * 16 + parseInt(char(), 16);\n pointer++;\n length++;\n }\n if (char() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (char()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (char() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!DIGIT.test(char())) return;\n while (DIGIT.test(char())) {\n number = parseInt(char(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (char() == ':') {\n pointer++;\n if (!char()) return;\n } else if (char()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n result.unshift(host % 256);\n host = floor(host / 256);\n } return result.join('.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += host[index].toString(16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n var code = codeAt(char, 0);\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\nvar isSpecial = function (url) {\n return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && ALPHA.test(string.charAt(0))\n && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n string.length == 2 ||\n ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\nvar shortenURLsPath = function (url) {\n var path = url.path;\n var pathSize = path.length;\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.pop();\n }\n};\n\nvar isSingleDot = function (segment) {\n return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n segment = segment.toLowerCase();\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseURL = function (url, input, stateOverride, base) {\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, char, bufferCodePoints, failure;\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = input.replace(TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n char = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (char && ALPHA.test(char)) {\n buffer += char.toLowerCase();\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n buffer += char.toLowerCase();\n } else if (char == ':') {\n if (stateOverride && (\n (isSpecial(url) != has(specialSchemes, buffer)) ||\n (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (isSpecial(url)) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n url.path.push('');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && char == '#') {\n url.scheme = base.scheme;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (char == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (char == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (char == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n state = RELATIVE_SLASH;\n } else if (char == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.path.pop();\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (char == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (char != '/' && char != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (char == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += char;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (char == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (isSpecial(url) && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (char == '[') seenBracket = true;\n else if (char == ']') seenBracket = false;\n buffer += char;\n } break;\n\n case PORT:\n if (DIGIT.test(char)) {\n buffer += char;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url)) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (char == '/' || char == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (char == EOF) {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '?') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n url.host = base.host;\n url.path = base.path.slice();\n shortenURLsPath(url);\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (char == '/' || char == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = parseHost(url, buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += char;\n break;\n\n case PATH_START:\n if (isSpecial(url)) {\n state = PATH;\n if (char != '/' && char != '\\\\') continue;\n } else if (!stateOverride && char == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n state = PATH;\n if (char != '/') continue;\n } break;\n\n case PATH:\n if (\n char == EOF || char == '/' ||\n (char == '\\\\' && isSpecial(url)) ||\n (!stateOverride && (char == '?' || char == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n shortenURLsPath(url);\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else if (isSingleDot(buffer)) {\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n }\n url.path.push(buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n url.path.shift();\n }\n }\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(char, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n if (char == \"'\" && isSpecial(url)) url.query += '%27';\n else if (char == '#') url.query += '%23';\n else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLConstructor, 'URL');\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var urlString = String(url);\n var state = setInternalState(that, { type: 'URL' });\n var baseState, failure;\n if (base !== undefined) {\n if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n else {\n failure = parseURL(baseState = {}, String(base));\n if (failure) throw TypeError(failure);\n }\n }\n failure = parseURL(state, urlString, null, baseState);\n if (failure) throw TypeError(failure);\n var searchParams = state.searchParams = new URLSearchParams();\n var searchParamsState = getInternalSearchParamsState(searchParams);\n searchParamsState.updateSearchParams(state.query);\n searchParamsState.updateURL = function () {\n state.query = String(searchParams) || null;\n };\n if (!DESCRIPTORS) {\n that.href = serializeURL.call(that);\n that.origin = getOrigin.call(that);\n that.protocol = getProtocol.call(that);\n that.username = getUsername.call(that);\n that.password = getPassword.call(that);\n that.host = getHost.call(that);\n that.hostname = getHostname.call(that);\n that.port = getPort.call(that);\n that.pathname = getPathname.call(that);\n that.search = getSearch.call(that);\n that.searchParams = getSearchParams.call(that);\n that.hash = getHash.call(that);\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (includesCredentials(url)) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n};\n\nvar getOrigin = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var port = url.port;\n if (scheme == 'blob') try {\n return new URL(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !isSpecial(url)) return 'null';\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n var url = getInternalURLState(this);\n var host = url.host;\n var port = url.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n var host = getInternalURLState(this).host;\n return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n var port = getInternalURLState(this).port;\n return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n var url = getInternalURLState(this);\n var path = url.path;\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n var query = getInternalURLState(this).query;\n return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n var fragment = getInternalURLState(this).fragment;\n return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor(serializeURL, function (href) {\n var url = getInternalURLState(this);\n var urlString = String(href);\n var failure = parseURL(url, urlString);\n if (failure) throw TypeError(failure);\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor(getOrigin),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor(getProtocol, function (protocol) {\n var url = getInternalURLState(this);\n parseURL(url, String(protocol) + ':', SCHEME_START);\n }),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor(getUsername, function (username) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(username));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor(getPassword, function (password) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(password));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor(getHost, function (host) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(host), HOST);\n }),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor(getHostname, function (hostname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(hostname), HOSTNAME);\n }),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor(getPort, function (port) {\n var url = getInternalURLState(this);\n if (cannotHaveUsernamePasswordPort(url)) return;\n port = String(port);\n if (port == '') url.port = null;\n else parseURL(url, port, PORT);\n }),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor(getPathname, function (pathname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n url.path = [];\n parseURL(url, pathname + '', PATH_START);\n }),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor(getSearch, function (search) {\n var url = getInternalURLState(this);\n search = String(search);\n if (search == '') {\n url.query = null;\n } else {\n if ('?' == search.charAt(0)) search = search.slice(1);\n url.query = '';\n parseURL(url, search, QUERY);\n }\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor(getSearchParams),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor(getHash, function (hash) {\n var url = getInternalURLState(this);\n hash = String(hash);\n if (hash == '') {\n url.fragment = null;\n return;\n }\n if ('#' == hash.charAt(0)) hash = hash.slice(1);\n url.fragment = '';\n parseURL(url, hash, FRAGMENT);\n })\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n return nativeCreateObjectURL.apply(NativeURL, arguments);\n });\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n return nativeRevokeObjectURL.apply(NativeURL, arguments);\n });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be in strict mode.\n!function() {\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"Dropzone\": function() { return /* reexport */ Dropzone; },\n \"default\": function() { return /* binding */ dropzone_dist; }\n});\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.concat.js\nvar es_array_concat = __webpack_require__(2222);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.filter.js\nvar es_array_filter = __webpack_require__(7327);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.index-of.js\nvar es_array_index_of = __webpack_require__(2772);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.iterator.js\nvar es_array_iterator = __webpack_require__(6992);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.map.js\nvar es_array_map = __webpack_require__(1249);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.slice.js\nvar es_array_slice = __webpack_require__(7042);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.splice.js\nvar es_array_splice = __webpack_require__(561);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array-buffer.constructor.js\nvar es_array_buffer_constructor = __webpack_require__(8264);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js\nvar es_function_name = __webpack_require__(8309);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.get-prototype-of.js\nvar es_object_get_prototype_of = __webpack_require__(489);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js\nvar es_object_to_string = __webpack_require__(1539);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js\nvar es_regexp_exec = __webpack_require__(4916);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js\nvar es_regexp_to_string = __webpack_require__(9714);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.iterator.js\nvar es_string_iterator = __webpack_require__(8783);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.match.js\nvar es_string_match = __webpack_require__(4723);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js\nvar es_string_replace = __webpack_require__(5306);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.split.js\nvar es_string_split = __webpack_require__(3123);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.trim.js\nvar es_string_trim = __webpack_require__(3210);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.uint8-array.js\nvar es_typed_array_uint8_array = __webpack_require__(2472);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.copy-within.js\nvar es_typed_array_copy_within = __webpack_require__(2990);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.every.js\nvar es_typed_array_every = __webpack_require__(8927);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.fill.js\nvar es_typed_array_fill = __webpack_require__(3105);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.filter.js\nvar es_typed_array_filter = __webpack_require__(5035);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.find.js\nvar es_typed_array_find = __webpack_require__(4345);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.find-index.js\nvar es_typed_array_find_index = __webpack_require__(7174);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.for-each.js\nvar es_typed_array_for_each = __webpack_require__(2846);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.includes.js\nvar es_typed_array_includes = __webpack_require__(4731);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.index-of.js\nvar es_typed_array_index_of = __webpack_require__(7209);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.iterator.js\nvar es_typed_array_iterator = __webpack_require__(6319);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.join.js\nvar es_typed_array_join = __webpack_require__(8867);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.last-index-of.js\nvar es_typed_array_last_index_of = __webpack_require__(7789);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.map.js\nvar es_typed_array_map = __webpack_require__(3739);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.reduce.js\nvar es_typed_array_reduce = __webpack_require__(9368);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.reduce-right.js\nvar es_typed_array_reduce_right = __webpack_require__(4483);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.reverse.js\nvar es_typed_array_reverse = __webpack_require__(2056);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.set.js\nvar es_typed_array_set = __webpack_require__(3462);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.slice.js\nvar es_typed_array_slice = __webpack_require__(678);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.some.js\nvar es_typed_array_some = __webpack_require__(7462);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.sort.js\nvar es_typed_array_sort = __webpack_require__(3824);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.subarray.js\nvar es_typed_array_subarray = __webpack_require__(5021);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-locale-string.js\nvar es_typed_array_to_locale_string = __webpack_require__(2974);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-string.js\nvar es_typed_array_to_string = __webpack_require__(5016);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.for-each.js\nvar web_dom_collections_for_each = __webpack_require__(4747);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.iterator.js\nvar web_dom_collections_iterator = __webpack_require__(3948);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url.js\nvar web_url = __webpack_require__(285);\n;// CONCATENATED MODULE: ./src/emitter.js\n\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// The Emitter class provides the ability to call `.on()` on Dropzone to listen\n// to events.\n// It is strongly based on component's emitter class, and I removed the\n// functionality because of the dependency hell with different frameworks.\nvar Emitter = /*#__PURE__*/function () {\n function Emitter() {\n _classCallCheck(this, Emitter);\n }\n\n _createClass(Emitter, [{\n key: \"on\",\n value: // Add an event listener for given event\n function on(event, fn) {\n this._callbacks = this._callbacks || {}; // Create namespace for this event\n\n if (!this._callbacks[event]) {\n this._callbacks[event] = [];\n }\n\n this._callbacks[event].push(fn);\n\n return this;\n }\n }, {\n key: \"emit\",\n value: function emit(event) {\n this._callbacks = this._callbacks || {};\n var callbacks = this._callbacks[event];\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (callbacks) {\n var _iterator = _createForOfIteratorHelper(callbacks, true),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var callback = _step.value;\n callback.apply(this, args);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n } // trigger a corresponding DOM event\n\n\n if (this.element) {\n this.element.dispatchEvent(this.makeEvent(\"dropzone:\" + event, {\n args: args\n }));\n }\n\n return this;\n }\n }, {\n key: \"makeEvent\",\n value: function makeEvent(eventName, detail) {\n var params = {\n bubbles: true,\n cancelable: true,\n detail: detail\n };\n\n if (typeof window.CustomEvent === \"function\") {\n return new CustomEvent(eventName, params);\n } else {\n // IE 11 support\n // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n var evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(eventName, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n } // Remove event listener for given event. If fn is not provided, all event\n // listeners for that event will be removed. If neither is provided, all\n // event listeners will be removed.\n\n }, {\n key: \"off\",\n value: function off(event, fn) {\n if (!this._callbacks || arguments.length === 0) {\n this._callbacks = {};\n return this;\n } // specific event\n\n\n var callbacks = this._callbacks[event];\n\n if (!callbacks) {\n return this;\n } // remove all handlers\n\n\n if (arguments.length === 1) {\n delete this._callbacks[event];\n return this;\n } // remove specific handler\n\n\n for (var i = 0; i < callbacks.length; i++) {\n var callback = callbacks[i];\n\n if (callback === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n return this;\n }\n }]);\n\n return Emitter;\n}();\n\n\n;// CONCATENATED MODULE: ./src/preview-template.html\n// Module\nvar code = \"
Check
Error
\";\n// Exports\n/* harmony default export */ var preview_template = (code);\n;// CONCATENATED MODULE: ./src/options.js\n\n\n\n\n\nfunction options_createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = options_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction options_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return options_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return options_arrayLikeToArray(o, minLen); }\n\nfunction options_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\nvar defaultOptions = {\n /**\n * Has to be specified on elements other than form (or when the form\n * doesn't have an `action` attribute). You can also\n * provide a function that will be called with `files` and\n * must return the url (since `v3.12.0`)\n */\n url: null,\n\n /**\n * Can be changed to `\"put\"` if necessary. You can also provide a function\n * that will be called with `files` and must return the method (since `v3.12.0`).\n */\n method: \"post\",\n\n /**\n * Will be set on the XHRequest.\n */\n withCredentials: false,\n\n /**\n * The timeout for the XHR requests in milliseconds (since `v4.4.0`).\n * If set to null or 0, no timeout is going to be set.\n */\n timeout: null,\n\n /**\n * How many file uploads to process in parallel (See the\n * Enqueuing file uploads documentation section for more info)\n */\n parallelUploads: 2,\n\n /**\n * Whether to send multiple files in one request. If\n * this it set to true, then the fallback file input element will\n * have the `multiple` attribute as well. This option will\n * also trigger additional events (like `processingmultiple`). See the events\n * documentation section for more information.\n */\n uploadMultiple: false,\n\n /**\n * Whether you want files to be uploaded in chunks to your server. This can't be\n * used in combination with `uploadMultiple`.\n *\n * See [chunksUploaded](#config-chunksUploaded) for the callback to finalise an upload.\n */\n chunking: false,\n\n /**\n * If `chunking` is enabled, this defines whether **every** file should be chunked,\n * even if the file size is below chunkSize. This means, that the additional chunk\n * form data will be submitted and the `chunksUploaded` callback will be invoked.\n */\n forceChunking: false,\n\n /**\n * If `chunking` is `true`, then this defines the chunk size in bytes.\n */\n chunkSize: 2000000,\n\n /**\n * If `true`, the individual chunks of a file are being uploaded simultaneously.\n */\n parallelChunkUploads: false,\n\n /**\n * Whether a chunk should be retried if it fails.\n */\n retryChunks: false,\n\n /**\n * If `retryChunks` is true, how many times should it be retried.\n */\n retryChunksLimit: 3,\n\n /**\n * The maximum filesize (in bytes) that is allowed to be uploaded.\n */\n maxFilesize: 256,\n\n /**\n * The name of the file param that gets transferred.\n * **NOTE**: If you have the option `uploadMultiple` set to `true`, then\n * Dropzone will append `[]` to the name.\n */\n paramName: \"file\",\n\n /**\n * Whether thumbnails for images should be generated\n */\n createImageThumbnails: true,\n\n /**\n * In MB. When the filename exceeds this limit, the thumbnail will not be generated.\n */\n maxThumbnailFilesize: 10,\n\n /**\n * If `null`, the ratio of the image will be used to calculate it.\n */\n thumbnailWidth: 120,\n\n /**\n * The same as `thumbnailWidth`. If both are null, images will not be resized.\n */\n thumbnailHeight: 120,\n\n /**\n * How the images should be scaled down in case both, `thumbnailWidth` and `thumbnailHeight` are provided.\n * Can be either `contain` or `crop`.\n */\n thumbnailMethod: \"crop\",\n\n /**\n * If set, images will be resized to these dimensions before being **uploaded**.\n * If only one, `resizeWidth` **or** `resizeHeight` is provided, the original aspect\n * ratio of the file will be preserved.\n *\n * The `options.transformFile` function uses these options, so if the `transformFile` function\n * is overridden, these options don't do anything.\n */\n resizeWidth: null,\n\n /**\n * See `resizeWidth`.\n */\n resizeHeight: null,\n\n /**\n * The mime type of the resized image (before it gets uploaded to the server).\n * If `null` the original mime type will be used. To force jpeg, for example, use `image/jpeg`.\n * See `resizeWidth` for more information.\n */\n resizeMimeType: null,\n\n /**\n * The quality of the resized images. See `resizeWidth`.\n */\n resizeQuality: 0.8,\n\n /**\n * How the images should be scaled down in case both, `resizeWidth` and `resizeHeight` are provided.\n * Can be either `contain` or `crop`.\n */\n resizeMethod: \"contain\",\n\n /**\n * The base that is used to calculate the **displayed** filesize. You can\n * change this to 1024 if you would rather display kibibytes, mebibytes,\n * etc... 1024 is technically incorrect, because `1024 bytes` are `1 kibibyte`\n * not `1 kilobyte`. You can change this to `1024` if you don't care about\n * validity.\n */\n filesizeBase: 1000,\n\n /**\n * If not `null` defines how many files this Dropzone handles. If it exceeds,\n * the event `maxfilesexceeded` will be called. The dropzone element gets the\n * class `dz-max-files-reached` accordingly so you can provide visual\n * feedback.\n */\n maxFiles: null,\n\n /**\n * An optional object to send additional headers to the server. Eg:\n * `{ \"My-Awesome-Header\": \"header value\" }`\n */\n headers: null,\n\n /**\n * If `true`, the dropzone element itself will be clickable, if `false`\n * nothing will be clickable.\n *\n * You can also pass an HTML element, a CSS selector (for multiple elements)\n * or an array of those. In that case, all of those elements will trigger an\n * upload when clicked.\n */\n clickable: true,\n\n /**\n * Whether hidden files in directories should be ignored.\n */\n ignoreHiddenFiles: true,\n\n /**\n * The default implementation of `accept` checks the file's mime type or\n * extension against this list. This is a comma separated list of mime\n * types or file extensions.\n *\n * Eg.: `image/*,application/pdf,.psd`\n *\n * If the Dropzone is `clickable` this option will also be used as\n * [`accept`](https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept)\n * parameter on the hidden file input as well.\n */\n acceptedFiles: null,\n\n /**\n * **Deprecated!**\n * Use acceptedFiles instead.\n */\n acceptedMimeTypes: null,\n\n /**\n * If false, files will be added to the queue but the queue will not be\n * processed automatically.\n * This can be useful if you need some additional user input before sending\n * files (or if you want want all files sent at once).\n * If you're ready to send the file simply call `myDropzone.processQueue()`.\n *\n * See the [enqueuing file uploads](#enqueuing-file-uploads) documentation\n * section for more information.\n */\n autoProcessQueue: true,\n\n /**\n * If false, files added to the dropzone will not be queued by default.\n * You'll have to call `enqueueFile(file)` manually.\n */\n autoQueue: true,\n\n /**\n * If `true`, this will add a link to every file preview to remove or cancel (if\n * already uploading) the file. The `dictCancelUpload`, `dictCancelUploadConfirmation`\n * and `dictRemoveFile` options are used for the wording.\n */\n addRemoveLinks: false,\n\n /**\n * Defines where to display the file previews – if `null` the\n * Dropzone element itself is used. Can be a plain `HTMLElement` or a CSS\n * selector. The element should have the `dropzone-previews` class so\n * the previews are displayed properly.\n */\n previewsContainer: null,\n\n /**\n * Set this to `true` if you don't want previews to be shown.\n */\n disablePreviews: false,\n\n /**\n * This is the element the hidden input field (which is used when clicking on the\n * dropzone to trigger file selection) will be appended to. This might\n * be important in case you use frameworks to switch the content of your page.\n *\n * Can be a selector string, or an element directly.\n */\n hiddenInputContainer: \"body\",\n\n /**\n * If null, no capture type will be specified\n * If camera, mobile devices will skip the file selection and choose camera\n * If microphone, mobile devices will skip the file selection and choose the microphone\n * If camcorder, mobile devices will skip the file selection and choose the camera in video mode\n * On apple devices multiple must be set to false. AcceptedFiles may need to\n * be set to an appropriate mime type (e.g. \"image/*\", \"audio/*\", or \"video/*\").\n */\n capture: null,\n\n /**\n * **Deprecated**. Use `renameFile` instead.\n */\n renameFilename: null,\n\n /**\n * A function that is invoked before the file is uploaded to the server and renames the file.\n * This function gets the `File` as argument and can use the `file.name`. The actual name of the\n * file that gets used during the upload can be accessed through `file.upload.filename`.\n */\n renameFile: null,\n\n /**\n * If `true` the fallback will be forced. This is very useful to test your server\n * implementations first and make sure that everything works as\n * expected without dropzone if you experience problems, and to test\n * how your fallbacks will look.\n */\n forceFallback: false,\n\n /**\n * The text used before any files are dropped.\n */\n dictDefaultMessage: \"Drop files here to upload\",\n\n /**\n * The text that replaces the default message text it the browser is not supported.\n */\n dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n\n /**\n * The text that will be added before the fallback form.\n * If you provide a fallback element yourself, or if this option is `null` this will\n * be ignored.\n */\n dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n\n /**\n * If the filesize is too big.\n * `{{filesize}}` and `{{maxFilesize}}` will be replaced with the respective configuration values.\n */\n dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n\n /**\n * If the file doesn't match the file type.\n */\n dictInvalidFileType: \"You can't upload files of this type.\",\n\n /**\n * If the server response was invalid.\n * `{{statusCode}}` will be replaced with the servers status code.\n */\n dictResponseError: \"Server responded with {{statusCode}} code.\",\n\n /**\n * If `addRemoveLinks` is true, the text to be used for the cancel upload link.\n */\n dictCancelUpload: \"Cancel upload\",\n\n /**\n * The text that is displayed if an upload was manually canceled\n */\n dictUploadCanceled: \"Upload canceled.\",\n\n /**\n * If `addRemoveLinks` is true, the text to be used for confirmation when cancelling upload.\n */\n dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n\n /**\n * If `addRemoveLinks` is true, the text to be used to remove a file.\n */\n dictRemoveFile: \"Remove file\",\n\n /**\n * If this is not null, then the user will be prompted before removing a file.\n */\n dictRemoveFileConfirmation: null,\n\n /**\n * Displayed if `maxFiles` is st and exceeded.\n * The string `{{maxFiles}}` will be replaced by the configuration value.\n */\n dictMaxFilesExceeded: \"You can not upload any more files.\",\n\n /**\n * Allows you to translate the different units. Starting with `tb` for terabytes and going down to\n * `b` for bytes.\n */\n dictFileSizeUnits: {\n tb: \"TB\",\n gb: \"GB\",\n mb: \"MB\",\n kb: \"KB\",\n b: \"b\"\n },\n\n /**\n * Called when dropzone initialized\n * You can add event listeners here\n */\n init: function init() {},\n\n /**\n * Can be an **object** of additional parameters to transfer to the server, **or** a `Function`\n * that gets invoked with the `files`, `xhr` and, if it's a chunked upload, `chunk` arguments. In case\n * of a function, this needs to return a map.\n *\n * The default implementation does nothing for normal uploads, but adds relevant information for\n * chunked uploads.\n *\n * This is the same as adding hidden input fields in the form element.\n */\n params: function params(files, xhr, chunk) {\n if (chunk) {\n return {\n dzuuid: chunk.file.upload.uuid,\n dzchunkindex: chunk.index,\n dztotalfilesize: chunk.file.size,\n dzchunksize: this.options.chunkSize,\n dztotalchunkcount: chunk.file.upload.totalChunkCount,\n dzchunkbyteoffset: chunk.index * this.options.chunkSize\n };\n }\n },\n\n /**\n * A function that gets a [file](https://developer.mozilla.org/en-US/docs/DOM/File)\n * and a `done` function as parameters.\n *\n * If the done function is invoked without arguments, the file is \"accepted\" and will\n * be processed. If you pass an error message, the file is rejected, and the error\n * message will be displayed.\n * This function will not be called if the file is too big or doesn't match the mime types.\n */\n accept: function accept(file, done) {\n return done();\n },\n\n /**\n * The callback that will be invoked when all chunks have been uploaded for a file.\n * It gets the file for which the chunks have been uploaded as the first parameter,\n * and the `done` function as second. `done()` needs to be invoked when everything\n * needed to finish the upload process is done.\n */\n chunksUploaded: function chunksUploaded(file, done) {\n done();\n },\n\n /**\n * Gets called when the browser is not supported.\n * The default implementation shows the fallback input field and adds\n * a text.\n */\n fallback: function fallback() {\n // This code should pass in IE7... :(\n var messageElement;\n this.element.className = \"\".concat(this.element.className, \" dz-browser-not-supported\");\n\n var _iterator = options_createForOfIteratorHelper(this.element.getElementsByTagName(\"div\"), true),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var child = _step.value;\n\n if (/(^| )dz-message($| )/.test(child.className)) {\n messageElement = child;\n child.className = \"dz-message\"; // Removes the 'dz-default' class\n\n break;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n if (!messageElement) {\n messageElement = Dropzone.createElement('
');\n this.element.appendChild(messageElement);\n }\n\n var span = messageElement.getElementsByTagName(\"span\")[0];\n\n if (span) {\n if (span.textContent != null) {\n span.textContent = this.options.dictFallbackMessage;\n } else if (span.innerText != null) {\n span.innerText = this.options.dictFallbackMessage;\n }\n }\n\n return this.element.appendChild(this.getFallbackForm());\n },\n\n /**\n * Gets called to calculate the thumbnail dimensions.\n *\n * It gets `file`, `width` and `height` (both may be `null`) as parameters and must return an object containing:\n *\n * - `srcWidth` & `srcHeight` (required)\n * - `trgWidth` & `trgHeight` (required)\n * - `srcX` & `srcY` (optional, default `0`)\n * - `trgX` & `trgY` (optional, default `0`)\n *\n * Those values are going to be used by `ctx.drawImage()`.\n */\n resize: function resize(file, width, height, resizeMethod) {\n var info = {\n srcX: 0,\n srcY: 0,\n srcWidth: file.width,\n srcHeight: file.height\n };\n var srcRatio = file.width / file.height; // Automatically calculate dimensions if not specified\n\n if (width == null && height == null) {\n width = info.srcWidth;\n height = info.srcHeight;\n } else if (width == null) {\n width = height * srcRatio;\n } else if (height == null) {\n height = width / srcRatio;\n } // Make sure images aren't upscaled\n\n\n width = Math.min(width, info.srcWidth);\n height = Math.min(height, info.srcHeight);\n var trgRatio = width / height;\n\n if (info.srcWidth > width || info.srcHeight > height) {\n // Image is bigger and needs rescaling\n if (resizeMethod === \"crop\") {\n if (srcRatio > trgRatio) {\n info.srcHeight = file.height;\n info.srcWidth = info.srcHeight * trgRatio;\n } else {\n info.srcWidth = file.width;\n info.srcHeight = info.srcWidth / trgRatio;\n }\n } else if (resizeMethod === \"contain\") {\n // Method 'contain'\n if (srcRatio > trgRatio) {\n height = width / srcRatio;\n } else {\n width = height * srcRatio;\n }\n } else {\n throw new Error(\"Unknown resizeMethod '\".concat(resizeMethod, \"'\"));\n }\n }\n\n info.srcX = (file.width - info.srcWidth) / 2;\n info.srcY = (file.height - info.srcHeight) / 2;\n info.trgWidth = width;\n info.trgHeight = height;\n return info;\n },\n\n /**\n * Can be used to transform the file (for example, resize an image if necessary).\n *\n * The default implementation uses `resizeWidth` and `resizeHeight` (if provided) and resizes\n * images according to those dimensions.\n *\n * Gets the `file` as the first parameter, and a `done()` function as the second, that needs\n * to be invoked with the file when the transformation is done.\n */\n transformFile: function transformFile(file, done) {\n if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) {\n return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done);\n } else {\n return done(file);\n }\n },\n\n /**\n * A string that contains the template used for each dropped\n * file. Change it to fulfill your needs but make sure to properly\n * provide all elements.\n *\n * If you want to use an actual HTML element instead of providing a String\n * as a config option, you could create a div with the id `tpl`,\n * put the template inside it and provide the element like this:\n *\n * document\n * .querySelector('#tpl')\n * .innerHTML\n *\n */\n previewTemplate: preview_template,\n\n /*\n Those functions register themselves to the events on init and handle all\n the user interface specific stuff. Overwriting them won't break the upload\n but can break the way it's displayed.\n You can overwrite them if you don't like the default behavior. If you just\n want to add an additional event handler, register it on the dropzone object\n and don't overwrite those options.\n */\n // Those are self explanatory and simply concern the DragnDrop.\n drop: function drop(e) {\n return this.element.classList.remove(\"dz-drag-hover\");\n },\n dragstart: function dragstart(e) {},\n dragend: function dragend(e) {\n return this.element.classList.remove(\"dz-drag-hover\");\n },\n dragenter: function dragenter(e) {\n return this.element.classList.add(\"dz-drag-hover\");\n },\n dragover: function dragover(e) {\n return this.element.classList.add(\"dz-drag-hover\");\n },\n dragleave: function dragleave(e) {\n return this.element.classList.remove(\"dz-drag-hover\");\n },\n paste: function paste(e) {},\n // Called whenever there are no files left in the dropzone anymore, and the\n // dropzone should be displayed as if in the initial state.\n reset: function reset() {\n return this.element.classList.remove(\"dz-started\");\n },\n // Called when a file is added to the queue\n // Receives `file`\n addedfile: function addedfile(file) {\n var _this = this;\n\n if (this.element === this.previewsContainer) {\n this.element.classList.add(\"dz-started\");\n }\n\n if (this.previewsContainer && !this.options.disablePreviews) {\n file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n file.previewTemplate = file.previewElement; // Backwards compatibility\n\n this.previewsContainer.appendChild(file.previewElement);\n\n var _iterator2 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-name]\"), true),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var node = _step2.value;\n node.textContent = file.name;\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n var _iterator3 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-size]\"), true),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n node = _step3.value;\n node.innerHTML = this.filesize(file.size);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n if (this.options.addRemoveLinks) {\n file._removeLink = Dropzone.createElement(\"
\".concat(this.options.dictRemoveFile, \"\"));\n file.previewElement.appendChild(file._removeLink);\n }\n\n var removeFileEvent = function removeFileEvent(e) {\n e.preventDefault();\n e.stopPropagation();\n\n if (file.status === Dropzone.UPLOADING) {\n return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function () {\n return _this.removeFile(file);\n });\n } else {\n if (_this.options.dictRemoveFileConfirmation) {\n return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function () {\n return _this.removeFile(file);\n });\n } else {\n return _this.removeFile(file);\n }\n }\n };\n\n var _iterator4 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-remove]\"), true),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var removeLink = _step4.value;\n removeLink.addEventListener(\"click\", removeFileEvent);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n }\n },\n // Called whenever a file is removed.\n removedfile: function removedfile(file) {\n if (file.previewElement != null && file.previewElement.parentNode != null) {\n file.previewElement.parentNode.removeChild(file.previewElement);\n }\n\n return this._updateMaxFilesReachedClass();\n },\n // Called when a thumbnail has been generated\n // Receives `file` and `dataUrl`\n thumbnail: function thumbnail(file, dataUrl) {\n if (file.previewElement) {\n file.previewElement.classList.remove(\"dz-file-preview\");\n\n var _iterator5 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\"), true),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var thumbnailElement = _step5.value;\n thumbnailElement.alt = file.name;\n thumbnailElement.src = dataUrl;\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n return setTimeout(function () {\n return file.previewElement.classList.add(\"dz-image-preview\");\n }, 1);\n }\n },\n // Called whenever an error occurs\n // Receives `file` and `message`\n error: function error(file, message) {\n if (file.previewElement) {\n file.previewElement.classList.add(\"dz-error\");\n\n if (typeof message !== \"string\" && message.error) {\n message = message.error;\n }\n\n var _iterator6 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-errormessage]\"), true),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var node = _step6.value;\n node.textContent = message;\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n }\n },\n errormultiple: function errormultiple() {},\n // Called when a file gets processed. Since there is a cue, not all added\n // files are processed immediately.\n // Receives `file`\n processing: function processing(file) {\n if (file.previewElement) {\n file.previewElement.classList.add(\"dz-processing\");\n\n if (file._removeLink) {\n return file._removeLink.innerHTML = this.options.dictCancelUpload;\n }\n }\n },\n processingmultiple: function processingmultiple() {},\n // Called whenever the upload progress gets updated.\n // Receives `file`, `progress` (percentage 0-100) and `bytesSent`.\n // To get the total number of bytes of the file, use `file.size`\n uploadprogress: function uploadprogress(file, progress, bytesSent) {\n if (file.previewElement) {\n var _iterator7 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\"), true),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var node = _step7.value;\n node.nodeName === \"PROGRESS\" ? node.value = progress : node.style.width = \"\".concat(progress, \"%\");\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n }\n },\n // Called whenever the total upload progress gets updated.\n // Called with totalUploadProgress (0-100), totalBytes and totalBytesSent\n totaluploadprogress: function totaluploadprogress() {},\n // Called just before the file is sent. Gets the `xhr` object as second\n // parameter, so you can modify it (for example to add a CSRF token) and a\n // `formData` object to add additional information.\n sending: function sending() {},\n sendingmultiple: function sendingmultiple() {},\n // When the complete upload is finished and successful\n // Receives `file`\n success: function success(file) {\n if (file.previewElement) {\n return file.previewElement.classList.add(\"dz-success\");\n }\n },\n successmultiple: function successmultiple() {},\n // When the upload is canceled.\n canceled: function canceled(file) {\n return this.emit(\"error\", file, this.options.dictUploadCanceled);\n },\n canceledmultiple: function canceledmultiple() {},\n // When the upload is finished, either with success or an error.\n // Receives `file`\n complete: function complete(file) {\n if (file._removeLink) {\n file._removeLink.innerHTML = this.options.dictRemoveFile;\n }\n\n if (file.previewElement) {\n return file.previewElement.classList.add(\"dz-complete\");\n }\n },\n completemultiple: function completemultiple() {},\n maxfilesexceeded: function maxfilesexceeded() {},\n maxfilesreached: function maxfilesreached() {},\n queuecomplete: function queuecomplete() {},\n addedfiles: function addedfiles() {}\n};\n/* harmony default export */ var src_options = (defaultOptions);\n;// CONCATENATED MODULE: ./src/dropzone.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction dropzone_createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = dropzone_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction dropzone_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return dropzone_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return dropzone_arrayLikeToArray(o, minLen); }\n\nfunction dropzone_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction dropzone_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction dropzone_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction dropzone_createClass(Constructor, protoProps, staticProps) { if (protoProps) dropzone_defineProperties(Constructor.prototype, protoProps); if (staticProps) dropzone_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\nvar Dropzone = /*#__PURE__*/function (_Emitter) {\n _inherits(Dropzone, _Emitter);\n\n var _super = _createSuper(Dropzone);\n\n function Dropzone(el, options) {\n var _this;\n\n dropzone_classCallCheck(this, Dropzone);\n\n _this = _super.call(this);\n var fallback, left;\n _this.element = el; // For backwards compatibility since the version was in the prototype previously\n\n _this.version = Dropzone.version;\n _this.clickableElements = [];\n _this.listeners = [];\n _this.files = []; // All files\n\n if (typeof _this.element === \"string\") {\n _this.element = document.querySelector(_this.element);\n } // Not checking if instance of HTMLElement or Element since IE9 is extremely weird.\n\n\n if (!_this.element || _this.element.nodeType == null) {\n throw new Error(\"Invalid dropzone element.\");\n }\n\n if (_this.element.dropzone) {\n throw new Error(\"Dropzone already attached.\");\n } // Now add this dropzone to the instances.\n\n\n Dropzone.instances.push(_assertThisInitialized(_this)); // Put the dropzone inside the element itself.\n\n _this.element.dropzone = _assertThisInitialized(_this);\n var elementOptions = (left = Dropzone.optionsForElement(_this.element)) != null ? left : {};\n _this.options = Dropzone.extend({}, src_options, elementOptions, options != null ? options : {});\n _this.options.previewTemplate = _this.options.previewTemplate.replace(/\\n*/g, \"\"); // If the browser failed, just call the fallback and leave\n\n if (_this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n return _possibleConstructorReturn(_this, _this.options.fallback.call(_assertThisInitialized(_this)));\n } // @options.url = @element.getAttribute \"action\" unless @options.url?\n\n\n if (_this.options.url == null) {\n _this.options.url = _this.element.getAttribute(\"action\");\n }\n\n if (!_this.options.url) {\n throw new Error(\"No URL provided.\");\n }\n\n if (_this.options.acceptedFiles && _this.options.acceptedMimeTypes) {\n throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n }\n\n if (_this.options.uploadMultiple && _this.options.chunking) {\n throw new Error(\"You cannot set both: uploadMultiple and chunking.\");\n } // Backwards compatibility\n\n\n if (_this.options.acceptedMimeTypes) {\n _this.options.acceptedFiles = _this.options.acceptedMimeTypes;\n delete _this.options.acceptedMimeTypes;\n } // Backwards compatibility\n\n\n if (_this.options.renameFilename != null) {\n _this.options.renameFile = function (file) {\n return _this.options.renameFilename.call(_assertThisInitialized(_this), file.name, file);\n };\n }\n\n if (typeof _this.options.method === \"string\") {\n _this.options.method = _this.options.method.toUpperCase();\n }\n\n if ((fallback = _this.getExistingFallback()) && fallback.parentNode) {\n // Remove the fallback\n fallback.parentNode.removeChild(fallback);\n } // Display previews in the previewsContainer element or the Dropzone element unless explicitly set to false\n\n\n if (_this.options.previewsContainer !== false) {\n if (_this.options.previewsContainer) {\n _this.previewsContainer = Dropzone.getElement(_this.options.previewsContainer, \"previewsContainer\");\n } else {\n _this.previewsContainer = _this.element;\n }\n }\n\n if (_this.options.clickable) {\n if (_this.options.clickable === true) {\n _this.clickableElements = [_this.element];\n } else {\n _this.clickableElements = Dropzone.getElements(_this.options.clickable, \"clickable\");\n }\n }\n\n _this.init();\n\n return _this;\n } // Returns all files that have been accepted\n\n\n dropzone_createClass(Dropzone, [{\n key: \"getAcceptedFiles\",\n value: function getAcceptedFiles() {\n return this.files.filter(function (file) {\n return file.accepted;\n }).map(function (file) {\n return file;\n });\n } // Returns all files that have been rejected\n // Not sure when that's going to be useful, but added for completeness.\n\n }, {\n key: \"getRejectedFiles\",\n value: function getRejectedFiles() {\n return this.files.filter(function (file) {\n return !file.accepted;\n }).map(function (file) {\n return file;\n });\n }\n }, {\n key: \"getFilesWithStatus\",\n value: function getFilesWithStatus(status) {\n return this.files.filter(function (file) {\n return file.status === status;\n }).map(function (file) {\n return file;\n });\n } // Returns all files that are in the queue\n\n }, {\n key: \"getQueuedFiles\",\n value: function getQueuedFiles() {\n return this.getFilesWithStatus(Dropzone.QUEUED);\n }\n }, {\n key: \"getUploadingFiles\",\n value: function getUploadingFiles() {\n return this.getFilesWithStatus(Dropzone.UPLOADING);\n }\n }, {\n key: \"getAddedFiles\",\n value: function getAddedFiles() {\n return this.getFilesWithStatus(Dropzone.ADDED);\n } // Files that are either queued or uploading\n\n }, {\n key: \"getActiveFiles\",\n value: function getActiveFiles() {\n return this.files.filter(function (file) {\n return file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED;\n }).map(function (file) {\n return file;\n });\n } // The function that gets called when Dropzone is initialized. You\n // can (and should) setup event listeners inside this function.\n\n }, {\n key: \"init\",\n value: function init() {\n var _this2 = this;\n\n // In case it isn't set already\n if (this.element.tagName === \"form\") {\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n }\n\n if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n this.element.appendChild(Dropzone.createElement(\"
\")));\n }\n\n if (this.clickableElements.length) {\n var setupHiddenFileInput = function setupHiddenFileInput() {\n if (_this2.hiddenFileInput) {\n _this2.hiddenFileInput.parentNode.removeChild(_this2.hiddenFileInput);\n }\n\n _this2.hiddenFileInput = document.createElement(\"input\");\n\n _this2.hiddenFileInput.setAttribute(\"type\", \"file\");\n\n if (_this2.options.maxFiles === null || _this2.options.maxFiles > 1) {\n _this2.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n }\n\n _this2.hiddenFileInput.className = \"dz-hidden-input\";\n\n if (_this2.options.acceptedFiles !== null) {\n _this2.hiddenFileInput.setAttribute(\"accept\", _this2.options.acceptedFiles);\n }\n\n if (_this2.options.capture !== null) {\n _this2.hiddenFileInput.setAttribute(\"capture\", _this2.options.capture);\n } // Making sure that no one can \"tab\" into this field.\n\n\n _this2.hiddenFileInput.setAttribute(\"tabindex\", \"-1\"); // Not setting `display=\"none\"` because some browsers don't accept clicks\n // on elements that aren't displayed.\n\n\n _this2.hiddenFileInput.style.visibility = \"hidden\";\n _this2.hiddenFileInput.style.position = \"absolute\";\n _this2.hiddenFileInput.style.top = \"0\";\n _this2.hiddenFileInput.style.left = \"0\";\n _this2.hiddenFileInput.style.height = \"0\";\n _this2.hiddenFileInput.style.width = \"0\";\n Dropzone.getElement(_this2.options.hiddenInputContainer, \"hiddenInputContainer\").appendChild(_this2.hiddenFileInput);\n\n _this2.hiddenFileInput.addEventListener(\"change\", function () {\n var files = _this2.hiddenFileInput.files;\n\n if (files.length) {\n var _iterator = dropzone_createForOfIteratorHelper(files, true),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var file = _step.value;\n\n _this2.addFile(file);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n _this2.emit(\"addedfiles\", files);\n\n setupHiddenFileInput();\n });\n };\n\n setupHiddenFileInput();\n }\n\n this.URL = window.URL !== null ? window.URL : window.webkitURL; // Setup all event listeners on the Dropzone object itself.\n // They're not in @setupEventListeners() because they shouldn't be removed\n // again when the dropzone gets disabled.\n\n var _iterator2 = dropzone_createForOfIteratorHelper(this.events, true),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var eventName = _step2.value;\n this.on(eventName, this.options[eventName]);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n this.on(\"uploadprogress\", function () {\n return _this2.updateTotalUploadProgress();\n });\n this.on(\"removedfile\", function () {\n return _this2.updateTotalUploadProgress();\n });\n this.on(\"canceled\", function (file) {\n return _this2.emit(\"complete\", file);\n }); // Emit a `queuecomplete` event if all files finished uploading.\n\n this.on(\"complete\", function (file) {\n if (_this2.getAddedFiles().length === 0 && _this2.getUploadingFiles().length === 0 && _this2.getQueuedFiles().length === 0) {\n // This needs to be deferred so that `queuecomplete` really triggers after `complete`\n return setTimeout(function () {\n return _this2.emit(\"queuecomplete\");\n }, 0);\n }\n });\n\n var containsFiles = function containsFiles(e) {\n if (e.dataTransfer.types) {\n // Because e.dataTransfer.types is an Object in\n // IE, we need to iterate like this instead of\n // using e.dataTransfer.types.some()\n for (var i = 0; i < e.dataTransfer.types.length; i++) {\n if (e.dataTransfer.types[i] === \"Files\") return true;\n }\n }\n\n return false;\n };\n\n var noPropagation = function noPropagation(e) {\n // If there are no files, we don't want to stop\n // propagation so we don't interfere with other\n // drag and drop behaviour.\n if (!containsFiles(e)) return;\n e.stopPropagation();\n\n if (e.preventDefault) {\n return e.preventDefault();\n } else {\n return e.returnValue = false;\n }\n }; // Create the listeners\n\n\n this.listeners = [{\n element: this.element,\n events: {\n dragstart: function dragstart(e) {\n return _this2.emit(\"dragstart\", e);\n },\n dragenter: function dragenter(e) {\n noPropagation(e);\n return _this2.emit(\"dragenter\", e);\n },\n dragover: function dragover(e) {\n // Makes it possible to drag files from chrome's download bar\n // http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar\n // Try is required to prevent bug in Internet Explorer 11 (SCRIPT65535 exception)\n var efct;\n\n try {\n efct = e.dataTransfer.effectAllowed;\n } catch (error) {}\n\n e.dataTransfer.dropEffect = \"move\" === efct || \"linkMove\" === efct ? \"move\" : \"copy\";\n noPropagation(e);\n return _this2.emit(\"dragover\", e);\n },\n dragleave: function dragleave(e) {\n return _this2.emit(\"dragleave\", e);\n },\n drop: function drop(e) {\n noPropagation(e);\n return _this2.drop(e);\n },\n dragend: function dragend(e) {\n return _this2.emit(\"dragend\", e);\n }\n } // This is disabled right now, because the browsers don't implement it properly.\n // \"paste\": (e) =>\n // noPropagation e\n // @paste e\n\n }];\n this.clickableElements.forEach(function (clickableElement) {\n return _this2.listeners.push({\n element: clickableElement,\n events: {\n click: function click(evt) {\n // Only the actual dropzone or the message element should trigger file selection\n if (clickableElement !== _this2.element || evt.target === _this2.element || Dropzone.elementInside(evt.target, _this2.element.querySelector(\".dz-message\"))) {\n _this2.hiddenFileInput.click(); // Forward the click\n\n }\n\n return true;\n }\n }\n });\n });\n this.enable();\n return this.options.init.call(this);\n } // Not fully tested yet\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.disable();\n this.removeAllFiles(true);\n\n if (this.hiddenFileInput != null ? this.hiddenFileInput.parentNode : undefined) {\n this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n this.hiddenFileInput = null;\n }\n\n delete this.element.dropzone;\n return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n }\n }, {\n key: \"updateTotalUploadProgress\",\n value: function updateTotalUploadProgress() {\n var totalUploadProgress;\n var totalBytesSent = 0;\n var totalBytes = 0;\n var activeFiles = this.getActiveFiles();\n\n if (activeFiles.length) {\n var _iterator3 = dropzone_createForOfIteratorHelper(this.getActiveFiles(), true),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var file = _step3.value;\n totalBytesSent += file.upload.bytesSent;\n totalBytes += file.upload.total;\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n totalUploadProgress = 100 * totalBytesSent / totalBytes;\n } else {\n totalUploadProgress = 100;\n }\n\n return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n } // @options.paramName can be a function taking one parameter rather than a string.\n // A parameter name for a file is obtained simply by calling this with an index number.\n\n }, {\n key: \"_getParamName\",\n value: function _getParamName(n) {\n if (typeof this.options.paramName === \"function\") {\n return this.options.paramName(n);\n } else {\n return \"\".concat(this.options.paramName).concat(this.options.uploadMultiple ? \"[\".concat(n, \"]\") : \"\");\n }\n } // If @options.renameFile is a function,\n // the function will be used to rename the file.name before appending it to the formData\n\n }, {\n key: \"_renameFile\",\n value: function _renameFile(file) {\n if (typeof this.options.renameFile !== \"function\") {\n return file.name;\n }\n\n return this.options.renameFile(file);\n } // Returns a form that can be used as fallback if the browser does not support DragnDrop\n //\n // If the dropzone is already a form, only the input field and button are returned. Otherwise a complete form element is provided.\n // This code has to pass in IE7 :(\n\n }, {\n key: \"getFallbackForm\",\n value: function getFallbackForm() {\n var existingFallback, form;\n\n if (existingFallback = this.getExistingFallback()) {\n return existingFallback;\n }\n\n var fieldsString = '
';\n\n if (this.options.dictFallbackText) {\n fieldsString += \"

\".concat(this.options.dictFallbackText, \"

\");\n }\n\n fieldsString += \"
\");\n var fields = Dropzone.createElement(fieldsString);\n\n if (this.element.tagName !== \"FORM\") {\n form = Dropzone.createElement(\"
\"));\n form.appendChild(fields);\n } else {\n // Make sure that the enctype and method attributes are set properly\n this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n this.element.setAttribute(\"method\", this.options.method);\n }\n\n return form != null ? form : fields;\n } // Returns the fallback elements if they exist already\n //\n // This code has to pass in IE7 :(\n\n }, {\n key: \"getExistingFallback\",\n value: function getExistingFallback() {\n var getFallback = function getFallback(elements) {\n var _iterator4 = dropzone_createForOfIteratorHelper(elements, true),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var el = _step4.value;\n\n if (/(^| )fallback($| )/.test(el.className)) {\n return el;\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n };\n\n for (var _i = 0, _arr = [\"div\", \"form\"]; _i < _arr.length; _i++) {\n var tagName = _arr[_i];\n var fallback;\n\n if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n return fallback;\n }\n }\n } // Activates all listeners stored in @listeners\n\n }, {\n key: \"setupEventListeners\",\n value: function setupEventListeners() {\n return this.listeners.map(function (elementListeners) {\n return function () {\n var result = [];\n\n for (var event in elementListeners.events) {\n var listener = elementListeners.events[event];\n result.push(elementListeners.element.addEventListener(event, listener, false));\n }\n\n return result;\n }();\n });\n } // Deactivates all listeners stored in @listeners\n\n }, {\n key: \"removeEventListeners\",\n value: function removeEventListeners() {\n return this.listeners.map(function (elementListeners) {\n return function () {\n var result = [];\n\n for (var event in elementListeners.events) {\n var listener = elementListeners.events[event];\n result.push(elementListeners.element.removeEventListener(event, listener, false));\n }\n\n return result;\n }();\n });\n } // Removes all event listeners and cancels all files in the queue or being processed.\n\n }, {\n key: \"disable\",\n value: function disable() {\n var _this3 = this;\n\n this.clickableElements.forEach(function (element) {\n return element.classList.remove(\"dz-clickable\");\n });\n this.removeEventListeners();\n this.disabled = true;\n return this.files.map(function (file) {\n return _this3.cancelUpload(file);\n });\n }\n }, {\n key: \"enable\",\n value: function enable() {\n delete this.disabled;\n this.clickableElements.forEach(function (element) {\n return element.classList.add(\"dz-clickable\");\n });\n return this.setupEventListeners();\n } // Returns a nicely formatted filesize\n\n }, {\n key: \"filesize\",\n value: function filesize(size) {\n var selectedSize = 0;\n var selectedUnit = \"b\";\n\n if (size > 0) {\n var units = [\"tb\", \"gb\", \"mb\", \"kb\", \"b\"];\n\n for (var i = 0; i < units.length; i++) {\n var unit = units[i];\n var cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n\n if (size >= cutoff) {\n selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n selectedUnit = unit;\n break;\n }\n }\n\n selectedSize = Math.round(10 * selectedSize) / 10; // Cutting of digits\n }\n\n return \"\".concat(selectedSize, \" \").concat(this.options.dictFileSizeUnits[selectedUnit]);\n } // Adds or removes the `dz-max-files-reached` class from the form.\n\n }, {\n key: \"_updateMaxFilesReachedClass\",\n value: function _updateMaxFilesReachedClass() {\n if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n if (this.getAcceptedFiles().length === this.options.maxFiles) {\n this.emit(\"maxfilesreached\", this.files);\n }\n\n return this.element.classList.add(\"dz-max-files-reached\");\n } else {\n return this.element.classList.remove(\"dz-max-files-reached\");\n }\n }\n }, {\n key: \"drop\",\n value: function drop(e) {\n if (!e.dataTransfer) {\n return;\n }\n\n this.emit(\"drop\", e); // Convert the FileList to an Array\n // This is necessary for IE11\n\n var files = [];\n\n for (var i = 0; i < e.dataTransfer.files.length; i++) {\n files[i] = e.dataTransfer.files[i];\n } // Even if it's a folder, files.length will contain the folders.\n\n\n if (files.length) {\n var items = e.dataTransfer.items;\n\n if (items && items.length && items[0].webkitGetAsEntry != null) {\n // The browser supports dropping of folders, so handle items instead of files\n this._addFilesFromItems(items);\n } else {\n this.handleFiles(files);\n }\n }\n\n this.emit(\"addedfiles\", files);\n }\n }, {\n key: \"paste\",\n value: function paste(e) {\n if (__guard__(e != null ? e.clipboardData : undefined, function (x) {\n return x.items;\n }) == null) {\n return;\n }\n\n this.emit(\"paste\", e);\n var items = e.clipboardData.items;\n\n if (items.length) {\n return this._addFilesFromItems(items);\n }\n }\n }, {\n key: \"handleFiles\",\n value: function handleFiles(files) {\n var _iterator5 = dropzone_createForOfIteratorHelper(files, true),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var file = _step5.value;\n this.addFile(file);\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n } // When a folder is dropped (or files are pasted), items must be handled\n // instead of files.\n\n }, {\n key: \"_addFilesFromItems\",\n value: function _addFilesFromItems(items) {\n var _this4 = this;\n\n return function () {\n var result = [];\n\n var _iterator6 = dropzone_createForOfIteratorHelper(items, true),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var item = _step6.value;\n var entry;\n\n if (item.webkitGetAsEntry != null && (entry = item.webkitGetAsEntry())) {\n if (entry.isFile) {\n result.push(_this4.addFile(item.getAsFile()));\n } else if (entry.isDirectory) {\n // Append all files from that directory to files\n result.push(_this4._addFilesFromDirectory(entry, entry.name));\n } else {\n result.push(undefined);\n }\n } else if (item.getAsFile != null) {\n if (item.kind == null || item.kind === \"file\") {\n result.push(_this4.addFile(item.getAsFile()));\n } else {\n result.push(undefined);\n }\n } else {\n result.push(undefined);\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n return result;\n }();\n } // Goes through the directory, and adds each file it finds recursively\n\n }, {\n key: \"_addFilesFromDirectory\",\n value: function _addFilesFromDirectory(directory, path) {\n var _this5 = this;\n\n var dirReader = directory.createReader();\n\n var errorHandler = function errorHandler(error) {\n return __guardMethod__(console, \"log\", function (o) {\n return o.log(error);\n });\n };\n\n var readEntries = function readEntries() {\n return dirReader.readEntries(function (entries) {\n if (entries.length > 0) {\n var _iterator7 = dropzone_createForOfIteratorHelper(entries, true),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var entry = _step7.value;\n\n if (entry.isFile) {\n entry.file(function (file) {\n if (_this5.options.ignoreHiddenFiles && file.name.substring(0, 1) === \".\") {\n return;\n }\n\n file.fullPath = \"\".concat(path, \"/\").concat(file.name);\n return _this5.addFile(file);\n });\n } else if (entry.isDirectory) {\n _this5._addFilesFromDirectory(entry, \"\".concat(path, \"/\").concat(entry.name));\n }\n } // Recursively call readEntries() again, since browser only handle\n // the first 100 entries.\n // See: https://developer.mozilla.org/en-US/docs/Web/API/DirectoryReader#readEntries\n\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n\n readEntries();\n }\n\n return null;\n }, errorHandler);\n };\n\n return readEntries();\n } // If `done()` is called without argument the file is accepted\n // If you call it with an error message, the file is rejected\n // (This allows for asynchronous validation)\n //\n // This function checks the filesize, and if the file.type passes the\n // `acceptedFiles` check.\n\n }, {\n key: \"accept\",\n value: function accept(file, done) {\n if (this.options.maxFilesize && file.size > this.options.maxFilesize * 1024 * 1024) {\n done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n done(this.options.dictInvalidFileType);\n } else if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n this.emit(\"maxfilesexceeded\", file);\n } else {\n this.options.accept.call(this, file, done);\n }\n }\n }, {\n key: \"addFile\",\n value: function addFile(file) {\n var _this6 = this;\n\n file.upload = {\n uuid: Dropzone.uuidv4(),\n progress: 0,\n // Setting the total upload size to file.size for the beginning\n // It's actual different than the size to be transmitted.\n total: file.size,\n bytesSent: 0,\n filename: this._renameFile(file) // Not setting chunking information here, because the acutal data — and\n // thus the chunks — might change if `options.transformFile` is set\n // and does something to the data.\n\n };\n this.files.push(file);\n file.status = Dropzone.ADDED;\n this.emit(\"addedfile\", file);\n\n this._enqueueThumbnail(file);\n\n this.accept(file, function (error) {\n if (error) {\n file.accepted = false;\n\n _this6._errorProcessing([file], error); // Will set the file.status\n\n } else {\n file.accepted = true;\n\n if (_this6.options.autoQueue) {\n _this6.enqueueFile(file);\n } // Will set .accepted = true\n\n }\n\n _this6._updateMaxFilesReachedClass();\n });\n } // Wrapper for enqueueFile\n\n }, {\n key: \"enqueueFiles\",\n value: function enqueueFiles(files) {\n var _iterator8 = dropzone_createForOfIteratorHelper(files, true),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var file = _step8.value;\n this.enqueueFile(file);\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n return null;\n }\n }, {\n key: \"enqueueFile\",\n value: function enqueueFile(file) {\n var _this7 = this;\n\n if (file.status === Dropzone.ADDED && file.accepted === true) {\n file.status = Dropzone.QUEUED;\n\n if (this.options.autoProcessQueue) {\n return setTimeout(function () {\n return _this7.processQueue();\n }, 0); // Deferring the call\n }\n } else {\n throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n }\n }\n }, {\n key: \"_enqueueThumbnail\",\n value: function _enqueueThumbnail(file) {\n var _this8 = this;\n\n if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n this._thumbnailQueue.push(file);\n\n return setTimeout(function () {\n return _this8._processThumbnailQueue();\n }, 0); // Deferring the call\n }\n }\n }, {\n key: \"_processThumbnailQueue\",\n value: function _processThumbnailQueue() {\n var _this9 = this;\n\n if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n return;\n }\n\n this._processingThumbnail = true;\n\n var file = this._thumbnailQueue.shift();\n\n return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, function (dataUrl) {\n _this9.emit(\"thumbnail\", file, dataUrl);\n\n _this9._processingThumbnail = false;\n return _this9._processThumbnailQueue();\n });\n } // Can be called by the user to remove a file\n\n }, {\n key: \"removeFile\",\n value: function removeFile(file) {\n if (file.status === Dropzone.UPLOADING) {\n this.cancelUpload(file);\n }\n\n this.files = without(this.files, file);\n this.emit(\"removedfile\", file);\n\n if (this.files.length === 0) {\n return this.emit(\"reset\");\n }\n } // Removes all files that aren't currently processed from the list\n\n }, {\n key: \"removeAllFiles\",\n value: function removeAllFiles(cancelIfNecessary) {\n // Create a copy of files since removeFile() changes the @files array.\n if (cancelIfNecessary == null) {\n cancelIfNecessary = false;\n }\n\n var _iterator9 = dropzone_createForOfIteratorHelper(this.files.slice(), true),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var file = _step9.value;\n\n if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n this.removeFile(file);\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n return null;\n } // Resizes an image before it gets sent to the server. This function is the default behavior of\n // `options.transformFile` if `resizeWidth` or `resizeHeight` are set. The callback is invoked with\n // the resized blob.\n\n }, {\n key: \"resizeImage\",\n value: function resizeImage(file, width, height, resizeMethod, callback) {\n var _this10 = this;\n\n return this.createThumbnail(file, width, height, resizeMethod, true, function (dataUrl, canvas) {\n if (canvas == null) {\n // The image has not been resized\n return callback(file);\n } else {\n var resizeMimeType = _this10.options.resizeMimeType;\n\n if (resizeMimeType == null) {\n resizeMimeType = file.type;\n }\n\n var resizedDataURL = canvas.toDataURL(resizeMimeType, _this10.options.resizeQuality);\n\n if (resizeMimeType === \"image/jpeg\" || resizeMimeType === \"image/jpg\") {\n // Now add the original EXIF information\n resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);\n }\n\n return callback(Dropzone.dataURItoBlob(resizedDataURL));\n }\n });\n }\n }, {\n key: \"createThumbnail\",\n value: function createThumbnail(file, width, height, resizeMethod, fixOrientation, callback) {\n var _this11 = this;\n\n var fileReader = new FileReader();\n\n fileReader.onload = function () {\n file.dataURL = fileReader.result; // Don't bother creating a thumbnail for SVG images since they're vector\n\n if (file.type === \"image/svg+xml\") {\n if (callback != null) {\n callback(fileReader.result);\n }\n\n return;\n }\n\n _this11.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback);\n };\n\n fileReader.readAsDataURL(file);\n } // `mockFile` needs to have these attributes:\n //\n // { name: 'name', size: 12345, imageUrl: '' }\n //\n // `callback` will be invoked when the image has been downloaded and displayed.\n // `crossOrigin` will be added to the `img` tag when accessing the file.\n\n }, {\n key: \"displayExistingFile\",\n value: function displayExistingFile(mockFile, imageUrl, callback, crossOrigin) {\n var _this12 = this;\n\n var resizeThumbnail = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n this.emit(\"addedfile\", mockFile);\n this.emit(\"complete\", mockFile);\n\n if (!resizeThumbnail) {\n this.emit(\"thumbnail\", mockFile, imageUrl);\n if (callback) callback();\n } else {\n var onDone = function onDone(thumbnail) {\n _this12.emit(\"thumbnail\", mockFile, thumbnail);\n\n if (callback) callback();\n };\n\n mockFile.dataURL = imageUrl;\n this.createThumbnailFromUrl(mockFile, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, this.options.fixOrientation, onDone, crossOrigin);\n }\n }\n }, {\n key: \"createThumbnailFromUrl\",\n value: function createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {\n var _this13 = this;\n\n // Not using `new Image` here because of a bug in latest Chrome versions.\n // See https://github.com/enyo/dropzone/pull/226\n var img = document.createElement(\"img\");\n\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n } // fixOrientation is not needed anymore with browsers handling imageOrientation\n\n\n fixOrientation = getComputedStyle(document.body)[\"imageOrientation\"] == \"from-image\" ? false : fixOrientation;\n\n img.onload = function () {\n var loadExif = function loadExif(callback) {\n return callback(1);\n };\n\n if (typeof EXIF !== \"undefined\" && EXIF !== null && fixOrientation) {\n loadExif = function loadExif(callback) {\n return EXIF.getData(img, function () {\n return callback(EXIF.getTag(this, \"Orientation\"));\n });\n };\n }\n\n return loadExif(function (orientation) {\n file.width = img.width;\n file.height = img.height;\n\n var resizeInfo = _this13.options.resize.call(_this13, file, width, height, resizeMethod);\n\n var canvas = document.createElement(\"canvas\");\n var ctx = canvas.getContext(\"2d\");\n canvas.width = resizeInfo.trgWidth;\n canvas.height = resizeInfo.trgHeight;\n\n if (orientation > 4) {\n canvas.width = resizeInfo.trgHeight;\n canvas.height = resizeInfo.trgWidth;\n }\n\n switch (orientation) {\n case 2:\n // horizontal flip\n ctx.translate(canvas.width, 0);\n ctx.scale(-1, 1);\n break;\n\n case 3:\n // 180° rotate left\n ctx.translate(canvas.width, canvas.height);\n ctx.rotate(Math.PI);\n break;\n\n case 4:\n // vertical flip\n ctx.translate(0, canvas.height);\n ctx.scale(1, -1);\n break;\n\n case 5:\n // vertical flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI);\n ctx.scale(1, -1);\n break;\n\n case 6:\n // 90° rotate right\n ctx.rotate(0.5 * Math.PI);\n ctx.translate(0, -canvas.width);\n break;\n\n case 7:\n // horizontal flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI);\n ctx.translate(canvas.height, -canvas.width);\n ctx.scale(-1, 1);\n break;\n\n case 8:\n // 90° rotate left\n ctx.rotate(-0.5 * Math.PI);\n ctx.translate(-canvas.height, 0);\n break;\n } // This is a bugfix for iOS' scaling bug.\n\n\n drawImageIOSFix(ctx, img, resizeInfo.srcX != null ? resizeInfo.srcX : 0, resizeInfo.srcY != null ? resizeInfo.srcY : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, resizeInfo.trgX != null ? resizeInfo.trgX : 0, resizeInfo.trgY != null ? resizeInfo.trgY : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n var thumbnail = canvas.toDataURL(\"image/png\");\n\n if (callback != null) {\n return callback(thumbnail, canvas);\n }\n });\n };\n\n if (callback != null) {\n img.onerror = callback;\n }\n\n return img.src = file.dataURL;\n } // Goes through the queue and processes files if there aren't too many already.\n\n }, {\n key: \"processQueue\",\n value: function processQueue() {\n var parallelUploads = this.options.parallelUploads;\n var processingLength = this.getUploadingFiles().length;\n var i = processingLength; // There are already at least as many files uploading than should be\n\n if (processingLength >= parallelUploads) {\n return;\n }\n\n var queuedFiles = this.getQueuedFiles();\n\n if (!(queuedFiles.length > 0)) {\n return;\n }\n\n if (this.options.uploadMultiple) {\n // The files should be uploaded in one request\n return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n } else {\n while (i < parallelUploads) {\n if (!queuedFiles.length) {\n return;\n } // Nothing left to process\n\n\n this.processFile(queuedFiles.shift());\n i++;\n }\n }\n } // Wrapper for `processFiles`\n\n }, {\n key: \"processFile\",\n value: function processFile(file) {\n return this.processFiles([file]);\n } // Loads the file, then calls finishedLoading()\n\n }, {\n key: \"processFiles\",\n value: function processFiles(files) {\n var _iterator10 = dropzone_createForOfIteratorHelper(files, true),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var file = _step10.value;\n file.processing = true; // Backwards compatibility\n\n file.status = Dropzone.UPLOADING;\n this.emit(\"processing\", file);\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n if (this.options.uploadMultiple) {\n this.emit(\"processingmultiple\", files);\n }\n\n return this.uploadFiles(files);\n }\n }, {\n key: \"_getFilesWithXhr\",\n value: function _getFilesWithXhr(xhr) {\n var files;\n return files = this.files.filter(function (file) {\n return file.xhr === xhr;\n }).map(function (file) {\n return file;\n });\n } // Cancels the file upload and sets the status to CANCELED\n // **if** the file is actually being uploaded.\n // If it's still in the queue, the file is being removed from it and the status\n // set to CANCELED.\n\n }, {\n key: \"cancelUpload\",\n value: function cancelUpload(file) {\n if (file.status === Dropzone.UPLOADING) {\n var groupedFiles = this._getFilesWithXhr(file.xhr);\n\n var _iterator11 = dropzone_createForOfIteratorHelper(groupedFiles, true),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var groupedFile = _step11.value;\n groupedFile.status = Dropzone.CANCELED;\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n\n if (typeof file.xhr !== \"undefined\") {\n file.xhr.abort();\n }\n\n var _iterator12 = dropzone_createForOfIteratorHelper(groupedFiles, true),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var _groupedFile = _step12.value;\n this.emit(\"canceled\", _groupedFile);\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n if (this.options.uploadMultiple) {\n this.emit(\"canceledmultiple\", groupedFiles);\n }\n } else if (file.status === Dropzone.ADDED || file.status === Dropzone.QUEUED) {\n file.status = Dropzone.CANCELED;\n this.emit(\"canceled\", file);\n\n if (this.options.uploadMultiple) {\n this.emit(\"canceledmultiple\", [file]);\n }\n }\n\n if (this.options.autoProcessQueue) {\n return this.processQueue();\n }\n }\n }, {\n key: \"resolveOption\",\n value: function resolveOption(option) {\n if (typeof option === \"function\") {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return option.apply(this, args);\n }\n\n return option;\n }\n }, {\n key: \"uploadFile\",\n value: function uploadFile(file) {\n return this.uploadFiles([file]);\n }\n }, {\n key: \"uploadFiles\",\n value: function uploadFiles(files) {\n var _this14 = this;\n\n this._transformFiles(files, function (transformedFiles) {\n if (_this14.options.chunking) {\n // Chunking is not allowed to be used with `uploadMultiple` so we know\n // that there is only __one__file.\n var transformedFile = transformedFiles[0];\n files[0].upload.chunked = _this14.options.chunking && (_this14.options.forceChunking || transformedFile.size > _this14.options.chunkSize);\n files[0].upload.totalChunkCount = Math.ceil(transformedFile.size / _this14.options.chunkSize);\n }\n\n if (files[0].upload.chunked) {\n // This file should be sent in chunks!\n // If the chunking option is set, we **know** that there can only be **one** file, since\n // uploadMultiple is not allowed with this option.\n var file = files[0];\n var _transformedFile = transformedFiles[0];\n var startedChunkCount = 0;\n file.upload.chunks = [];\n\n var handleNextChunk = function handleNextChunk() {\n var chunkIndex = 0; // Find the next item in file.upload.chunks that is not defined yet.\n\n while (file.upload.chunks[chunkIndex] !== undefined) {\n chunkIndex++;\n } // This means, that all chunks have already been started.\n\n\n if (chunkIndex >= file.upload.totalChunkCount) return;\n startedChunkCount++;\n var start = chunkIndex * _this14.options.chunkSize;\n var end = Math.min(start + _this14.options.chunkSize, _transformedFile.size);\n var dataBlock = {\n name: _this14._getParamName(0),\n data: _transformedFile.webkitSlice ? _transformedFile.webkitSlice(start, end) : _transformedFile.slice(start, end),\n filename: file.upload.filename,\n chunkIndex: chunkIndex\n };\n file.upload.chunks[chunkIndex] = {\n file: file,\n index: chunkIndex,\n dataBlock: dataBlock,\n // In case we want to retry.\n status: Dropzone.UPLOADING,\n progress: 0,\n retries: 0 // The number of times this block has been retried.\n\n };\n\n _this14._uploadData(files, [dataBlock]);\n };\n\n file.upload.finishedChunkUpload = function (chunk, response) {\n var allFinished = true;\n chunk.status = Dropzone.SUCCESS; // Clear the data from the chunk\n\n chunk.dataBlock = null; // Leaving this reference to xhr intact here will cause memory leaks in some browsers\n\n chunk.xhr = null;\n\n for (var i = 0; i < file.upload.totalChunkCount; i++) {\n if (file.upload.chunks[i] === undefined) {\n return handleNextChunk();\n }\n\n if (file.upload.chunks[i].status !== Dropzone.SUCCESS) {\n allFinished = false;\n }\n }\n\n if (allFinished) {\n _this14.options.chunksUploaded(file, function () {\n _this14._finished(files, response, null);\n });\n }\n };\n\n if (_this14.options.parallelChunkUploads) {\n for (var i = 0; i < file.upload.totalChunkCount; i++) {\n handleNextChunk();\n }\n } else {\n handleNextChunk();\n }\n } else {\n var dataBlocks = [];\n\n for (var _i2 = 0; _i2 < files.length; _i2++) {\n dataBlocks[_i2] = {\n name: _this14._getParamName(_i2),\n data: transformedFiles[_i2],\n filename: files[_i2].upload.filename\n };\n }\n\n _this14._uploadData(files, dataBlocks);\n }\n });\n } /// Returns the right chunk for given file and xhr\n\n }, {\n key: \"_getChunk\",\n value: function _getChunk(file, xhr) {\n for (var i = 0; i < file.upload.totalChunkCount; i++) {\n if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].xhr === xhr) {\n return file.upload.chunks[i];\n }\n }\n } // This function actually uploads the file(s) to the server.\n // If dataBlocks contains the actual data to upload (meaning, that this could either be transformed\n // files, or individual chunks for chunked upload).\n\n }, {\n key: \"_uploadData\",\n value: function _uploadData(files, dataBlocks) {\n var _this15 = this;\n\n var xhr = new XMLHttpRequest(); // Put the xhr object in the file objects to be able to reference it later.\n\n var _iterator13 = dropzone_createForOfIteratorHelper(files, true),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var file = _step13.value;\n file.xhr = xhr;\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n\n if (files[0].upload.chunked) {\n // Put the xhr object in the right chunk object, so it can be associated later, and found with _getChunk\n files[0].upload.chunks[dataBlocks[0].chunkIndex].xhr = xhr;\n }\n\n var method = this.resolveOption(this.options.method, files);\n var url = this.resolveOption(this.options.url, files);\n xhr.open(method, url, true); // Setting the timeout after open because of IE11 issue: https://gitlab.com/meno/dropzone/issues/8\n\n var timeout = this.resolveOption(this.options.timeout, files);\n if (timeout) xhr.timeout = this.resolveOption(this.options.timeout, files); // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n\n xhr.withCredentials = !!this.options.withCredentials;\n\n xhr.onload = function (e) {\n _this15._finishedUploading(files, xhr, e);\n };\n\n xhr.ontimeout = function () {\n _this15._handleUploadError(files, xhr, \"Request timedout after \".concat(_this15.options.timeout / 1000, \" seconds\"));\n };\n\n xhr.onerror = function () {\n _this15._handleUploadError(files, xhr);\n }; // Some browsers do not have the .upload property\n\n\n var progressObj = xhr.upload != null ? xhr.upload : xhr;\n\n progressObj.onprogress = function (e) {\n return _this15._updateFilesUploadProgress(files, xhr, e);\n };\n\n var headers = {\n Accept: \"application/json\",\n \"Cache-Control\": \"no-cache\",\n \"X-Requested-With\": \"XMLHttpRequest\"\n };\n\n if (this.options.headers) {\n Dropzone.extend(headers, this.options.headers);\n }\n\n for (var headerName in headers) {\n var headerValue = headers[headerName];\n\n if (headerValue) {\n xhr.setRequestHeader(headerName, headerValue);\n }\n }\n\n var formData = new FormData(); // Adding all @options parameters\n\n if (this.options.params) {\n var additionalParams = this.options.params;\n\n if (typeof additionalParams === \"function\") {\n additionalParams = additionalParams.call(this, files, xhr, files[0].upload.chunked ? this._getChunk(files[0], xhr) : null);\n }\n\n for (var key in additionalParams) {\n var value = additionalParams[key];\n\n if (Array.isArray(value)) {\n // The additional parameter contains an array,\n // so lets iterate over it to attach each value\n // individually.\n for (var i = 0; i < value.length; i++) {\n formData.append(key, value[i]);\n }\n } else {\n formData.append(key, value);\n }\n }\n } // Let the user add additional data if necessary\n\n\n var _iterator14 = dropzone_createForOfIteratorHelper(files, true),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var _file = _step14.value;\n this.emit(\"sending\", _file, xhr, formData);\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n\n if (this.options.uploadMultiple) {\n this.emit(\"sendingmultiple\", files, xhr, formData);\n }\n\n this._addFormElementData(formData); // Finally add the files\n // Has to be last because some servers (eg: S3) expect the file to be the last parameter\n\n\n for (var _i3 = 0; _i3 < dataBlocks.length; _i3++) {\n var dataBlock = dataBlocks[_i3];\n formData.append(dataBlock.name, dataBlock.data, dataBlock.filename);\n }\n\n this.submitRequest(xhr, formData, files);\n } // Transforms all files with this.options.transformFile and invokes done with the transformed files when done.\n\n }, {\n key: \"_transformFiles\",\n value: function _transformFiles(files, done) {\n var _this16 = this;\n\n var transformedFiles = []; // Clumsy way of handling asynchronous calls, until I get to add a proper Future library.\n\n var doneCounter = 0;\n\n var _loop = function _loop(i) {\n _this16.options.transformFile.call(_this16, files[i], function (transformedFile) {\n transformedFiles[i] = transformedFile;\n\n if (++doneCounter === files.length) {\n done(transformedFiles);\n }\n });\n };\n\n for (var i = 0; i < files.length; i++) {\n _loop(i);\n }\n } // Takes care of adding other input elements of the form to the AJAX request\n\n }, {\n key: \"_addFormElementData\",\n value: function _addFormElementData(formData) {\n // Take care of other input elements\n if (this.element.tagName === \"FORM\") {\n var _iterator15 = dropzone_createForOfIteratorHelper(this.element.querySelectorAll(\"input, textarea, select, button\"), true),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var input = _step15.value;\n var inputName = input.getAttribute(\"name\");\n var inputType = input.getAttribute(\"type\");\n if (inputType) inputType = inputType.toLowerCase(); // If the input doesn't have a name, we can't use it.\n\n if (typeof inputName === \"undefined\" || inputName === null) continue;\n\n if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n // Possibly multiple values\n var _iterator16 = dropzone_createForOfIteratorHelper(input.options, true),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var option = _step16.value;\n\n if (option.selected) {\n formData.append(inputName, option.value);\n }\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n } else if (!inputType || inputType !== \"checkbox\" && inputType !== \"radio\" || input.checked) {\n formData.append(inputName, input.value);\n }\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n }\n } // Invoked when there is new progress information about given files.\n // If e is not provided, it is assumed that the upload is finished.\n\n }, {\n key: \"_updateFilesUploadProgress\",\n value: function _updateFilesUploadProgress(files, xhr, e) {\n if (!files[0].upload.chunked) {\n // Handle file uploads without chunking\n var _iterator17 = dropzone_createForOfIteratorHelper(files, true),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var file = _step17.value;\n\n if (file.upload.total && file.upload.bytesSent && file.upload.bytesSent == file.upload.total) {\n // If both, the `total` and `bytesSent` have already been set, and\n // they are equal (meaning progress is at 100%), we can skip this\n // file, since an upload progress shouldn't go down.\n continue;\n }\n\n if (e) {\n file.upload.progress = 100 * e.loaded / e.total;\n file.upload.total = e.total;\n file.upload.bytesSent = e.loaded;\n } else {\n // No event, so we're at 100%\n file.upload.progress = 100;\n file.upload.bytesSent = file.upload.total;\n }\n\n this.emit(\"uploadprogress\", file, file.upload.progress, file.upload.bytesSent);\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n } else {\n // Handle chunked file uploads\n // Chunked upload is not compatible with uploading multiple files in one\n // request, so we know there's only one file.\n var _file2 = files[0]; // Since this is a chunked upload, we need to update the appropriate chunk\n // progress.\n\n var chunk = this._getChunk(_file2, xhr);\n\n if (e) {\n chunk.progress = 100 * e.loaded / e.total;\n chunk.total = e.total;\n chunk.bytesSent = e.loaded;\n } else {\n // No event, so we're at 100%\n chunk.progress = 100;\n chunk.bytesSent = chunk.total;\n } // Now tally the *file* upload progress from its individual chunks\n\n\n _file2.upload.progress = 0;\n _file2.upload.total = 0;\n _file2.upload.bytesSent = 0;\n\n for (var i = 0; i < _file2.upload.totalChunkCount; i++) {\n if (_file2.upload.chunks[i] && typeof _file2.upload.chunks[i].progress !== \"undefined\") {\n _file2.upload.progress += _file2.upload.chunks[i].progress;\n _file2.upload.total += _file2.upload.chunks[i].total;\n _file2.upload.bytesSent += _file2.upload.chunks[i].bytesSent;\n }\n } // Since the process is a percentage, we need to divide by the amount of\n // chunks we've used.\n\n\n _file2.upload.progress = _file2.upload.progress / _file2.upload.totalChunkCount;\n this.emit(\"uploadprogress\", _file2, _file2.upload.progress, _file2.upload.bytesSent);\n }\n }\n }, {\n key: \"_finishedUploading\",\n value: function _finishedUploading(files, xhr, e) {\n var response;\n\n if (files[0].status === Dropzone.CANCELED) {\n return;\n }\n\n if (xhr.readyState !== 4) {\n return;\n }\n\n if (xhr.responseType !== \"arraybuffer\" && xhr.responseType !== \"blob\") {\n response = xhr.responseText;\n\n if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n try {\n response = JSON.parse(response);\n } catch (error) {\n e = error;\n response = \"Invalid JSON response from server.\";\n }\n }\n }\n\n this._updateFilesUploadProgress(files, xhr);\n\n if (!(200 <= xhr.status && xhr.status < 300)) {\n this._handleUploadError(files, xhr, response);\n } else {\n if (files[0].upload.chunked) {\n files[0].upload.finishedChunkUpload(this._getChunk(files[0], xhr), response);\n } else {\n this._finished(files, response, e);\n }\n }\n }\n }, {\n key: \"_handleUploadError\",\n value: function _handleUploadError(files, xhr, response) {\n if (files[0].status === Dropzone.CANCELED) {\n return;\n }\n\n if (files[0].upload.chunked && this.options.retryChunks) {\n var chunk = this._getChunk(files[0], xhr);\n\n if (chunk.retries++ < this.options.retryChunksLimit) {\n this._uploadData(files, [chunk.dataBlock]);\n\n return;\n } else {\n console.warn(\"Retried this chunk too often. Giving up.\");\n }\n }\n\n this._errorProcessing(files, response || this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr);\n }\n }, {\n key: \"submitRequest\",\n value: function submitRequest(xhr, formData, files) {\n if (xhr.readyState != 1) {\n console.warn(\"Cannot send this request because the XMLHttpRequest.readyState is not OPENED.\");\n return;\n }\n\n xhr.send(formData);\n } // Called internally when processing is finished.\n // Individual callbacks have to be called in the appropriate sections.\n\n }, {\n key: \"_finished\",\n value: function _finished(files, responseText, e) {\n var _iterator18 = dropzone_createForOfIteratorHelper(files, true),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var file = _step18.value;\n file.status = Dropzone.SUCCESS;\n this.emit(\"success\", file, responseText, e);\n this.emit(\"complete\", file);\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n\n if (this.options.uploadMultiple) {\n this.emit(\"successmultiple\", files, responseText, e);\n this.emit(\"completemultiple\", files);\n }\n\n if (this.options.autoProcessQueue) {\n return this.processQueue();\n }\n } // Called internally when processing is finished.\n // Individual callbacks have to be called in the appropriate sections.\n\n }, {\n key: \"_errorProcessing\",\n value: function _errorProcessing(files, message, xhr) {\n var _iterator19 = dropzone_createForOfIteratorHelper(files, true),\n _step19;\n\n try {\n for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n var file = _step19.value;\n file.status = Dropzone.ERROR;\n this.emit(\"error\", file, message, xhr);\n this.emit(\"complete\", file);\n }\n } catch (err) {\n _iterator19.e(err);\n } finally {\n _iterator19.f();\n }\n\n if (this.options.uploadMultiple) {\n this.emit(\"errormultiple\", files, message, xhr);\n this.emit(\"completemultiple\", files);\n }\n\n if (this.options.autoProcessQueue) {\n return this.processQueue();\n }\n }\n }], [{\n key: \"initClass\",\n value: function initClass() {\n // Exposing the emitter class, mainly for tests\n this.prototype.Emitter = Emitter;\n /*\n This is a list of all available events you can register on a dropzone object.\n You can register an event handler like this:\n dropzone.on(\"dragEnter\", function() { });\n */\n\n this.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"addedfiles\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\n this.prototype._thumbnailQueue = [];\n this.prototype._processingThumbnail = false;\n } // global utility\n\n }, {\n key: \"extend\",\n value: function extend(target) {\n for (var _len2 = arguments.length, objects = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n objects[_key2 - 1] = arguments[_key2];\n }\n\n for (var _i4 = 0, _objects = objects; _i4 < _objects.length; _i4++) {\n var object = _objects[_i4];\n\n for (var key in object) {\n var val = object[key];\n target[key] = val;\n }\n }\n\n return target;\n }\n }, {\n key: \"uuidv4\",\n value: function uuidv4() {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0,\n v = c === \"x\" ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n }\n }]);\n\n return Dropzone;\n}(Emitter);\n\n\nDropzone.initClass();\nDropzone.version = \"5.9.3\"; // This is a map of options for your different dropzones. Add configurations\n// to this object for your different dropzone elemens.\n//\n// Example:\n//\n// Dropzone.options.myDropzoneElementId = { maxFilesize: 1 };\n//\n// To disable autoDiscover for a specific element, you can set `false` as an option:\n//\n// Dropzone.options.myDisabledElementId = false;\n//\n// And in html:\n//\n//
\n\nDropzone.options = {}; // Returns the options for an element or undefined if none available.\n\nDropzone.optionsForElement = function (element) {\n // Get the `Dropzone.options.elementId` for this element if it exists\n if (element.getAttribute(\"id\")) {\n return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n } else {\n return undefined;\n }\n}; // Holds a list of all dropzone instances\n\n\nDropzone.instances = []; // Returns the dropzone for given element if any\n\nDropzone.forElement = function (element) {\n if (typeof element === \"string\") {\n element = document.querySelector(element);\n }\n\n if ((element != null ? element.dropzone : undefined) == null) {\n throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n }\n\n return element.dropzone;\n}; // Set to false if you don't want Dropzone to automatically find and attach to .dropzone elements.\n\n\nDropzone.autoDiscover = true; // Looks for all .dropzone elements and creates a dropzone for them\n\nDropzone.discover = function () {\n var dropzones;\n\n if (document.querySelectorAll) {\n dropzones = document.querySelectorAll(\".dropzone\");\n } else {\n dropzones = []; // IE :(\n\n var checkElements = function checkElements(elements) {\n return function () {\n var result = [];\n\n var _iterator20 = dropzone_createForOfIteratorHelper(elements, true),\n _step20;\n\n try {\n for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n var el = _step20.value;\n\n if (/(^| )dropzone($| )/.test(el.className)) {\n result.push(dropzones.push(el));\n } else {\n result.push(undefined);\n }\n }\n } catch (err) {\n _iterator20.e(err);\n } finally {\n _iterator20.f();\n }\n\n return result;\n }();\n };\n\n checkElements(document.getElementsByTagName(\"div\"));\n checkElements(document.getElementsByTagName(\"form\"));\n }\n\n return function () {\n var result = [];\n\n var _iterator21 = dropzone_createForOfIteratorHelper(dropzones, true),\n _step21;\n\n try {\n for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n var dropzone = _step21.value;\n\n // Create a dropzone unless auto discover has been disabled for specific element\n if (Dropzone.optionsForElement(dropzone) !== false) {\n result.push(new Dropzone(dropzone));\n } else {\n result.push(undefined);\n }\n }\n } catch (err) {\n _iterator21.e(err);\n } finally {\n _iterator21.f();\n }\n\n return result;\n }();\n}; // Some browsers support drag and drog functionality, but not correctly.\n//\n// So I created a blocklist of userAgents. Yes, yes. Browser sniffing, I know.\n// But what to do when browsers *theoretically* support an API, but crash\n// when using it.\n//\n// This is a list of regular expressions tested against navigator.userAgent\n//\n// ** It should only be used on browser that *do* support the API, but\n// incorrectly **\n\n\nDropzone.blockedBrowsers = [// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API.\n/opera.*(Macintosh|Windows Phone).*version\\/12/i]; // Checks if the browser is supported\n\nDropzone.isBrowserSupported = function () {\n var capableBrowser = true;\n\n if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n if (!(\"classList\" in document.createElement(\"a\"))) {\n capableBrowser = false;\n } else {\n if (Dropzone.blacklistedBrowsers !== undefined) {\n // Since this has been renamed, this makes sure we don't break older\n // configuration.\n Dropzone.blockedBrowsers = Dropzone.blacklistedBrowsers;\n } // The browser supports the API, but may be blocked.\n\n\n var _iterator22 = dropzone_createForOfIteratorHelper(Dropzone.blockedBrowsers, true),\n _step22;\n\n try {\n for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n var regex = _step22.value;\n\n if (regex.test(navigator.userAgent)) {\n capableBrowser = false;\n continue;\n }\n }\n } catch (err) {\n _iterator22.e(err);\n } finally {\n _iterator22.f();\n }\n }\n } else {\n capableBrowser = false;\n }\n\n return capableBrowser;\n};\n\nDropzone.dataURItoBlob = function (dataURI) {\n // convert base64 to raw binary data held in a string\n // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n var byteString = atob(dataURI.split(\",\")[1]); // separate out the mime component\n\n var mimeString = dataURI.split(\",\")[0].split(\":\")[1].split(\";\")[0]; // write the bytes of the string to an ArrayBuffer\n\n var ab = new ArrayBuffer(byteString.length);\n var ia = new Uint8Array(ab);\n\n for (var i = 0, end = byteString.length, asc = 0 <= end; asc ? i <= end : i >= end; asc ? i++ : i--) {\n ia[i] = byteString.charCodeAt(i);\n } // write the ArrayBuffer to a blob\n\n\n return new Blob([ab], {\n type: mimeString\n });\n}; // Returns an array without the rejected item\n\n\nvar without = function without(list, rejectedItem) {\n return list.filter(function (item) {\n return item !== rejectedItem;\n }).map(function (item) {\n return item;\n });\n}; // abc-def_ghi -> abcDefGhi\n\n\nvar camelize = function camelize(str) {\n return str.replace(/[\\-_](\\w)/g, function (match) {\n return match.charAt(1).toUpperCase();\n });\n}; // Creates an element from string\n\n\nDropzone.createElement = function (string) {\n var div = document.createElement(\"div\");\n div.innerHTML = string;\n return div.childNodes[0];\n}; // Tests if given element is inside (or simply is) the container\n\n\nDropzone.elementInside = function (element, container) {\n if (element === container) {\n return true;\n } // Coffeescript doesn't support do/while loops\n\n\n while (element = element.parentNode) {\n if (element === container) {\n return true;\n }\n }\n\n return false;\n};\n\nDropzone.getElement = function (el, name) {\n var element;\n\n if (typeof el === \"string\") {\n element = document.querySelector(el);\n } else if (el.nodeType != null) {\n element = el;\n }\n\n if (element == null) {\n throw new Error(\"Invalid `\".concat(name, \"` option provided. Please provide a CSS selector or a plain HTML element.\"));\n }\n\n return element;\n};\n\nDropzone.getElements = function (els, name) {\n var el, elements;\n\n if (els instanceof Array) {\n elements = [];\n\n try {\n var _iterator23 = dropzone_createForOfIteratorHelper(els, true),\n _step23;\n\n try {\n for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n el = _step23.value;\n elements.push(this.getElement(el, name));\n }\n } catch (err) {\n _iterator23.e(err);\n } finally {\n _iterator23.f();\n }\n } catch (e) {\n elements = null;\n }\n } else if (typeof els === \"string\") {\n elements = [];\n\n var _iterator24 = dropzone_createForOfIteratorHelper(document.querySelectorAll(els), true),\n _step24;\n\n try {\n for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n el = _step24.value;\n elements.push(el);\n }\n } catch (err) {\n _iterator24.e(err);\n } finally {\n _iterator24.f();\n }\n } else if (els.nodeType != null) {\n elements = [els];\n }\n\n if (elements == null || !elements.length) {\n throw new Error(\"Invalid `\".concat(name, \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\"));\n }\n\n return elements;\n}; // Asks the user the question and calls accepted or rejected accordingly\n//\n// The default implementation just uses `window.confirm` and then calls the\n// appropriate callback.\n\n\nDropzone.confirm = function (question, accepted, rejected) {\n if (window.confirm(question)) {\n return accepted();\n } else if (rejected != null) {\n return rejected();\n }\n}; // Validates the mime type like this:\n//\n// https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept\n\n\nDropzone.isValidFile = function (file, acceptedFiles) {\n if (!acceptedFiles) {\n return true;\n } // If there are no accepted mime types, it's OK\n\n\n acceptedFiles = acceptedFiles.split(\",\");\n var mimeType = file.type;\n var baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n\n var _iterator25 = dropzone_createForOfIteratorHelper(acceptedFiles, true),\n _step25;\n\n try {\n for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n var validType = _step25.value;\n validType = validType.trim();\n\n if (validType.charAt(0) === \".\") {\n if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n return true;\n }\n } else if (/\\/\\*$/.test(validType)) {\n // This is something like a image/* mime type\n if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n return true;\n }\n } else {\n if (mimeType === validType) {\n return true;\n }\n }\n }\n } catch (err) {\n _iterator25.e(err);\n } finally {\n _iterator25.f();\n }\n\n return false;\n}; // Augment jQuery\n\n\nif (typeof jQuery !== \"undefined\" && jQuery !== null) {\n jQuery.fn.dropzone = function (options) {\n return this.each(function () {\n return new Dropzone(this, options);\n });\n };\n} // Dropzone file status codes\n\n\nDropzone.ADDED = \"added\";\nDropzone.QUEUED = \"queued\"; // For backwards compatibility. Now, if a file is accepted, it's either queued\n// or uploading.\n\nDropzone.ACCEPTED = Dropzone.QUEUED;\nDropzone.UPLOADING = \"uploading\";\nDropzone.PROCESSING = Dropzone.UPLOADING; // alias\n\nDropzone.CANCELED = \"canceled\";\nDropzone.ERROR = \"error\";\nDropzone.SUCCESS = \"success\";\n/*\n\n Bugfix for iOS 6 and 7\n Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n based on the work of https://github.com/stomita/ios-imagefile-megapixel\n\n */\n// Detecting vertical squash in loaded image.\n// Fixes a bug which squash image vertically while drawing into canvas for some images.\n// This is a bug in iOS6 devices. This function from https://github.com/stomita/ios-imagefile-megapixel\n\nvar detectVerticalSquash = function detectVerticalSquash(img) {\n var iw = img.naturalWidth;\n var ih = img.naturalHeight;\n var canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = ih;\n var ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0);\n\n var _ctx$getImageData = ctx.getImageData(1, 0, 1, ih),\n data = _ctx$getImageData.data; // search image edge pixel position in case it is squashed vertically.\n\n\n var sy = 0;\n var ey = ih;\n var py = ih;\n\n while (py > sy) {\n var alpha = data[(py - 1) * 4 + 3];\n\n if (alpha === 0) {\n ey = py;\n } else {\n sy = py;\n }\n\n py = ey + sy >> 1;\n }\n\n var ratio = py / ih;\n\n if (ratio === 0) {\n return 1;\n } else {\n return ratio;\n }\n}; // A replacement for context.drawImage\n// (args are for source and destination).\n\n\nvar drawImageIOSFix = function drawImageIOSFix(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n var vertSquashRatio = detectVerticalSquash(img);\n return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n}; // Based on MinifyJpeg\n// Source: http://www.perry.cz/files/ExifRestorer.js\n// http://elicon.blog57.fc2.com/blog-entry-206.html\n\n\nvar ExifRestore = /*#__PURE__*/function () {\n function ExifRestore() {\n dropzone_classCallCheck(this, ExifRestore);\n }\n\n dropzone_createClass(ExifRestore, null, [{\n key: \"initClass\",\n value: function initClass() {\n this.KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n }\n }, {\n key: \"encode64\",\n value: function encode64(input) {\n var output = \"\";\n var chr1 = undefined;\n var chr2 = undefined;\n var chr3 = \"\";\n var enc1 = undefined;\n var enc2 = undefined;\n var enc3 = undefined;\n var enc4 = \"\";\n var i = 0;\n\n while (true) {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n enc1 = chr1 >> 2;\n enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = \"\";\n enc1 = enc2 = enc3 = enc4 = \"\";\n\n if (!(i < input.length)) {\n break;\n }\n }\n\n return output;\n }\n }, {\n key: \"restore\",\n value: function restore(origFileBase64, resizedFileBase64) {\n if (!origFileBase64.match(\"data:image/jpeg;base64,\")) {\n return resizedFileBase64;\n }\n\n var rawImage = this.decode64(origFileBase64.replace(\"data:image/jpeg;base64,\", \"\"));\n var segments = this.slice2Segments(rawImage);\n var image = this.exifManipulation(resizedFileBase64, segments);\n return \"data:image/jpeg;base64,\".concat(this.encode64(image));\n }\n }, {\n key: \"exifManipulation\",\n value: function exifManipulation(resizedFileBase64, segments) {\n var exifArray = this.getExifArray(segments);\n var newImageArray = this.insertExif(resizedFileBase64, exifArray);\n var aBuffer = new Uint8Array(newImageArray);\n return aBuffer;\n }\n }, {\n key: \"getExifArray\",\n value: function getExifArray(segments) {\n var seg = undefined;\n var x = 0;\n\n while (x < segments.length) {\n seg = segments[x];\n\n if (seg[0] === 255 & seg[1] === 225) {\n return seg;\n }\n\n x++;\n }\n\n return [];\n }\n }, {\n key: \"insertExif\",\n value: function insertExif(resizedFileBase64, exifArray) {\n var imageData = resizedFileBase64.replace(\"data:image/jpeg;base64,\", \"\");\n var buf = this.decode64(imageData);\n var separatePoint = buf.indexOf(255, 3);\n var mae = buf.slice(0, separatePoint);\n var ato = buf.slice(separatePoint);\n var array = mae;\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n }\n }, {\n key: \"slice2Segments\",\n value: function slice2Segments(rawImageArray) {\n var head = 0;\n var segments = [];\n\n while (true) {\n var length;\n\n if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {\n break;\n }\n\n if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {\n head += 2;\n } else {\n length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];\n var endPoint = head + length + 2;\n var seg = rawImageArray.slice(head, endPoint);\n segments.push(seg);\n head = endPoint;\n }\n\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n }\n }, {\n key: \"decode64\",\n value: function decode64(input) {\n var output = \"\";\n var chr1 = undefined;\n var chr2 = undefined;\n var chr3 = \"\";\n var enc1 = undefined;\n var enc2 = undefined;\n var enc3 = undefined;\n var enc4 = \"\";\n var i = 0;\n var buf = []; // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n\n if (base64test.exec(input)) {\n console.warn(\"There were invalid base64 characters in the input text.\\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\\nExpect errors in decoding.\");\n }\n\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n while (true) {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n chr1 = enc1 << 2 | enc2 >> 4;\n chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n chr3 = (enc3 & 3) << 6 | enc4;\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = \"\";\n enc1 = enc2 = enc3 = enc4 = \"\";\n\n if (!(i < input.length)) {\n break;\n }\n }\n\n return buf;\n }\n }]);\n\n return ExifRestore;\n}();\n\nExifRestore.initClass();\n/*\n * contentloaded.js\n *\n * Author: Diego Perini (diego.perini at gmail.com)\n * Summary: cross-browser wrapper for DOMContentLoaded\n * Updated: 20101020\n * License: MIT\n * Version: 1.2\n *\n * URL:\n * http://javascript.nwbox.com/ContentLoaded/\n * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n */\n// @win window reference\n// @fn function reference\n\nvar contentLoaded = function contentLoaded(win, fn) {\n var done = false;\n var top = true;\n var doc = win.document;\n var root = doc.documentElement;\n var add = doc.addEventListener ? \"addEventListener\" : \"attachEvent\";\n var rem = doc.addEventListener ? \"removeEventListener\" : \"detachEvent\";\n var pre = doc.addEventListener ? \"\" : \"on\";\n\n var init = function init(e) {\n if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n return;\n }\n\n (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n\n if (!done && (done = true)) {\n return fn.call(win, e.type || e);\n }\n };\n\n var poll = function poll() {\n try {\n root.doScroll(\"left\");\n } catch (e) {\n setTimeout(poll, 50);\n return;\n }\n\n return init(\"poll\");\n };\n\n if (doc.readyState !== \"complete\") {\n if (doc.createEventObject && root.doScroll) {\n try {\n top = !win.frameElement;\n } catch (error) {}\n\n if (top) {\n poll();\n }\n }\n\n doc[add](pre + \"DOMContentLoaded\", init, false);\n doc[add](pre + \"readystatechange\", init, false);\n return win[add](pre + \"load\", init, false);\n }\n}; // As a single function to be able to write tests.\n\n\nDropzone._autoDiscoverFunction = function () {\n if (Dropzone.autoDiscover) {\n return Dropzone.discover();\n }\n};\n\ncontentLoaded(window, Dropzone._autoDiscoverFunction);\n\nfunction __guard__(value, transform) {\n return typeof value !== \"undefined\" && value !== null ? transform(value) : undefined;\n}\n\nfunction __guardMethod__(obj, methodName, transform) {\n if (typeof obj !== \"undefined\" && obj !== null && typeof obj[methodName] === \"function\") {\n return transform(obj, methodName);\n } else {\n return undefined;\n }\n}\n\n\n;// CONCATENATED MODULE: ./tool/dropzone.dist.js\n /// Make Dropzone a global variable.\n\nwindow.Dropzone = Dropzone;\n/* harmony default export */ var dropzone_dist = (Dropzone);\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","import debounce from './debounce.js';\nimport isObject from './isObject.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` 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 throttled 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 `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nexport default throttle;\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 arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","/**\n* Muuri v0.9.5\n* https://muuri.dev/\n* Copyright (c) 2015-present, Haltu Oy\n* Released under the MIT license\n* https://github.com/haltu/muuri/blob/master/LICENSE.md\n* @license MIT\n*\n* Muuri Packer\n* Copyright (c) 2016-present, Niklas Rämö \n* @license MIT\n*\n* Muuri Ticker / Muuri Emitter / Muuri Dragger\n* Copyright (c) 2018-present, Niklas Rämö \n* @license MIT\n*\n* Muuri AutoScroller\n* Copyright (c) 2019-present, Niklas Rämö \n* @license MIT\n*/\n\nvar GRID_INSTANCES = {};\nvar ITEM_ELEMENT_MAP = typeof Map === 'function' ? new Map() : null;\n\nvar ACTION_SWAP = 'swap';\nvar ACTION_MOVE = 'move';\n\nvar EVENT_SYNCHRONIZE = 'synchronize';\nvar EVENT_LAYOUT_START = 'layoutStart';\nvar EVENT_LAYOUT_END = 'layoutEnd';\nvar EVENT_LAYOUT_ABORT = 'layoutAbort';\nvar EVENT_ADD = 'add';\nvar EVENT_REMOVE = 'remove';\nvar EVENT_SHOW_START = 'showStart';\nvar EVENT_SHOW_END = 'showEnd';\nvar EVENT_HIDE_START = 'hideStart';\nvar EVENT_HIDE_END = 'hideEnd';\nvar EVENT_FILTER = 'filter';\nvar EVENT_SORT = 'sort';\nvar EVENT_MOVE = 'move';\nvar EVENT_SEND = 'send';\nvar EVENT_BEFORE_SEND = 'beforeSend';\nvar EVENT_RECEIVE = 'receive';\nvar EVENT_BEFORE_RECEIVE = 'beforeReceive';\nvar EVENT_DRAG_INIT = 'dragInit';\nvar EVENT_DRAG_START = 'dragStart';\nvar EVENT_DRAG_MOVE = 'dragMove';\nvar EVENT_DRAG_SCROLL = 'dragScroll';\nvar EVENT_DRAG_END = 'dragEnd';\nvar EVENT_DRAG_RELEASE_START = 'dragReleaseStart';\nvar EVENT_DRAG_RELEASE_END = 'dragReleaseEnd';\nvar EVENT_DESTROY = 'destroy';\n\nvar HAS_TOUCH_EVENTS = 'ontouchstart' in window;\nvar HAS_POINTER_EVENTS = !!window.PointerEvent;\nvar HAS_MS_POINTER_EVENTS = !!window.navigator.msPointerEnabled;\n\nvar MAX_SAFE_FLOAT32_INTEGER = 16777216;\n\n/**\n * Event emitter constructor.\n *\n * @class\n */\nfunction Emitter() {\n this._events = {};\n this._queue = [];\n this._counter = 0;\n this._clearOnEmit = false;\n}\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Bind an event listener.\n *\n * @public\n * @param {String} event\n * @param {Function} listener\n * @returns {Emitter}\n */\nEmitter.prototype.on = function (event, listener) {\n if (!this._events || !event || !listener) return this;\n\n // Get listeners queue and create it if it does not exist.\n var listeners = this._events[event];\n if (!listeners) listeners = this._events[event] = [];\n\n // Add the listener to the queue.\n listeners.push(listener);\n\n return this;\n};\n\n/**\n * Unbind all event listeners that match the provided listener function.\n *\n * @public\n * @param {String} event\n * @param {Function} listener\n * @returns {Emitter}\n */\nEmitter.prototype.off = function (event, listener) {\n if (!this._events || !event || !listener) return this;\n\n // Get listeners and return immediately if none is found.\n var listeners = this._events[event];\n if (!listeners || !listeners.length) return this;\n\n // Remove all matching listeners.\n var index;\n while ((index = listeners.indexOf(listener)) !== -1) {\n listeners.splice(index, 1);\n }\n\n return this;\n};\n\n/**\n * Unbind all listeners of the provided event.\n *\n * @public\n * @param {String} event\n * @returns {Emitter}\n */\nEmitter.prototype.clear = function (event) {\n if (!this._events || !event) return this;\n\n var listeners = this._events[event];\n if (listeners) {\n listeners.length = 0;\n delete this._events[event];\n }\n\n return this;\n};\n\n/**\n * Emit all listeners in a specified event with the provided arguments.\n *\n * @public\n * @param {String} event\n * @param {...*} [args]\n * @returns {Emitter}\n */\nEmitter.prototype.emit = function (event) {\n if (!this._events || !event) {\n this._clearOnEmit = false;\n return this;\n }\n\n // Get event listeners and quit early if there's no listeners.\n var listeners = this._events[event];\n if (!listeners || !listeners.length) {\n this._clearOnEmit = false;\n return this;\n }\n\n var queue = this._queue;\n var startIndex = queue.length;\n var argsLength = arguments.length - 1;\n var args;\n\n // If we have more than 3 arguments let's put the arguments in an array and\n // apply it to the listeners.\n if (argsLength > 3) {\n args = [];\n args.push.apply(args, arguments);\n args.shift();\n }\n\n // Add the current listeners to the callback queue before we process them.\n // This is necessary to guarantee that all of the listeners are called in\n // correct order even if new event listeners are removed/added during\n // processing and/or events are emitted during processing.\n queue.push.apply(queue, listeners);\n\n // Reset the event's listeners if need be.\n if (this._clearOnEmit) {\n listeners.length = 0;\n this._clearOnEmit = false;\n }\n\n // Increment queue counter. This is needed for the scenarios where emit is\n // triggered while the queue is already processing. We need to keep track of\n // how many \"queue processors\" there are active so that we can safely reset\n // the queue in the end when the last queue processor is finished.\n ++this._counter;\n\n // Process the queue (the specific part of it for this emit).\n var i = startIndex;\n var endIndex = queue.length;\n for (; i < endIndex; i++) {\n // prettier-ignore\n argsLength === 0 ? queue[i]() :\n argsLength === 1 ? queue[i](arguments[1]) :\n argsLength === 2 ? queue[i](arguments[1], arguments[2]) :\n argsLength === 3 ? queue[i](arguments[1], arguments[2], arguments[3]) :\n queue[i].apply(null, args);\n\n // Stop processing if the emitter is destroyed.\n if (!this._events) return this;\n }\n\n // Decrement queue process counter.\n --this._counter;\n\n // Reset the queue if there are no more queue processes running.\n if (!this._counter) queue.length = 0;\n\n return this;\n};\n\n/**\n * Emit all listeners in a specified event with the provided arguments and\n * remove the event's listeners just before calling the them. This method allows\n * the emitter to serve as a queue where all listeners are called only once.\n *\n * @public\n * @param {String} event\n * @param {...*} [args]\n * @returns {Emitter}\n */\nEmitter.prototype.burst = function () {\n if (!this._events) return this;\n this._clearOnEmit = true;\n this.emit.apply(this, arguments);\n return this;\n};\n\n/**\n * Check how many listeners there are for a specific event.\n *\n * @public\n * @param {String} event\n * @returns {Boolean}\n */\nEmitter.prototype.countListeners = function (event) {\n if (!this._events) return 0;\n var listeners = this._events[event];\n return listeners ? listeners.length : 0;\n};\n\n/**\n * Destroy emitter instance. Basically just removes all bound listeners.\n *\n * @public\n * @returns {Emitter}\n */\nEmitter.prototype.destroy = function () {\n if (!this._events) return this;\n this._queue.length = this._counter = 0;\n this._events = null;\n return this;\n};\n\nvar pointerout = HAS_POINTER_EVENTS ? 'pointerout' : HAS_MS_POINTER_EVENTS ? 'MSPointerOut' : '';\nvar waitDuration = 100;\n\n/**\n * If you happen to use Edge or IE on a touch capable device there is a\n * a specific case where pointercancel and pointerend events are never emitted,\n * even though one them should always be emitted when you release your finger\n * from the screen. The bug appears specifically when Muuri shifts the dragged\n * element's position in the DOM after pointerdown event, IE and Edge don't like\n * that behaviour and quite often forget to emit the pointerend/pointercancel\n * event. But, they do emit pointerout event so we utilize that here.\n * Specifically, if there has been no pointermove event within 100 milliseconds\n * since the last pointerout event we force cancel the drag operation. This hack\n * works surprisingly well 99% of the time. There is that 1% chance there still\n * that dragged items get stuck but it is what it is.\n *\n * @class\n * @param {Dragger} dragger\n */\nfunction EdgeHack(dragger) {\n if (!pointerout) return;\n\n this._dragger = dragger;\n this._timeout = null;\n this._outEvent = null;\n this._isActive = false;\n\n this._addBehaviour = this._addBehaviour.bind(this);\n this._removeBehaviour = this._removeBehaviour.bind(this);\n this._onTimeout = this._onTimeout.bind(this);\n this._resetData = this._resetData.bind(this);\n this._onStart = this._onStart.bind(this);\n this._onOut = this._onOut.bind(this);\n\n this._dragger.on('start', this._onStart);\n}\n\n/**\n * @private\n */\nEdgeHack.prototype._addBehaviour = function () {\n if (this._isActive) return;\n this._isActive = true;\n this._dragger.on('move', this._resetData);\n this._dragger.on('cancel', this._removeBehaviour);\n this._dragger.on('end', this._removeBehaviour);\n window.addEventListener(pointerout, this._onOut);\n};\n\n/**\n * @private\n */\nEdgeHack.prototype._removeBehaviour = function () {\n if (!this._isActive) return;\n this._dragger.off('move', this._resetData);\n this._dragger.off('cancel', this._removeBehaviour);\n this._dragger.off('end', this._removeBehaviour);\n window.removeEventListener(pointerout, this._onOut);\n this._resetData();\n this._isActive = false;\n};\n\n/**\n * @private\n */\nEdgeHack.prototype._resetData = function () {\n window.clearTimeout(this._timeout);\n this._timeout = null;\n this._outEvent = null;\n};\n\n/**\n * @private\n * @param {(PointerEvent|TouchEvent|MouseEvent)} e\n */\nEdgeHack.prototype._onStart = function (e) {\n if (e.pointerType === 'mouse') return;\n this._addBehaviour();\n};\n\n/**\n * @private\n * @param {(PointerEvent|TouchEvent|MouseEvent)} e\n */\nEdgeHack.prototype._onOut = function (e) {\n if (!this._dragger._getTrackedTouch(e)) return;\n this._resetData();\n this._outEvent = e;\n this._timeout = window.setTimeout(this._onTimeout, waitDuration);\n};\n\n/**\n * @private\n */\nEdgeHack.prototype._onTimeout = function () {\n var e = this._outEvent;\n this._resetData();\n if (this._dragger.isActive()) this._dragger._onCancel(e);\n};\n\n/**\n * @public\n */\nEdgeHack.prototype.destroy = function () {\n if (!pointerout) return;\n this._dragger.off('start', this._onStart);\n this._removeBehaviour();\n};\n\n// Playing it safe here, test all potential prefixes capitalized and lowercase.\nvar vendorPrefixes = ['', 'webkit', 'moz', 'ms', 'o', 'Webkit', 'Moz', 'MS', 'O'];\nvar cache$2 = {};\n\n/**\n * Get prefixed CSS property name when given a non-prefixed CSS property name.\n * Returns null if the property is not supported at all.\n *\n * @param {CSSStyleDeclaration} style\n * @param {String} prop\n * @returns {String}\n */\nfunction getPrefixedPropName(style, prop) {\n var prefixedProp = cache$2[prop] || '';\n if (prefixedProp) return prefixedProp;\n\n var camelProp = prop[0].toUpperCase() + prop.slice(1);\n var i = 0;\n while (i < vendorPrefixes.length) {\n prefixedProp = vendorPrefixes[i] ? vendorPrefixes[i] + camelProp : prop;\n if (prefixedProp in style) {\n cache$2[prop] = prefixedProp;\n return prefixedProp;\n }\n ++i;\n }\n\n return '';\n}\n\n/**\n * Check if passive events are supported.\n * https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n *\n * @returns {Boolean}\n */\nfunction hasPassiveEvents() {\n var isPassiveEventsSupported = false;\n\n try {\n var passiveOpts = Object.defineProperty({}, 'passive', {\n get: function () {\n isPassiveEventsSupported = true;\n },\n });\n window.addEventListener('testPassive', null, passiveOpts);\n window.removeEventListener('testPassive', null, passiveOpts);\n } catch (e) {}\n\n return isPassiveEventsSupported;\n}\n\nvar ua = window.navigator.userAgent.toLowerCase();\nvar isEdge = ua.indexOf('edge') > -1;\nvar isIE = ua.indexOf('trident') > -1;\nvar isFirefox = ua.indexOf('firefox') > -1;\nvar isAndroid = ua.indexOf('android') > -1;\n\nvar listenerOptions = hasPassiveEvents() ? { passive: true } : false;\n\nvar taProp = 'touchAction';\nvar taPropPrefixed = getPrefixedPropName(document.documentElement.style, taProp);\nvar taDefaultValue = 'auto';\n\n/**\n * Creates a new Dragger instance for an element.\n *\n * @public\n * @class\n * @param {HTMLElement} element\n * @param {Object} [cssProps]\n */\nfunction Dragger(element, cssProps) {\n this._element = element;\n this._emitter = new Emitter();\n this._isDestroyed = false;\n this._cssProps = {};\n this._touchAction = '';\n this._isActive = false;\n\n this._pointerId = null;\n this._startTime = 0;\n this._startX = 0;\n this._startY = 0;\n this._currentX = 0;\n this._currentY = 0;\n\n this._onStart = this._onStart.bind(this);\n this._onMove = this._onMove.bind(this);\n this._onCancel = this._onCancel.bind(this);\n this._onEnd = this._onEnd.bind(this);\n\n // Can't believe had to build a freaking class for a hack!\n this._edgeHack = null;\n if ((isEdge || isIE) && (HAS_POINTER_EVENTS || HAS_MS_POINTER_EVENTS)) {\n this._edgeHack = new EdgeHack(this);\n }\n\n // Apply initial CSS props.\n this.setCssProps(cssProps);\n\n // If touch action was not provided with initial CSS props let's assume it's\n // auto.\n if (!this._touchAction) {\n this.setTouchAction(taDefaultValue);\n }\n\n // Prevent native link/image dragging for the item and it's children.\n element.addEventListener('dragstart', Dragger._preventDefault, false);\n\n // Listen to start event.\n element.addEventListener(Dragger._inputEvents.start, this._onStart, listenerOptions);\n}\n\n/**\n * Protected properties\n * ********************\n */\n\nDragger._pointerEvents = {\n start: 'pointerdown',\n move: 'pointermove',\n cancel: 'pointercancel',\n end: 'pointerup',\n};\n\nDragger._msPointerEvents = {\n start: 'MSPointerDown',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n end: 'MSPointerUp',\n};\n\nDragger._touchEvents = {\n start: 'touchstart',\n move: 'touchmove',\n cancel: 'touchcancel',\n end: 'touchend',\n};\n\nDragger._mouseEvents = {\n start: 'mousedown',\n move: 'mousemove',\n cancel: '',\n end: 'mouseup',\n};\n\nDragger._inputEvents = (function () {\n if (HAS_TOUCH_EVENTS) return Dragger._touchEvents;\n if (HAS_POINTER_EVENTS) return Dragger._pointerEvents;\n if (HAS_MS_POINTER_EVENTS) return Dragger._msPointerEvents;\n return Dragger._mouseEvents;\n})();\n\nDragger._emitter = new Emitter();\n\nDragger._emitterEvents = {\n start: 'start',\n move: 'move',\n end: 'end',\n cancel: 'cancel',\n};\n\nDragger._activeInstances = [];\n\n/**\n * Protected static methods\n * ************************\n */\n\nDragger._preventDefault = function (e) {\n if (e.preventDefault && e.cancelable !== false) e.preventDefault();\n};\n\nDragger._activateInstance = function (instance) {\n var index = Dragger._activeInstances.indexOf(instance);\n if (index > -1) return;\n\n Dragger._activeInstances.push(instance);\n Dragger._emitter.on(Dragger._emitterEvents.move, instance._onMove);\n Dragger._emitter.on(Dragger._emitterEvents.cancel, instance._onCancel);\n Dragger._emitter.on(Dragger._emitterEvents.end, instance._onEnd);\n\n if (Dragger._activeInstances.length === 1) {\n Dragger._bindListeners();\n }\n};\n\nDragger._deactivateInstance = function (instance) {\n var index = Dragger._activeInstances.indexOf(instance);\n if (index === -1) return;\n\n Dragger._activeInstances.splice(index, 1);\n Dragger._emitter.off(Dragger._emitterEvents.move, instance._onMove);\n Dragger._emitter.off(Dragger._emitterEvents.cancel, instance._onCancel);\n Dragger._emitter.off(Dragger._emitterEvents.end, instance._onEnd);\n\n if (!Dragger._activeInstances.length) {\n Dragger._unbindListeners();\n }\n};\n\nDragger._bindListeners = function () {\n window.addEventListener(Dragger._inputEvents.move, Dragger._onMove, listenerOptions);\n window.addEventListener(Dragger._inputEvents.end, Dragger._onEnd, listenerOptions);\n if (Dragger._inputEvents.cancel) {\n window.addEventListener(Dragger._inputEvents.cancel, Dragger._onCancel, listenerOptions);\n }\n};\n\nDragger._unbindListeners = function () {\n window.removeEventListener(Dragger._inputEvents.move, Dragger._onMove, listenerOptions);\n window.removeEventListener(Dragger._inputEvents.end, Dragger._onEnd, listenerOptions);\n if (Dragger._inputEvents.cancel) {\n window.removeEventListener(Dragger._inputEvents.cancel, Dragger._onCancel, listenerOptions);\n }\n};\n\nDragger._getEventPointerId = function (event) {\n // If we have pointer id available let's use it.\n if (typeof event.pointerId === 'number') {\n return event.pointerId;\n }\n\n // For touch events let's get the first changed touch's identifier.\n if (event.changedTouches) {\n return event.changedTouches[0] ? event.changedTouches[0].identifier : null;\n }\n\n // For mouse/other events let's provide a static id.\n return 1;\n};\n\nDragger._getTouchById = function (event, id) {\n // If we have a pointer event return the whole event if there's a match, and\n // null otherwise.\n if (typeof event.pointerId === 'number') {\n return event.pointerId === id ? event : null;\n }\n\n // For touch events let's check if there's a changed touch object that matches\n // the pointerId in which case return the touch object.\n if (event.changedTouches) {\n for (var i = 0; i < event.changedTouches.length; i++) {\n if (event.changedTouches[i].identifier === id) {\n return event.changedTouches[i];\n }\n }\n return null;\n }\n\n // For mouse/other events let's assume there's only one pointer and just\n // return the event.\n return event;\n};\n\nDragger._onMove = function (e) {\n Dragger._emitter.emit(Dragger._emitterEvents.move, e);\n};\n\nDragger._onCancel = function (e) {\n Dragger._emitter.emit(Dragger._emitterEvents.cancel, e);\n};\n\nDragger._onEnd = function (e) {\n Dragger._emitter.emit(Dragger._emitterEvents.end, e);\n};\n\n/**\n * Private prototype methods\n * *************************\n */\n\n/**\n * Reset current drag operation (if any).\n *\n * @private\n */\nDragger.prototype._reset = function () {\n this._pointerId = null;\n this._startTime = 0;\n this._startX = 0;\n this._startY = 0;\n this._currentX = 0;\n this._currentY = 0;\n this._isActive = false;\n Dragger._deactivateInstance(this);\n};\n\n/**\n * Create a custom dragger event from a raw event.\n *\n * @private\n * @param {String} type\n * @param {(PointerEvent|TouchEvent|MouseEvent)} e\n * @returns {Object}\n */\nDragger.prototype._createEvent = function (type, e) {\n var touch = this._getTrackedTouch(e);\n return {\n // Hammer.js compatibility interface.\n type: type,\n srcEvent: e,\n distance: this.getDistance(),\n deltaX: this.getDeltaX(),\n deltaY: this.getDeltaY(),\n deltaTime: type === Dragger._emitterEvents.start ? 0 : this.getDeltaTime(),\n isFirst: type === Dragger._emitterEvents.start,\n isFinal: type === Dragger._emitterEvents.end || type === Dragger._emitterEvents.cancel,\n pointerType: e.pointerType || (e.touches ? 'touch' : 'mouse'),\n // Partial Touch API interface.\n identifier: this._pointerId,\n screenX: touch.screenX,\n screenY: touch.screenY,\n clientX: touch.clientX,\n clientY: touch.clientY,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target,\n };\n};\n\n/**\n * Emit a raw event as dragger event internally.\n *\n * @private\n * @param {String} type\n * @param {(PointerEvent|TouchEvent|MouseEvent)} e\n */\nDragger.prototype._emit = function (type, e) {\n this._emitter.emit(type, this._createEvent(type, e));\n};\n\n/**\n * If the provided event is a PointerEvent this method will return it if it has\n * the same pointerId as the instance. If the provided event is a TouchEvent\n * this method will try to look for a Touch instance in the changedTouches that\n * has an identifier matching this instance's pointerId. If the provided event\n * is a MouseEvent (or just any other event than PointerEvent or TouchEvent)\n * it will be returned immediately.\n *\n * @private\n * @param {(PointerEvent|TouchEvent|MouseEvent)} e\n * @returns {?(Touch|PointerEvent|MouseEvent)}\n */\nDragger.prototype._getTrackedTouch = function (e) {\n if (this._pointerId === null) return null;\n return Dragger._getTouchById(e, this._pointerId);\n};\n\n/**\n * Handler for start event.\n *\n * @private\n * @param {(PointerEvent|TouchEvent|MouseEvent)} e\n */\nDragger.prototype._onStart = function (e) {\n if (this._isDestroyed) return;\n\n // If pointer id is already assigned let's return early.\n if (this._pointerId !== null) return;\n\n // Get (and set) pointer id.\n this._pointerId = Dragger._getEventPointerId(e);\n if (this._pointerId === null) return;\n\n // Setup initial data and emit start event.\n var touch = this._getTrackedTouch(e);\n this._startX = this._currentX = touch.clientX;\n this._startY = this._currentY = touch.clientY;\n this._startTime = Date.now();\n this._isActive = true;\n this._emit(Dragger._emitterEvents.start, e);\n\n // If the drag procedure was not reset within the start procedure let's\n // activate the instance (start listening to move/cancel/end events).\n if (this._isActive) {\n Dragger._activateInstance(this);\n }\n};\n\n/**\n * Handler for move event.\n *\n * @private\n * @param {(PointerEvent|TouchEvent|MouseEvent)} e\n */\nDragger.prototype._onMove = function (e) {\n var touch = this._getTrackedTouch(e);\n if (!touch) return;\n this._currentX = touch.clientX;\n this._currentY = touch.clientY;\n this._emit(Dragger._emitterEvents.move, e);\n};\n\n/**\n * Handler for cancel event.\n *\n * @private\n * @param {(PointerEvent|TouchEvent|MouseEvent)} e\n */\nDragger.prototype._onCancel = function (e) {\n if (!this._getTrackedTouch(e)) return;\n this._emit(Dragger._emitterEvents.cancel, e);\n this._reset();\n};\n\n/**\n * Handler for end event.\n *\n * @private\n * @param {(PointerEvent|TouchEvent|MouseEvent)} e\n */\nDragger.prototype._onEnd = function (e) {\n if (!this._getTrackedTouch(e)) return;\n this._emit(Dragger._emitterEvents.end, e);\n this._reset();\n};\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Check if the element is being dragged at the moment.\n *\n * @public\n * @returns {Boolean}\n */\nDragger.prototype.isActive = function () {\n return this._isActive;\n};\n\n/**\n * Set element's touch-action CSS property.\n *\n * @public\n * @param {String} value\n */\nDragger.prototype.setTouchAction = function (value) {\n // Store unmodified touch action value (we trust user input here).\n this._touchAction = value;\n\n // Set touch-action style.\n if (taPropPrefixed) {\n this._cssProps[taPropPrefixed] = '';\n this._element.style[taPropPrefixed] = value;\n }\n\n // If we have an unsupported touch-action value let's add a special listener\n // that prevents default action on touch start event. A dirty hack, but best\n // we can do for now. The other options would be to somehow polyfill the\n // unsupported touch action behavior with custom heuristics which sounds like\n // a can of worms. We do a special exception here for Firefox Android which's\n // touch-action does not work properly if the dragged element is moved in the\n // the DOM tree on touchstart.\n if (HAS_TOUCH_EVENTS) {\n this._element.removeEventListener(Dragger._touchEvents.start, Dragger._preventDefault, true);\n if (this._element.style[taPropPrefixed] !== value || (isFirefox && isAndroid)) {\n this._element.addEventListener(Dragger._touchEvents.start, Dragger._preventDefault, true);\n }\n }\n};\n\n/**\n * Update element's CSS properties. Accepts an object with camel cased style\n * props with value pairs as it's first argument.\n *\n * @public\n * @param {Object} [newProps]\n */\nDragger.prototype.setCssProps = function (newProps) {\n if (!newProps) return;\n\n var currentProps = this._cssProps;\n var element = this._element;\n var prop;\n var prefixedProp;\n\n // Reset current props.\n for (prop in currentProps) {\n element.style[prop] = currentProps[prop];\n delete currentProps[prop];\n }\n\n // Set new props.\n for (prop in newProps) {\n // Make sure we have a value for the prop.\n if (!newProps[prop]) continue;\n\n // Special handling for touch-action.\n if (prop === taProp) {\n this.setTouchAction(newProps[prop]);\n continue;\n }\n\n // Get prefixed prop and skip if it does not exist.\n prefixedProp = getPrefixedPropName(element.style, prop);\n if (!prefixedProp) continue;\n\n // Store the prop and add the style.\n currentProps[prefixedProp] = '';\n element.style[prefixedProp] = newProps[prop];\n }\n};\n\n/**\n * How much the pointer has moved on x-axis from start position, in pixels.\n * Positive value indicates movement from left to right.\n *\n * @public\n * @returns {Number}\n */\nDragger.prototype.getDeltaX = function () {\n return this._currentX - this._startX;\n};\n\n/**\n * How much the pointer has moved on y-axis from start position, in pixels.\n * Positive value indicates movement from top to bottom.\n *\n * @public\n * @returns {Number}\n */\nDragger.prototype.getDeltaY = function () {\n return this._currentY - this._startY;\n};\n\n/**\n * How far (in pixels) has pointer moved from start position.\n *\n * @public\n * @returns {Number}\n */\nDragger.prototype.getDistance = function () {\n var x = this.getDeltaX();\n var y = this.getDeltaY();\n return Math.sqrt(x * x + y * y);\n};\n\n/**\n * How long has pointer been dragged.\n *\n * @public\n * @returns {Number}\n */\nDragger.prototype.getDeltaTime = function () {\n return this._startTime ? Date.now() - this._startTime : 0;\n};\n\n/**\n * Bind drag event listeners.\n *\n * @public\n * @param {String} eventName\n * - 'start', 'move', 'cancel' or 'end'.\n * @param {Function} listener\n */\nDragger.prototype.on = function (eventName, listener) {\n this._emitter.on(eventName, listener);\n};\n\n/**\n * Unbind drag event listeners.\n *\n * @public\n * @param {String} eventName\n * - 'start', 'move', 'cancel' or 'end'.\n * @param {Function} listener\n */\nDragger.prototype.off = function (eventName, listener) {\n this._emitter.off(eventName, listener);\n};\n\n/**\n * Destroy the instance and unbind all drag event listeners.\n *\n * @public\n */\nDragger.prototype.destroy = function () {\n if (this._isDestroyed) return;\n\n var element = this._element;\n\n if (this._edgeHack) this._edgeHack.destroy();\n\n // Reset data and deactivate the instance.\n this._reset();\n\n // Destroy emitter.\n this._emitter.destroy();\n\n // Unbind event handlers.\n element.removeEventListener(Dragger._inputEvents.start, this._onStart, listenerOptions);\n element.removeEventListener('dragstart', Dragger._preventDefault, false);\n element.removeEventListener(Dragger._touchEvents.start, Dragger._preventDefault, true);\n\n // Reset styles.\n for (var prop in this._cssProps) {\n element.style[prop] = this._cssProps[prop];\n delete this._cssProps[prop];\n }\n\n // Reset data.\n this._element = null;\n\n // Mark as destroyed.\n this._isDestroyed = true;\n};\n\nvar dt = 1000 / 60;\n\nvar raf = (\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function (callback) {\n return this.setTimeout(function () {\n callback(Date.now());\n }, dt);\n }\n).bind(window);\n\n/**\n * A ticker system for handling DOM reads and writes in an efficient way.\n *\n * @class\n */\nfunction Ticker(numLanes) {\n this._nextStep = null;\n this._lanes = [];\n this._stepQueue = [];\n this._stepCallbacks = {};\n this._step = this._step.bind(this);\n for (var i = 0; i < numLanes; i++) {\n this._lanes.push(new TickerLane());\n }\n}\n\nTicker.prototype._step = function (time) {\n var lanes = this._lanes;\n var stepQueue = this._stepQueue;\n var stepCallbacks = this._stepCallbacks;\n var i, j, id, laneQueue, laneCallbacks, laneIndices;\n\n this._nextStep = null;\n\n for (i = 0; i < lanes.length; i++) {\n laneQueue = lanes[i].queue;\n laneCallbacks = lanes[i].callbacks;\n laneIndices = lanes[i].indices;\n for (j = 0; j < laneQueue.length; j++) {\n id = laneQueue[j];\n if (!id) continue;\n stepQueue.push(id);\n stepCallbacks[id] = laneCallbacks[id];\n delete laneCallbacks[id];\n delete laneIndices[id];\n }\n laneQueue.length = 0;\n }\n\n for (i = 0; i < stepQueue.length; i++) {\n id = stepQueue[i];\n if (stepCallbacks[id]) stepCallbacks[id](time);\n delete stepCallbacks[id];\n }\n\n stepQueue.length = 0;\n};\n\nTicker.prototype.add = function (laneIndex, id, callback) {\n this._lanes[laneIndex].add(id, callback);\n if (!this._nextStep) this._nextStep = raf(this._step);\n};\n\nTicker.prototype.remove = function (laneIndex, id) {\n this._lanes[laneIndex].remove(id);\n};\n\n/**\n * A lane for ticker.\n *\n * @class\n */\nfunction TickerLane() {\n this.queue = [];\n this.indices = {};\n this.callbacks = {};\n}\n\nTickerLane.prototype.add = function (id, callback) {\n var index = this.indices[id];\n if (index !== undefined) this.queue[index] = undefined;\n this.queue.push(id);\n this.callbacks[id] = callback;\n this.indices[id] = this.queue.length - 1;\n};\n\nTickerLane.prototype.remove = function (id) {\n var index = this.indices[id];\n if (index === undefined) return;\n this.queue[index] = undefined;\n delete this.callbacks[id];\n delete this.indices[id];\n};\n\nvar LAYOUT_READ = 'layoutRead';\nvar LAYOUT_WRITE = 'layoutWrite';\nvar VISIBILITY_READ = 'visibilityRead';\nvar VISIBILITY_WRITE = 'visibilityWrite';\nvar DRAG_START_READ = 'dragStartRead';\nvar DRAG_START_WRITE = 'dragStartWrite';\nvar DRAG_MOVE_READ = 'dragMoveRead';\nvar DRAG_MOVE_WRITE = 'dragMoveWrite';\nvar DRAG_SCROLL_READ = 'dragScrollRead';\nvar DRAG_SCROLL_WRITE = 'dragScrollWrite';\nvar DRAG_SORT_READ = 'dragSortRead';\nvar PLACEHOLDER_LAYOUT_READ = 'placeholderLayoutRead';\nvar PLACEHOLDER_LAYOUT_WRITE = 'placeholderLayoutWrite';\nvar PLACEHOLDER_RESIZE_WRITE = 'placeholderResizeWrite';\nvar AUTO_SCROLL_READ = 'autoScrollRead';\nvar AUTO_SCROLL_WRITE = 'autoScrollWrite';\nvar DEBOUNCE_READ = 'debounceRead';\n\nvar LANE_READ = 0;\nvar LANE_READ_TAIL = 1;\nvar LANE_WRITE = 2;\n\nvar ticker = new Ticker(3);\n\nfunction addLayoutTick(itemId, read, write) {\n ticker.add(LANE_READ, LAYOUT_READ + itemId, read);\n ticker.add(LANE_WRITE, LAYOUT_WRITE + itemId, write);\n}\n\nfunction cancelLayoutTick(itemId) {\n ticker.remove(LANE_READ, LAYOUT_READ + itemId);\n ticker.remove(LANE_WRITE, LAYOUT_WRITE + itemId);\n}\n\nfunction addVisibilityTick(itemId, read, write) {\n ticker.add(LANE_READ, VISIBILITY_READ + itemId, read);\n ticker.add(LANE_WRITE, VISIBILITY_WRITE + itemId, write);\n}\n\nfunction cancelVisibilityTick(itemId) {\n ticker.remove(LANE_READ, VISIBILITY_READ + itemId);\n ticker.remove(LANE_WRITE, VISIBILITY_WRITE + itemId);\n}\n\nfunction addDragStartTick(itemId, read, write) {\n ticker.add(LANE_READ, DRAG_START_READ + itemId, read);\n ticker.add(LANE_WRITE, DRAG_START_WRITE + itemId, write);\n}\n\nfunction cancelDragStartTick(itemId) {\n ticker.remove(LANE_READ, DRAG_START_READ + itemId);\n ticker.remove(LANE_WRITE, DRAG_START_WRITE + itemId);\n}\n\nfunction addDragMoveTick(itemId, read, write) {\n ticker.add(LANE_READ, DRAG_MOVE_READ + itemId, read);\n ticker.add(LANE_WRITE, DRAG_MOVE_WRITE + itemId, write);\n}\n\nfunction cancelDragMoveTick(itemId) {\n ticker.remove(LANE_READ, DRAG_MOVE_READ + itemId);\n ticker.remove(LANE_WRITE, DRAG_MOVE_WRITE + itemId);\n}\n\nfunction addDragScrollTick(itemId, read, write) {\n ticker.add(LANE_READ, DRAG_SCROLL_READ + itemId, read);\n ticker.add(LANE_WRITE, DRAG_SCROLL_WRITE + itemId, write);\n}\n\nfunction cancelDragScrollTick(itemId) {\n ticker.remove(LANE_READ, DRAG_SCROLL_READ + itemId);\n ticker.remove(LANE_WRITE, DRAG_SCROLL_WRITE + itemId);\n}\n\nfunction addDragSortTick(itemId, read) {\n ticker.add(LANE_READ_TAIL, DRAG_SORT_READ + itemId, read);\n}\n\nfunction cancelDragSortTick(itemId) {\n ticker.remove(LANE_READ_TAIL, DRAG_SORT_READ + itemId);\n}\n\nfunction addPlaceholderLayoutTick(itemId, read, write) {\n ticker.add(LANE_READ, PLACEHOLDER_LAYOUT_READ + itemId, read);\n ticker.add(LANE_WRITE, PLACEHOLDER_LAYOUT_WRITE + itemId, write);\n}\n\nfunction cancelPlaceholderLayoutTick(itemId) {\n ticker.remove(LANE_READ, PLACEHOLDER_LAYOUT_READ + itemId);\n ticker.remove(LANE_WRITE, PLACEHOLDER_LAYOUT_WRITE + itemId);\n}\n\nfunction addPlaceholderResizeTick(itemId, write) {\n ticker.add(LANE_WRITE, PLACEHOLDER_RESIZE_WRITE + itemId, write);\n}\n\nfunction cancelPlaceholderResizeTick(itemId) {\n ticker.remove(LANE_WRITE, PLACEHOLDER_RESIZE_WRITE + itemId);\n}\n\nfunction addAutoScrollTick(read, write) {\n ticker.add(LANE_READ, AUTO_SCROLL_READ, read);\n ticker.add(LANE_WRITE, AUTO_SCROLL_WRITE, write);\n}\n\nfunction cancelAutoScrollTick() {\n ticker.remove(LANE_READ, AUTO_SCROLL_READ);\n ticker.remove(LANE_WRITE, AUTO_SCROLL_WRITE);\n}\n\nfunction addDebounceTick(debounceId, read) {\n ticker.add(LANE_READ, DEBOUNCE_READ + debounceId, read);\n}\n\nfunction cancelDebounceTick(debounceId) {\n ticker.remove(LANE_READ, DEBOUNCE_READ + debounceId);\n}\n\nvar AXIS_X = 1;\nvar AXIS_Y = 2;\nvar FORWARD = 4;\nvar BACKWARD = 8;\nvar LEFT = AXIS_X | BACKWARD;\nvar RIGHT = AXIS_X | FORWARD;\nvar UP = AXIS_Y | BACKWARD;\nvar DOWN = AXIS_Y | FORWARD;\n\nvar functionType = 'function';\n\n/**\n * Check if a value is a function.\n *\n * @param {*} val\n * @returns {Boolean}\n */\nfunction isFunction(val) {\n return typeof val === functionType;\n}\n\nvar cache$1 = typeof WeakMap === 'function' ? new WeakMap() : null;\n\n/**\n * Returns the computed value of an element's style property as a string.\n *\n * @param {HTMLElement} element\n * @param {String} style\n * @returns {String}\n */\nfunction getStyle(element, style) {\n var styles = cache$1 && cache$1.get(element);\n\n if (!styles) {\n styles = window.getComputedStyle(element, null);\n if (cache$1) cache$1.set(element, styles);\n }\n\n return styles.getPropertyValue(style);\n}\n\n/**\n * Returns the computed value of an element's style property transformed into\n * a float value.\n *\n * @param {HTMLElement} el\n * @param {String} style\n * @returns {Number}\n */\nfunction getStyleAsFloat(el, style) {\n return parseFloat(getStyle(el, style)) || 0;\n}\n\nvar DOC_ELEM = document.documentElement;\nvar BODY = document.body;\nvar THRESHOLD_DATA = { value: 0, offset: 0 };\n\n/**\n * @param {HTMLElement|Window} element\n * @returns {HTMLElement|Window}\n */\nfunction getScrollElement(element) {\n if (element === window || element === DOC_ELEM || element === BODY) {\n return window;\n } else {\n return element;\n }\n}\n\n/**\n * @param {HTMLElement|Window} element\n * @returns {Number}\n */\nfunction getScrollLeft(element) {\n return element === window ? element.pageXOffset : element.scrollLeft;\n}\n\n/**\n * @param {HTMLElement|Window} element\n * @returns {Number}\n */\nfunction getScrollTop(element) {\n return element === window ? element.pageYOffset : element.scrollTop;\n}\n\n/**\n * @param {HTMLElement|Window} element\n * @returns {Number}\n */\nfunction getScrollLeftMax(element) {\n if (element === window) {\n return DOC_ELEM.scrollWidth - DOC_ELEM.clientWidth;\n } else {\n return element.scrollWidth - element.clientWidth;\n }\n}\n\n/**\n * @param {HTMLElement|Window} element\n * @returns {Number}\n */\nfunction getScrollTopMax(element) {\n if (element === window) {\n return DOC_ELEM.scrollHeight - DOC_ELEM.clientHeight;\n } else {\n return element.scrollHeight - element.clientHeight;\n }\n}\n\n/**\n * Get window's or element's client rectangle data relative to the element's\n * content dimensions (includes inner size + padding, excludes scrollbars,\n * borders and margins).\n *\n * @param {HTMLElement|Window} element\n * @returns {Rectangle}\n */\nfunction getContentRect(element, result) {\n result = result || {};\n\n if (element === window) {\n result.width = DOC_ELEM.clientWidth;\n result.height = DOC_ELEM.clientHeight;\n result.left = 0;\n result.right = result.width;\n result.top = 0;\n result.bottom = result.height;\n } else {\n var bcr = element.getBoundingClientRect();\n var borderLeft = element.clientLeft || getStyleAsFloat(element, 'border-left-width');\n var borderTop = element.clientTop || getStyleAsFloat(element, 'border-top-width');\n result.width = element.clientWidth;\n result.height = element.clientHeight;\n result.left = bcr.left + borderLeft;\n result.right = result.left + result.width;\n result.top = bcr.top + borderTop;\n result.bottom = result.top + result.height;\n }\n\n return result;\n}\n\n/**\n * @param {Item} item\n * @returns {Object}\n */\nfunction getItemAutoScrollSettings(item) {\n return item._drag._getGrid()._settings.dragAutoScroll;\n}\n\n/**\n * @param {Item} item\n */\nfunction prepareItemScrollSync(item) {\n if (!item._drag) return;\n item._drag._prepareScroll();\n}\n\n/**\n * @param {Item} item\n */\nfunction applyItemScrollSync(item) {\n if (!item._drag || !item._isActive) return;\n var drag = item._drag;\n drag._scrollDiffX = drag._scrollDiffY = 0;\n item._setTranslate(drag._left, drag._top);\n}\n\n/**\n * Compute threshold value and edge offset.\n *\n * @param {Number} threshold\n * @param {Number} safeZone\n * @param {Number} itemSize\n * @param {Number} targetSize\n * @returns {Object}\n */\nfunction computeThreshold(threshold, safeZone, itemSize, targetSize) {\n THRESHOLD_DATA.value = Math.min(targetSize / 2, threshold);\n THRESHOLD_DATA.offset =\n Math.max(0, itemSize + THRESHOLD_DATA.value * 2 + targetSize * safeZone - targetSize) / 2;\n return THRESHOLD_DATA;\n}\n\nfunction ScrollRequest() {\n this.reset();\n}\n\nScrollRequest.prototype.reset = function () {\n if (this.isActive) this.onStop();\n this.item = null;\n this.element = null;\n this.isActive = false;\n this.isEnding = false;\n this.direction = null;\n this.value = null;\n this.maxValue = 0;\n this.threshold = 0;\n this.distance = 0;\n this.speed = 0;\n this.duration = 0;\n this.action = null;\n};\n\nScrollRequest.prototype.hasReachedEnd = function () {\n return FORWARD & this.direction ? this.value >= this.maxValue : this.value <= 0;\n};\n\nScrollRequest.prototype.computeCurrentScrollValue = function () {\n if (this.value === null) {\n return AXIS_X & this.direction ? getScrollLeft(this.element) : getScrollTop(this.element);\n }\n return Math.max(0, Math.min(this.value, this.maxValue));\n};\n\nScrollRequest.prototype.computeNextScrollValue = function (deltaTime) {\n var delta = this.speed * (deltaTime / 1000);\n var nextValue = FORWARD & this.direction ? this.value + delta : this.value - delta;\n return Math.max(0, Math.min(nextValue, this.maxValue));\n};\n\nScrollRequest.prototype.computeSpeed = (function () {\n var data = {\n direction: null,\n threshold: 0,\n distance: 0,\n value: 0,\n maxValue: 0,\n deltaTime: 0,\n duration: 0,\n isEnding: false,\n };\n\n return function (deltaTime) {\n var item = this.item;\n var speed = getItemAutoScrollSettings(item).speed;\n\n if (isFunction(speed)) {\n data.direction = this.direction;\n data.threshold = this.threshold;\n data.distance = this.distance;\n data.value = this.value;\n data.maxValue = this.maxValue;\n data.duration = this.duration;\n data.speed = this.speed;\n data.deltaTime = deltaTime;\n data.isEnding = this.isEnding;\n return speed(item, this.element, data);\n } else {\n return speed;\n }\n };\n})();\n\nScrollRequest.prototype.tick = function (deltaTime) {\n if (!this.isActive) {\n this.isActive = true;\n this.onStart();\n }\n this.value = this.computeCurrentScrollValue();\n this.speed = this.computeSpeed(deltaTime);\n this.value = this.computeNextScrollValue(deltaTime);\n this.duration += deltaTime;\n return this.value;\n};\n\nScrollRequest.prototype.onStart = function () {\n var item = this.item;\n var onStart = getItemAutoScrollSettings(item).onStart;\n if (isFunction(onStart)) onStart(item, this.element, this.direction);\n};\n\nScrollRequest.prototype.onStop = function () {\n var item = this.item;\n var onStop = getItemAutoScrollSettings(item).onStop;\n if (isFunction(onStop)) onStop(item, this.element, this.direction);\n // Manually nudge sort to happen. There's a good chance that the item is still\n // after the scroll stops which means that the next sort will be triggered\n // only after the item is moved or it's parent scrolled.\n if (item._drag) item._drag.sort();\n};\n\nfunction ScrollAction() {\n this.element = null;\n this.requestX = null;\n this.requestY = null;\n this.scrollLeft = 0;\n this.scrollTop = 0;\n}\n\nScrollAction.prototype.reset = function () {\n if (this.requestX) this.requestX.action = null;\n if (this.requestY) this.requestY.action = null;\n this.element = null;\n this.requestX = null;\n this.requestY = null;\n this.scrollLeft = 0;\n this.scrollTop = 0;\n};\n\nScrollAction.prototype.addRequest = function (request) {\n if (AXIS_X & request.direction) {\n this.removeRequest(this.requestX);\n this.requestX = request;\n } else {\n this.removeRequest(this.requestY);\n this.requestY = request;\n }\n request.action = this;\n};\n\nScrollAction.prototype.removeRequest = function (request) {\n if (!request) return;\n if (this.requestX === request) {\n this.requestX = null;\n request.action = null;\n } else if (this.requestY === request) {\n this.requestY = null;\n request.action = null;\n }\n};\n\nScrollAction.prototype.computeScrollValues = function () {\n this.scrollLeft = this.requestX ? this.requestX.value : getScrollLeft(this.element);\n this.scrollTop = this.requestY ? this.requestY.value : getScrollTop(this.element);\n};\n\nScrollAction.prototype.scroll = function () {\n var element = this.element;\n if (!element) return;\n\n if (element.scrollTo) {\n element.scrollTo(this.scrollLeft, this.scrollTop);\n } else {\n element.scrollLeft = this.scrollLeft;\n element.scrollTop = this.scrollTop;\n }\n};\n\nfunction Pool(createItem, releaseItem) {\n this.pool = [];\n this.createItem = createItem;\n this.releaseItem = releaseItem;\n}\n\nPool.prototype.pick = function () {\n return this.pool.pop() || this.createItem();\n};\n\nPool.prototype.release = function (item) {\n this.releaseItem(item);\n if (this.pool.indexOf(item) !== -1) return;\n this.pool.push(item);\n};\n\nPool.prototype.reset = function () {\n this.pool.length = 0;\n};\n\n/**\n * Check if two rectangles are overlapping.\n *\n * @param {Object} a\n * @param {Object} b\n * @returns {Number}\n */\nfunction isOverlapping(a, b) {\n return !(\n a.left + a.width <= b.left ||\n b.left + b.width <= a.left ||\n a.top + a.height <= b.top ||\n b.top + b.height <= a.top\n );\n}\n\n/**\n * Calculate intersection area between two rectangle.\n *\n * @param {Object} a\n * @param {Object} b\n * @returns {Number}\n */\nfunction getIntersectionArea(a, b) {\n if (!isOverlapping(a, b)) return 0;\n var width = Math.min(a.left + a.width, b.left + b.width) - Math.max(a.left, b.left);\n var height = Math.min(a.top + a.height, b.top + b.height) - Math.max(a.top, b.top);\n return width * height;\n}\n\n/**\n * Calculate how many percent the intersection area of two rectangles is from\n * the maximum potential intersection area between the rectangles.\n *\n * @param {Object} a\n * @param {Object} b\n * @returns {Number}\n */\nfunction getIntersectionScore(a, b) {\n var area = getIntersectionArea(a, b);\n if (!area) return 0;\n var maxArea = Math.min(a.width, b.width) * Math.min(a.height, b.height);\n return (area / maxArea) * 100;\n}\n\nvar RECT_1 = {\n width: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n};\n\nvar RECT_2 = {\n width: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n};\n\nfunction AutoScroller() {\n this._isDestroyed = false;\n this._isTicking = false;\n this._tickTime = 0;\n this._tickDeltaTime = 0;\n this._items = [];\n this._actions = [];\n this._requests = {};\n this._requests[AXIS_X] = {};\n this._requests[AXIS_Y] = {};\n this._requestOverlapCheck = {};\n this._dragPositions = {};\n this._dragDirections = {};\n this._overlapCheckInterval = 150;\n\n this._requestPool = new Pool(\n function () {\n return new ScrollRequest();\n },\n function (request) {\n request.reset();\n }\n );\n\n this._actionPool = new Pool(\n function () {\n return new ScrollAction();\n },\n function (action) {\n action.reset();\n }\n );\n\n this._readTick = this._readTick.bind(this);\n this._writeTick = this._writeTick.bind(this);\n}\n\nAutoScroller.AXIS_X = AXIS_X;\nAutoScroller.AXIS_Y = AXIS_Y;\nAutoScroller.FORWARD = FORWARD;\nAutoScroller.BACKWARD = BACKWARD;\nAutoScroller.LEFT = LEFT;\nAutoScroller.RIGHT = RIGHT;\nAutoScroller.UP = UP;\nAutoScroller.DOWN = DOWN;\n\nAutoScroller.smoothSpeed = function (maxSpeed, acceleration, deceleration) {\n return function (item, element, data) {\n var targetSpeed = 0;\n if (!data.isEnding) {\n if (data.threshold > 0) {\n var factor = data.threshold - Math.max(0, data.distance);\n targetSpeed = (maxSpeed / data.threshold) * factor;\n } else {\n targetSpeed = maxSpeed;\n }\n }\n\n var currentSpeed = data.speed;\n var nextSpeed = targetSpeed;\n\n if (currentSpeed === targetSpeed) {\n return nextSpeed;\n }\n\n if (currentSpeed < targetSpeed) {\n nextSpeed = currentSpeed + acceleration * (data.deltaTime / 1000);\n return Math.min(targetSpeed, nextSpeed);\n } else {\n nextSpeed = currentSpeed - deceleration * (data.deltaTime / 1000);\n return Math.max(targetSpeed, nextSpeed);\n }\n };\n};\n\nAutoScroller.pointerHandle = function (pointerSize) {\n var rect = { left: 0, top: 0, width: 0, height: 0 };\n var size = pointerSize || 1;\n return function (item, x, y, w, h, pX, pY) {\n rect.left = pX - size * 0.5;\n rect.top = pY - size * 0.5;\n rect.width = size;\n rect.height = size;\n return rect;\n };\n};\n\nAutoScroller.prototype._readTick = function (time) {\n if (this._isDestroyed) return;\n if (time && this._tickTime) {\n this._tickDeltaTime = time - this._tickTime;\n this._tickTime = time;\n this._updateRequests();\n this._updateActions();\n } else {\n this._tickTime = time;\n this._tickDeltaTime = 0;\n }\n};\n\nAutoScroller.prototype._writeTick = function () {\n if (this._isDestroyed) return;\n this._applyActions();\n addAutoScrollTick(this._readTick, this._writeTick);\n};\n\nAutoScroller.prototype._startTicking = function () {\n this._isTicking = true;\n addAutoScrollTick(this._readTick, this._writeTick);\n};\n\nAutoScroller.prototype._stopTicking = function () {\n this._isTicking = false;\n this._tickTime = 0;\n this._tickDeltaTime = 0;\n cancelAutoScrollTick();\n};\n\nAutoScroller.prototype._getItemHandleRect = function (item, handle, rect) {\n var itemDrag = item._drag;\n\n if (handle) {\n var ev = itemDrag._dragMoveEvent || itemDrag._dragStartEvent;\n var data = handle(\n item,\n itemDrag._clientX,\n itemDrag._clientY,\n item._width,\n item._height,\n ev.clientX,\n ev.clientY\n );\n rect.left = data.left;\n rect.top = data.top;\n rect.width = data.width;\n rect.height = data.height;\n } else {\n rect.left = itemDrag._clientX;\n rect.top = itemDrag._clientY;\n rect.width = item._width;\n rect.height = item._height;\n }\n\n rect.right = rect.left + rect.width;\n rect.bottom = rect.top + rect.height;\n\n return rect;\n};\n\nAutoScroller.prototype._requestItemScroll = function (\n item,\n axis,\n element,\n direction,\n threshold,\n distance,\n maxValue\n) {\n var reqMap = this._requests[axis];\n var request = reqMap[item._id];\n\n if (request) {\n if (request.element !== element || request.direction !== direction) {\n request.reset();\n }\n } else {\n request = this._requestPool.pick();\n }\n\n request.item = item;\n request.element = element;\n request.direction = direction;\n request.threshold = threshold;\n request.distance = distance;\n request.maxValue = maxValue;\n reqMap[item._id] = request;\n};\n\nAutoScroller.prototype._cancelItemScroll = function (item, axis) {\n var reqMap = this._requests[axis];\n var request = reqMap[item._id];\n if (!request) return;\n if (request.action) request.action.removeRequest(request);\n this._requestPool.release(request);\n delete reqMap[item._id];\n};\n\nAutoScroller.prototype._checkItemOverlap = function (item, checkX, checkY) {\n var settings = getItemAutoScrollSettings(item);\n var targets = isFunction(settings.targets) ? settings.targets(item) : settings.targets;\n var threshold = settings.threshold;\n var safeZone = settings.safeZone;\n\n if (!targets || !targets.length) {\n checkX && this._cancelItemScroll(item, AXIS_X);\n checkY && this._cancelItemScroll(item, AXIS_Y);\n return;\n }\n\n var dragDirections = this._dragDirections[item._id];\n var dragDirectionX = dragDirections[0];\n var dragDirectionY = dragDirections[1];\n\n if (!dragDirectionX && !dragDirectionY) {\n checkX && this._cancelItemScroll(item, AXIS_X);\n checkY && this._cancelItemScroll(item, AXIS_Y);\n return;\n }\n\n var itemRect = this._getItemHandleRect(item, settings.handle, RECT_1);\n var testRect = RECT_2;\n\n var target = null;\n var testElement = null;\n var testAxisX = true;\n var testAxisY = true;\n var testScore = 0;\n var testPriority = 0;\n var testThreshold = null;\n var testDirection = null;\n var testDistance = 0;\n var testMaxScrollX = 0;\n var testMaxScrollY = 0;\n\n var xElement = null;\n var xPriority = -Infinity;\n var xThreshold = 0;\n var xScore = 0;\n var xDirection = null;\n var xDistance = 0;\n var xMaxScroll = 0;\n\n var yElement = null;\n var yPriority = -Infinity;\n var yThreshold = 0;\n var yScore = 0;\n var yDirection = null;\n var yDistance = 0;\n var yMaxScroll = 0;\n\n for (var i = 0; i < targets.length; i++) {\n target = targets[i];\n testAxisX = checkX && dragDirectionX && target.axis !== AXIS_Y;\n testAxisY = checkY && dragDirectionY && target.axis !== AXIS_X;\n testPriority = target.priority || 0;\n\n // Ignore this item if it's x-axis and y-axis priority is lower than\n // the currently matching item's.\n if ((!testAxisX || testPriority < xPriority) && (!testAxisY || testPriority < yPriority)) {\n continue;\n }\n\n testElement = getScrollElement(target.element || target);\n testMaxScrollX = testAxisX ? getScrollLeftMax(testElement) : -1;\n testMaxScrollY = testAxisY ? getScrollTopMax(testElement) : -1;\n\n // Ignore this item if there is no possibility to scroll.\n if (!testMaxScrollX && !testMaxScrollY) continue;\n\n testRect = getContentRect(testElement, testRect);\n testScore = getIntersectionScore(itemRect, testRect);\n\n // Ignore this item if it's not overlapping at all with the dragged item.\n if (testScore <= 0) continue;\n\n // Test x-axis.\n if (\n testAxisX &&\n testPriority >= xPriority &&\n testMaxScrollX > 0 &&\n (testPriority > xPriority || testScore > xScore)\n ) {\n testDirection = null;\n testThreshold = computeThreshold(\n typeof target.threshold === 'number' ? target.threshold : threshold,\n safeZone,\n itemRect.width,\n testRect.width\n );\n if (dragDirectionX === RIGHT) {\n testDistance = testRect.right + testThreshold.offset - itemRect.right;\n if (testDistance <= testThreshold.value && getScrollLeft(testElement) < testMaxScrollX) {\n testDirection = RIGHT;\n }\n } else if (dragDirectionX === LEFT) {\n testDistance = itemRect.left - (testRect.left - testThreshold.offset);\n if (testDistance <= testThreshold.value && getScrollLeft(testElement) > 0) {\n testDirection = LEFT;\n }\n }\n\n if (testDirection !== null) {\n xElement = testElement;\n xPriority = testPriority;\n xThreshold = testThreshold.value;\n xScore = testScore;\n xDirection = testDirection;\n xDistance = testDistance;\n xMaxScroll = testMaxScrollX;\n }\n }\n\n // Test y-axis.\n if (\n testAxisY &&\n testPriority >= yPriority &&\n testMaxScrollY > 0 &&\n (testPriority > yPriority || testScore > yScore)\n ) {\n testDirection = null;\n testThreshold = computeThreshold(\n typeof target.threshold === 'number' ? target.threshold : threshold,\n safeZone,\n itemRect.height,\n testRect.height\n );\n if (dragDirectionY === DOWN) {\n testDistance = testRect.bottom + testThreshold.offset - itemRect.bottom;\n if (testDistance <= testThreshold.value && getScrollTop(testElement) < testMaxScrollY) {\n testDirection = DOWN;\n }\n } else if (dragDirectionY === UP) {\n testDistance = itemRect.top - (testRect.top - testThreshold.offset);\n if (testDistance <= testThreshold.value && getScrollTop(testElement) > 0) {\n testDirection = UP;\n }\n }\n\n if (testDirection !== null) {\n yElement = testElement;\n yPriority = testPriority;\n yThreshold = testThreshold.value;\n yScore = testScore;\n yDirection = testDirection;\n yDistance = testDistance;\n yMaxScroll = testMaxScrollY;\n }\n }\n }\n\n // Request or cancel x-axis scroll.\n if (checkX) {\n if (xElement) {\n this._requestItemScroll(\n item,\n AXIS_X,\n xElement,\n xDirection,\n xThreshold,\n xDistance,\n xMaxScroll\n );\n } else {\n this._cancelItemScroll(item, AXIS_X);\n }\n }\n\n // Request or cancel y-axis scroll.\n if (checkY) {\n if (yElement) {\n this._requestItemScroll(\n item,\n AXIS_Y,\n yElement,\n yDirection,\n yThreshold,\n yDistance,\n yMaxScroll\n );\n } else {\n this._cancelItemScroll(item, AXIS_Y);\n }\n }\n};\n\nAutoScroller.prototype._updateScrollRequest = function (scrollRequest) {\n var item = scrollRequest.item;\n var settings = getItemAutoScrollSettings(item);\n var targets = isFunction(settings.targets) ? settings.targets(item) : settings.targets;\n var targetCount = (targets && targets.length) || 0;\n var threshold = settings.threshold;\n var safeZone = settings.safeZone;\n var itemRect = this._getItemHandleRect(item, settings.handle, RECT_1);\n var testRect = RECT_2;\n var target = null;\n var testElement = null;\n var testIsAxisX = false;\n var testScore = null;\n var testThreshold = null;\n var testDistance = null;\n var testScroll = null;\n var testMaxScroll = null;\n var hasReachedEnd = null;\n\n for (var i = 0; i < targetCount; i++) {\n target = targets[i];\n\n // Make sure we have a matching element.\n testElement = getScrollElement(target.element || target);\n if (testElement !== scrollRequest.element) continue;\n\n // Make sure we have a matching axis.\n testIsAxisX = !!(AXIS_X & scrollRequest.direction);\n if (testIsAxisX) {\n if (target.axis === AXIS_Y) continue;\n } else {\n if (target.axis === AXIS_X) continue;\n }\n\n // Stop scrolling if there is no room to scroll anymore.\n testMaxScroll = testIsAxisX ? getScrollLeftMax(testElement) : getScrollTopMax(testElement);\n if (testMaxScroll <= 0) {\n break;\n }\n\n testRect = getContentRect(testElement, testRect);\n testScore = getIntersectionScore(itemRect, testRect);\n\n // Stop scrolling if dragged item is not overlapping with the scroll\n // element anymore.\n if (testScore <= 0) {\n break;\n }\n\n // Compute threshold and edge offset.\n testThreshold = computeThreshold(\n typeof target.threshold === 'number' ? target.threshold : threshold,\n safeZone,\n testIsAxisX ? itemRect.width : itemRect.height,\n testIsAxisX ? testRect.width : testRect.height\n );\n\n // Compute distance (based on current direction).\n if (scrollRequest.direction === LEFT) {\n testDistance = itemRect.left - (testRect.left - testThreshold.offset);\n } else if (scrollRequest.direction === RIGHT) {\n testDistance = testRect.right + testThreshold.offset - itemRect.right;\n } else if (scrollRequest.direction === UP) {\n testDistance = itemRect.top - (testRect.top - testThreshold.offset);\n } else {\n testDistance = testRect.bottom + testThreshold.offset - itemRect.bottom;\n }\n\n // Stop scrolling if threshold is not exceeded.\n if (testDistance > testThreshold.value) {\n break;\n }\n\n // Stop scrolling if we have reached the end of the scroll value.\n testScroll = testIsAxisX ? getScrollLeft(testElement) : getScrollTop(testElement);\n hasReachedEnd =\n FORWARD & scrollRequest.direction ? testScroll >= testMaxScroll : testScroll <= 0;\n if (hasReachedEnd) {\n break;\n }\n\n // Scrolling can continue, let's update the values.\n scrollRequest.maxValue = testMaxScroll;\n scrollRequest.threshold = testThreshold.value;\n scrollRequest.distance = testDistance;\n scrollRequest.isEnding = false;\n return true;\n }\n\n // Before we end the request, let's see if we need to stop the scrolling\n // smoothly or immediately.\n if (settings.smoothStop === true && scrollRequest.speed > 0) {\n if (hasReachedEnd === null) hasReachedEnd = scrollRequest.hasReachedEnd();\n scrollRequest.isEnding = hasReachedEnd ? false : true;\n } else {\n scrollRequest.isEnding = false;\n }\n\n return scrollRequest.isEnding;\n};\n\nAutoScroller.prototype._updateRequests = function () {\n var items = this._items;\n var requestsX = this._requests[AXIS_X];\n var requestsY = this._requests[AXIS_Y];\n var item, reqX, reqY, checkTime, needsCheck, checkX, checkY;\n\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n checkTime = this._requestOverlapCheck[item._id];\n needsCheck = checkTime > 0 && this._tickTime - checkTime > this._overlapCheckInterval;\n\n checkX = true;\n reqX = requestsX[item._id];\n if (reqX && reqX.isActive) {\n checkX = !this._updateScrollRequest(reqX);\n if (checkX) {\n needsCheck = true;\n this._cancelItemScroll(item, AXIS_X);\n }\n }\n\n checkY = true;\n reqY = requestsY[item._id];\n if (reqY && reqY.isActive) {\n checkY = !this._updateScrollRequest(reqY);\n if (checkY) {\n needsCheck = true;\n this._cancelItemScroll(item, AXIS_Y);\n }\n }\n\n if (needsCheck) {\n this._requestOverlapCheck[item._id] = 0;\n this._checkItemOverlap(item, checkX, checkY);\n }\n }\n};\n\nAutoScroller.prototype._requestAction = function (request, axis) {\n var actions = this._actions;\n var isAxisX = axis === AXIS_X;\n var action = null;\n\n for (var i = 0; i < actions.length; i++) {\n action = actions[i];\n\n // If the action's request does not match the request's -> skip.\n if (request.element !== action.element) {\n action = null;\n continue;\n }\n\n // If the request and action share the same element, but the request slot\n // for the requested axis is already reserved let's ignore and cancel this\n // request.\n if (isAxisX ? action.requestX : action.requestY) {\n this._cancelItemScroll(request.item, axis);\n return;\n }\n\n // Seems like we have found our action, let's break the loop.\n break;\n }\n\n if (!action) action = this._actionPool.pick();\n action.element = request.element;\n action.addRequest(request);\n\n request.tick(this._tickDeltaTime);\n actions.push(action);\n};\n\nAutoScroller.prototype._updateActions = function () {\n var items = this._items;\n var requests = this._requests;\n var actions = this._actions;\n var itemId;\n var reqX;\n var reqY;\n var i;\n\n // Generate actions.\n for (i = 0; i < items.length; i++) {\n itemId = items[i]._id;\n reqX = requests[AXIS_X][itemId];\n reqY = requests[AXIS_Y][itemId];\n if (reqX) this._requestAction(reqX, AXIS_X);\n if (reqY) this._requestAction(reqY, AXIS_Y);\n }\n\n // Compute actions' scroll values.\n for (i = 0; i < actions.length; i++) {\n actions[i].computeScrollValues();\n }\n};\n\nAutoScroller.prototype._applyActions = function () {\n var actions = this._actions;\n var items = this._items;\n var i;\n\n // No actions -> no scrolling.\n if (!actions.length) return;\n\n // Scroll all the required elements.\n for (i = 0; i < actions.length; i++) {\n actions[i].scroll();\n this._actionPool.release(actions[i]);\n }\n\n // Reset actions.\n actions.length = 0;\n\n // Sync the item position immediately after all the auto-scrolling business is\n // finished. Without this procedure the items will jitter during auto-scroll\n // (in some cases at least) since the drag scroll handler is async (bound to\n // raf tick). Note that this procedure should not emit any dragScroll events,\n // because otherwise they would be emitted twice for the same event.\n for (i = 0; i < items.length; i++) prepareItemScrollSync(items[i]);\n for (i = 0; i < items.length; i++) applyItemScrollSync(items[i]);\n};\n\nAutoScroller.prototype._updateDragDirection = function (item) {\n var dragPositions = this._dragPositions[item._id];\n var dragDirections = this._dragDirections[item._id];\n var x1 = item._drag._left;\n var y1 = item._drag._top;\n if (dragPositions.length) {\n var x2 = dragPositions[0];\n var y2 = dragPositions[1];\n dragDirections[0] = x1 > x2 ? RIGHT : x1 < x2 ? LEFT : dragDirections[0] || 0;\n dragDirections[1] = y1 > y2 ? DOWN : y1 < y2 ? UP : dragDirections[1] || 0;\n }\n dragPositions[0] = x1;\n dragPositions[1] = y1;\n};\n\nAutoScroller.prototype.addItem = function (item) {\n if (this._isDestroyed) return;\n var index = this._items.indexOf(item);\n if (index === -1) {\n this._items.push(item);\n this._requestOverlapCheck[item._id] = this._tickTime;\n this._dragDirections[item._id] = [0, 0];\n this._dragPositions[item._id] = [];\n if (!this._isTicking) this._startTicking();\n }\n};\n\nAutoScroller.prototype.updateItem = function (item) {\n if (this._isDestroyed) return;\n\n // Make sure the item still exists in the auto-scroller.\n if (!this._dragDirections[item._id]) return;\n\n this._updateDragDirection(item);\n if (!this._requestOverlapCheck[item._id]) {\n this._requestOverlapCheck[item._id] = this._tickTime;\n }\n};\n\nAutoScroller.prototype.removeItem = function (item) {\n if (this._isDestroyed) return;\n\n var index = this._items.indexOf(item);\n if (index === -1) return;\n\n var itemId = item._id;\n\n var reqX = this._requests[AXIS_X][itemId];\n if (reqX) {\n this._cancelItemScroll(item, AXIS_X);\n delete this._requests[AXIS_X][itemId];\n }\n\n var reqY = this._requests[AXIS_Y][itemId];\n if (reqY) {\n this._cancelItemScroll(item, AXIS_Y);\n delete this._requests[AXIS_Y][itemId];\n }\n\n delete this._requestOverlapCheck[itemId];\n delete this._dragPositions[itemId];\n delete this._dragDirections[itemId];\n this._items.splice(index, 1);\n\n if (this._isTicking && !this._items.length) {\n this._stopTicking();\n }\n};\n\nAutoScroller.prototype.isItemScrollingX = function (item) {\n var reqX = this._requests[AXIS_X][item._id];\n return !!(reqX && reqX.isActive);\n};\n\nAutoScroller.prototype.isItemScrollingY = function (item) {\n var reqY = this._requests[AXIS_Y][item._id];\n return !!(reqY && reqY.isActive);\n};\n\nAutoScroller.prototype.isItemScrolling = function (item) {\n return this.isItemScrollingX(item) || this.isItemScrollingY(item);\n};\n\nAutoScroller.prototype.destroy = function () {\n if (this._isDestroyed) return;\n\n var items = this._items.slice(0);\n for (var i = 0; i < items.length; i++) {\n this.removeItem(items[i]);\n }\n\n this._actions.length = 0;\n this._requestPool.reset();\n this._actionPool.reset();\n\n this._isDestroyed = true;\n};\n\nvar ElProto = window.Element.prototype;\nvar matchesFn =\n ElProto.matches ||\n ElProto.matchesSelector ||\n ElProto.webkitMatchesSelector ||\n ElProto.mozMatchesSelector ||\n ElProto.msMatchesSelector ||\n ElProto.oMatchesSelector ||\n function () {\n return false;\n };\n\n/**\n * Check if element matches a CSS selector.\n *\n * @param {Element} el\n * @param {String} selector\n * @returns {Boolean}\n */\nfunction elementMatches(el, selector) {\n return matchesFn.call(el, selector);\n}\n\n/**\n * Add class to an element.\n *\n * @param {HTMLElement} element\n * @param {String} className\n */\nfunction addClass(element, className) {\n if (!className) return;\n\n if (element.classList) {\n element.classList.add(className);\n } else {\n if (!elementMatches(element, '.' + className)) {\n element.className += ' ' + className;\n }\n }\n}\n\nvar tempArray = [];\nvar numberType = 'number';\n\n/**\n * Insert an item or an array of items to array to a specified index. Mutates\n * the array. The index can be negative in which case the items will be added\n * to the end of the array.\n *\n * @param {Array} array\n * @param {*} items\n * @param {Number} [index=-1]\n */\nfunction arrayInsert(array, items, index) {\n var startIndex = typeof index === numberType ? index : -1;\n if (startIndex < 0) startIndex = array.length - startIndex + 1;\n\n array.splice.apply(array, tempArray.concat(startIndex, 0, items));\n tempArray.length = 0;\n}\n\n/**\n * Normalize array index. Basically this function makes sure that the provided\n * array index is within the bounds of the provided array and also transforms\n * negative index to the matching positive index. The third (optional) argument\n * allows you to define offset for array's length in case you are adding items\n * to the array or removing items from the array.\n *\n * @param {Array} array\n * @param {Number} index\n * @param {Number} [sizeOffset]\n */\nfunction normalizeArrayIndex(array, index, sizeOffset) {\n var maxIndex = Math.max(0, array.length - 1 + (sizeOffset || 0));\n return index > maxIndex ? maxIndex : index < 0 ? Math.max(maxIndex + index + 1, 0) : index;\n}\n\n/**\n * Move array item to another index.\n *\n * @param {Array} array\n * @param {Number} fromIndex\n * - Index (positive or negative) of the item that will be moved.\n * @param {Number} toIndex\n * - Index (positive or negative) where the item should be moved to.\n */\nfunction arrayMove(array, fromIndex, toIndex) {\n // Make sure the array has two or more items.\n if (array.length < 2) return;\n\n // Normalize the indices.\n var from = normalizeArrayIndex(array, fromIndex);\n var to = normalizeArrayIndex(array, toIndex);\n\n // Add target item to the new position.\n if (from !== to) {\n array.splice(to, 0, array.splice(from, 1)[0]);\n }\n}\n\n/**\n * Swap array items.\n *\n * @param {Array} array\n * @param {Number} index\n * - Index (positive or negative) of the item that will be swapped.\n * @param {Number} withIndex\n * - Index (positive or negative) of the other item that will be swapped.\n */\nfunction arraySwap(array, index, withIndex) {\n // Make sure the array has two or more items.\n if (array.length < 2) return;\n\n // Normalize the indices.\n var indexA = normalizeArrayIndex(array, index);\n var indexB = normalizeArrayIndex(array, withIndex);\n var temp;\n\n // Swap the items.\n if (indexA !== indexB) {\n temp = array[indexA];\n array[indexA] = array[indexB];\n array[indexB] = temp;\n }\n}\n\nvar transformProp = getPrefixedPropName(document.documentElement.style, 'transform') || 'transform';\n\nvar styleNameRegEx = /([A-Z])/g;\nvar prefixRegex = /^(webkit-|moz-|ms-|o-)/;\nvar msPrefixRegex = /^(-m-s-)/;\n\n/**\n * Transforms a camel case style property to kebab case style property. Handles\n * vendor prefixed properties elegantly as well, e.g. \"WebkitTransform\" and\n * \"webkitTransform\" are both transformed into \"-webkit-transform\".\n *\n * @param {String} property\n * @returns {String}\n */\nfunction getStyleName(property) {\n // Initial slicing, turns \"fooBarProp\" into \"foo-bar-prop\".\n var styleName = property.replace(styleNameRegEx, '-$1').toLowerCase();\n\n // Handle properties that start with \"webkit\", \"moz\", \"ms\" or \"o\" prefix (we\n // need to add an extra '-' to the beginnig).\n styleName = styleName.replace(prefixRegex, '-$1');\n\n // Handle properties that start with \"MS\" prefix (we need to transform the\n // \"-m-s-\" into \"-ms-\").\n styleName = styleName.replace(msPrefixRegex, '-ms-');\n\n return styleName;\n}\n\nvar transformStyle = getStyleName(transformProp);\n\nvar transformNone$1 = 'none';\nvar displayInline = 'inline';\nvar displayNone = 'none';\nvar displayStyle = 'display';\n\n/**\n * Returns true if element is transformed, false if not. In practice the\n * element's display value must be anything else than \"none\" or \"inline\" as\n * well as have a valid transform value applied in order to be counted as a\n * transformed element.\n *\n * Borrowed from Mezr (v0.6.1):\n * https://github.com/niklasramo/mezr/blob/0.6.1/mezr.js#L661\n *\n * @param {HTMLElement} element\n * @returns {Boolean}\n */\nfunction isTransformed(element) {\n var transform = getStyle(element, transformStyle);\n if (!transform || transform === transformNone$1) return false;\n\n var display = getStyle(element, displayStyle);\n if (display === displayInline || display === displayNone) return false;\n\n return true;\n}\n\n/**\n * Returns an absolute positioned element's containing block, which is\n * considered to be the closest ancestor element that the target element's\n * positioning is relative to. Disclaimer: this only works as intended for\n * absolute positioned elements.\n *\n * @param {HTMLElement} element\n * @returns {(Document|Element)}\n */\nfunction getContainingBlock(element) {\n // As long as the containing block is an element, static and not\n // transformed, try to get the element's parent element and fallback to\n // document. https://github.com/niklasramo/mezr/blob/0.6.1/mezr.js#L339\n var doc = document;\n var res = element || doc;\n while (res && res !== doc && getStyle(res, 'position') === 'static' && !isTransformed(res)) {\n res = res.parentElement || doc;\n }\n return res;\n}\n\nvar offsetA = {};\nvar offsetB = {};\nvar offsetDiff = {};\n\n/**\n * Returns the element's document offset, which in practice means the vertical\n * and horizontal distance between the element's northwest corner and the\n * document's northwest corner. Note that this function always returns the same\n * object so be sure to read the data from it instead using it as a reference.\n *\n * @param {(Document|Element|Window)} element\n * @param {Object} [offsetData]\n * - Optional data object where the offset data will be inserted to. If not\n * provided a new object will be created for the return data.\n * @returns {Object}\n */\nfunction getOffset(element, offsetData) {\n var offset = offsetData || {};\n var rect;\n\n // Set up return data.\n offset.left = 0;\n offset.top = 0;\n\n // Document's offsets are always 0.\n if (element === document) return offset;\n\n // Add viewport scroll left/top to the respective offsets.\n offset.left = window.pageXOffset || 0;\n offset.top = window.pageYOffset || 0;\n\n // Window's offsets are the viewport scroll left/top values.\n if (element.self === window.self) return offset;\n\n // Add element's client rects to the offsets.\n rect = element.getBoundingClientRect();\n offset.left += rect.left;\n offset.top += rect.top;\n\n // Exclude element's borders from the offset.\n offset.left += getStyleAsFloat(element, 'border-left-width');\n offset.top += getStyleAsFloat(element, 'border-top-width');\n\n return offset;\n}\n\n/**\n * Calculate the offset difference two elements.\n *\n * @param {HTMLElement} elemA\n * @param {HTMLElement} elemB\n * @param {Boolean} [compareContainingBlocks=false]\n * - When this is set to true the containing blocks of the provided elements\n * will be used for calculating the difference. Otherwise the provided\n * elements will be compared directly.\n * @returns {Object}\n */\nfunction getOffsetDiff(elemA, elemB, compareContainingBlocks) {\n offsetDiff.left = 0;\n offsetDiff.top = 0;\n\n // If elements are same let's return early.\n if (elemA === elemB) return offsetDiff;\n\n // Compare containing blocks if necessary.\n if (compareContainingBlocks) {\n elemA = getContainingBlock(elemA);\n elemB = getContainingBlock(elemB);\n\n // If containing blocks are identical, let's return early.\n if (elemA === elemB) return offsetDiff;\n }\n\n // Finally, let's calculate the offset diff.\n getOffset(elemA, offsetA);\n getOffset(elemB, offsetB);\n offsetDiff.left = offsetB.left - offsetA.left;\n offsetDiff.top = offsetB.top - offsetA.top;\n\n return offsetDiff;\n}\n\n/**\n * Check if overflow style value is scrollable.\n *\n * @param {String} value\n * @returns {Boolean}\n */\nfunction isScrollableOverflow(value) {\n return value === 'auto' || value === 'scroll' || value === 'overlay';\n}\n\n/**\n * Check if an element is scrollable.\n *\n * @param {HTMLElement} element\n * @returns {Boolean}\n */\nfunction isScrollable(element) {\n return (\n isScrollableOverflow(getStyle(element, 'overflow')) ||\n isScrollableOverflow(getStyle(element, 'overflow-x')) ||\n isScrollableOverflow(getStyle(element, 'overflow-y'))\n );\n}\n\n/**\n * Collect element's ancestors that are potentially scrollable elements. The\n * provided element is also also included in the check, meaning that if it is\n * scrollable it is added to the result array.\n *\n * @param {HTMLElement} element\n * @param {Array} [result]\n * @returns {Array}\n */\nfunction getScrollableAncestors(element, result) {\n result = result || [];\n\n // Find scroll parents.\n while (element && element !== document) {\n // If element is inside ShadowDOM let's get it's host node from the real\n // DOM and continue looping.\n if (element.getRootNode && element instanceof DocumentFragment) {\n element = element.getRootNode().host;\n continue;\n }\n\n // If element is scrollable let's add it to the scrollable list.\n if (isScrollable(element)) {\n result.push(element);\n }\n\n element = element.parentNode;\n }\n\n // Always add window to the results.\n result.push(window);\n\n return result;\n}\n\nvar translateValue = {};\nvar transformNone = 'none';\nvar rxMat3d = /^matrix3d/;\nvar rxMatTx = /([^,]*,){4}/;\nvar rxMat3dTx = /([^,]*,){12}/;\nvar rxNextItem = /[^,]*,/;\n\n/**\n * Returns the element's computed translateX and translateY values as a floats.\n * The returned object is always the same object and updated every time this\n * function is called.\n *\n * @param {HTMLElement} element\n * @returns {Object}\n */\nfunction getTranslate(element) {\n translateValue.x = 0;\n translateValue.y = 0;\n\n var transform = getStyle(element, transformStyle);\n if (!transform || transform === transformNone) {\n return translateValue;\n }\n\n // Transform style can be in either matrix3d(...) or matrix(...).\n var isMat3d = rxMat3d.test(transform);\n var tX = transform.replace(isMat3d ? rxMat3dTx : rxMatTx, '');\n var tY = tX.replace(rxNextItem, '');\n\n translateValue.x = parseFloat(tX) || 0;\n translateValue.y = parseFloat(tY) || 0;\n\n return translateValue;\n}\n\n/**\n * Remove class from an element.\n *\n * @param {HTMLElement} element\n * @param {String} className\n */\nfunction removeClass(element, className) {\n if (!className) return;\n\n if (element.classList) {\n element.classList.remove(className);\n } else {\n if (elementMatches(element, '.' + className)) {\n element.className = (' ' + element.className + ' ')\n .replace(' ' + className + ' ', ' ')\n .trim();\n }\n }\n}\n\nvar IS_IOS =\n /^(iPad|iPhone|iPod)/.test(window.navigator.platform) ||\n (/^Mac/.test(window.navigator.platform) && window.navigator.maxTouchPoints > 1);\nvar START_PREDICATE_INACTIVE = 0;\nvar START_PREDICATE_PENDING = 1;\nvar START_PREDICATE_RESOLVED = 2;\nvar SCROLL_LISTENER_OPTIONS = hasPassiveEvents() ? { passive: true } : false;\n\n/**\n * Bind touch interaction to an item.\n *\n * @class\n * @param {Item} item\n */\nfunction ItemDrag(item) {\n var element = item._element;\n var grid = item.getGrid();\n var settings = grid._settings;\n\n this._item = item;\n this._gridId = grid._id;\n this._isDestroyed = false;\n this._isMigrating = false;\n\n // Start predicate data.\n this._startPredicate = isFunction(settings.dragStartPredicate)\n ? settings.dragStartPredicate\n : ItemDrag.defaultStartPredicate;\n this._startPredicateState = START_PREDICATE_INACTIVE;\n this._startPredicateResult = undefined;\n\n // Data for drag sort predicate heuristics.\n this._isSortNeeded = false;\n this._sortTimer = undefined;\n this._blockedSortIndex = null;\n this._sortX1 = 0;\n this._sortX2 = 0;\n this._sortY1 = 0;\n this._sortY2 = 0;\n\n // Setup item's initial drag data.\n this._reset();\n\n // Bind the methods that needs binding.\n this._preStartCheck = this._preStartCheck.bind(this);\n this._preEndCheck = this._preEndCheck.bind(this);\n this._onScroll = this._onScroll.bind(this);\n this._prepareStart = this._prepareStart.bind(this);\n this._applyStart = this._applyStart.bind(this);\n this._prepareMove = this._prepareMove.bind(this);\n this._applyMove = this._applyMove.bind(this);\n this._prepareScroll = this._prepareScroll.bind(this);\n this._applyScroll = this._applyScroll.bind(this);\n this._handleSort = this._handleSort.bind(this);\n this._handleSortDelayed = this._handleSortDelayed.bind(this);\n\n // Get drag handle element.\n this._handle = (settings.dragHandle && element.querySelector(settings.dragHandle)) || element;\n\n // Init dragger.\n this._dragger = new Dragger(this._handle, settings.dragCssProps);\n this._dragger.on('start', this._preStartCheck);\n this._dragger.on('move', this._preStartCheck);\n this._dragger.on('cancel', this._preEndCheck);\n this._dragger.on('end', this._preEndCheck);\n}\n\n/**\n * Public properties\n * *****************\n */\n\n/**\n * @public\n * @static\n * @type {AutoScroller}\n */\nItemDrag.autoScroller = new AutoScroller();\n\n/**\n * Public static methods\n * *********************\n */\n\n/**\n * Default drag start predicate handler that handles anchor elements\n * gracefully. The return value of this function defines if the drag is\n * started, rejected or pending. When true is returned the dragging is started\n * and when false is returned the dragging is rejected. If nothing is returned\n * the predicate will be called again on the next drag movement.\n *\n * @public\n * @static\n * @param {Item} item\n * @param {Object} event\n * @param {Object} [options]\n * - An optional options object which can be used to pass the predicate\n * it's options manually. By default the predicate retrieves the options\n * from the grid's settings.\n * @returns {(Boolean|undefined)}\n */\nItemDrag.defaultStartPredicate = function (item, event, options) {\n var drag = item._drag;\n\n // Make sure left button is pressed on mouse.\n if (event.isFirst && event.srcEvent.button) {\n return false;\n }\n\n // If the start event is trusted, non-cancelable and it's default action has\n // not been prevented it is in most cases a sign that the gesture would be\n // cancelled anyways right after it has started (e.g. starting drag while\n // the page is scrolling).\n if (\n !IS_IOS &&\n event.isFirst &&\n event.srcEvent.isTrusted === true &&\n event.srcEvent.defaultPrevented === false &&\n event.srcEvent.cancelable === false\n ) {\n return false;\n }\n\n // Final event logic. At this stage return value does not matter anymore,\n // the predicate is either resolved or it's not and there's nothing to do\n // about it. Here we just reset data and if the item element is a link\n // we follow it (if there has only been slight movement).\n if (event.isFinal) {\n drag._finishStartPredicate(event);\n return;\n }\n\n // Setup predicate data from options if not already set.\n var predicate = drag._startPredicateData;\n if (!predicate) {\n var config = options || drag._getGrid()._settings.dragStartPredicate || {};\n drag._startPredicateData = predicate = {\n distance: Math.max(config.distance, 0) || 0,\n delay: Math.max(config.delay, 0) || 0,\n };\n }\n\n // If delay is defined let's keep track of the latest event and initiate\n // delay if it has not been done yet.\n if (predicate.delay) {\n predicate.event = event;\n if (!predicate.delayTimer) {\n predicate.delayTimer = window.setTimeout(function () {\n predicate.delay = 0;\n if (drag._resolveStartPredicate(predicate.event)) {\n drag._forceResolveStartPredicate(predicate.event);\n drag._resetStartPredicate();\n }\n }, predicate.delay);\n }\n }\n\n return drag._resolveStartPredicate(event);\n};\n\n/**\n * Default drag sort predicate.\n *\n * @public\n * @static\n * @param {Item} item\n * @param {Object} [options]\n * @param {Number} [options.threshold=50]\n * @param {String} [options.action='move']\n * @returns {?Object}\n * - Returns `null` if no valid index was found. Otherwise returns drag sort\n * command.\n */\nItemDrag.defaultSortPredicate = (function () {\n var itemRect = {};\n var targetRect = {};\n var returnData = {};\n var gridsArray = [];\n var minThreshold = 1;\n var maxThreshold = 100;\n\n function getTargetGrid(item, rootGrid, threshold) {\n var target = null;\n var dragSort = rootGrid._settings.dragSort;\n var bestScore = -1;\n var gridScore;\n var grids;\n var grid;\n var container;\n var containerRect;\n var left;\n var top;\n var right;\n var bottom;\n var i;\n\n // Get potential target grids.\n if (dragSort === true) {\n gridsArray[0] = rootGrid;\n grids = gridsArray;\n } else if (isFunction(dragSort)) {\n grids = dragSort.call(rootGrid, item);\n }\n\n // Return immediately if there are no grids.\n if (!grids || !Array.isArray(grids) || !grids.length) {\n return target;\n }\n\n // Loop through the grids and get the best match.\n for (i = 0; i < grids.length; i++) {\n grid = grids[i];\n\n // Filter out all destroyed grids.\n if (grid._isDestroyed) continue;\n\n // Compute the grid's client rect an clamp the initial boundaries to\n // viewport dimensions.\n grid._updateBoundingRect();\n left = Math.max(0, grid._left);\n top = Math.max(0, grid._top);\n right = Math.min(window.innerWidth, grid._right);\n bottom = Math.min(window.innerHeight, grid._bottom);\n\n // The grid might be inside one or more elements that clip it's visibility\n // (e.g overflow scroll/hidden) so we want to find out the visible portion\n // of the grid in the viewport and use that in our calculations.\n container = grid._element.parentNode;\n while (\n container &&\n container !== document &&\n container !== document.documentElement &&\n container !== document.body\n ) {\n if (container.getRootNode && container instanceof DocumentFragment) {\n container = container.getRootNode().host;\n continue;\n }\n\n if (getStyle(container, 'overflow') !== 'visible') {\n containerRect = container.getBoundingClientRect();\n left = Math.max(left, containerRect.left);\n top = Math.max(top, containerRect.top);\n right = Math.min(right, containerRect.right);\n bottom = Math.min(bottom, containerRect.bottom);\n }\n\n if (getStyle(container, 'position') === 'fixed') {\n break;\n }\n\n container = container.parentNode;\n }\n\n // No need to go further if target rect does not have visible area.\n if (left >= right || top >= bottom) continue;\n\n // Check how much dragged element overlaps the container element.\n targetRect.left = left;\n targetRect.top = top;\n targetRect.width = right - left;\n targetRect.height = bottom - top;\n gridScore = getIntersectionScore(itemRect, targetRect);\n\n // Check if this grid is the best match so far.\n if (gridScore > threshold && gridScore > bestScore) {\n bestScore = gridScore;\n target = grid;\n }\n }\n\n // Always reset grids array.\n gridsArray.length = 0;\n\n return target;\n }\n\n return function (item, options) {\n var drag = item._drag;\n var rootGrid = drag._getGrid();\n\n // Get drag sort predicate settings.\n var sortThreshold = options && typeof options.threshold === 'number' ? options.threshold : 50;\n var sortAction = options && options.action === ACTION_SWAP ? ACTION_SWAP : ACTION_MOVE;\n var migrateAction =\n options && options.migrateAction === ACTION_SWAP ? ACTION_SWAP : ACTION_MOVE;\n\n // Sort threshold must be a positive number capped to a max value of 100. If\n // that's not the case this function will not work correctly. So let's clamp\n // the threshold just in case.\n sortThreshold = Math.min(Math.max(sortThreshold, minThreshold), maxThreshold);\n\n // Populate item rect data.\n itemRect.width = item._width;\n itemRect.height = item._height;\n itemRect.left = drag._clientX;\n itemRect.top = drag._clientY;\n\n // Calculate the target grid.\n var grid = getTargetGrid(item, rootGrid, sortThreshold);\n\n // Return early if we found no grid container element that overlaps the\n // dragged item enough.\n if (!grid) return null;\n\n var isMigration = item.getGrid() !== grid;\n var gridOffsetLeft = 0;\n var gridOffsetTop = 0;\n var matchScore = 0;\n var matchIndex = -1;\n var hasValidTargets = false;\n var target;\n var score;\n var i;\n\n // If item is moved within it's originating grid adjust item's left and\n // top props. Otherwise if item is moved to/within another grid get the\n // container element's offset (from the element's content edge).\n if (grid === rootGrid) {\n itemRect.left = drag._gridX + item._marginLeft;\n itemRect.top = drag._gridY + item._marginTop;\n } else {\n grid._updateBorders(1, 0, 1, 0);\n gridOffsetLeft = grid._left + grid._borderLeft;\n gridOffsetTop = grid._top + grid._borderTop;\n }\n\n // Loop through the target grid items and try to find the best match.\n for (i = 0; i < grid._items.length; i++) {\n target = grid._items[i];\n\n // If the target item is not active or the target item is the dragged\n // item let's skip to the next item.\n if (!target._isActive || target === item) {\n continue;\n }\n\n // Mark the grid as having valid target items.\n hasValidTargets = true;\n\n // Calculate the target's overlap score with the dragged item.\n targetRect.width = target._width;\n targetRect.height = target._height;\n targetRect.left = target._left + target._marginLeft + gridOffsetLeft;\n targetRect.top = target._top + target._marginTop + gridOffsetTop;\n score = getIntersectionScore(itemRect, targetRect);\n\n // Update best match index and score if the target's overlap score with\n // the dragged item is higher than the current best match score.\n if (score > matchScore) {\n matchIndex = i;\n matchScore = score;\n }\n }\n\n // If there is no valid match and the dragged item is being moved into\n // another grid we need to do some guess work here. If there simply are no\n // valid targets (which means that the dragged item will be the only active\n // item in the new grid) we can just add it as the first item. If we have\n // valid items in the new grid and the dragged item is overlapping one or\n // more of the items in the new grid let's make an exception with the\n // threshold and just pick the item which the dragged item is overlapping\n // most. However, if the dragged item is not overlapping any of the valid\n // items in the new grid let's position it as the last item in the grid.\n if (isMigration && matchScore < sortThreshold) {\n matchIndex = hasValidTargets ? matchIndex : 0;\n matchScore = sortThreshold;\n }\n\n // Check if the best match overlaps enough to justify a placement switch.\n if (matchScore >= sortThreshold) {\n returnData.grid = grid;\n returnData.index = matchIndex;\n returnData.action = isMigration ? migrateAction : sortAction;\n return returnData;\n }\n\n return null;\n };\n})();\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Abort dragging and reset drag data.\n *\n * @public\n */\nItemDrag.prototype.stop = function () {\n if (!this._isActive) return;\n\n // If the item is being dropped into another grid, finish it up and return\n // immediately.\n if (this._isMigrating) {\n this._finishMigration();\n return;\n }\n\n var item = this._item;\n var itemId = item._id;\n\n // Stop auto-scroll.\n ItemDrag.autoScroller.removeItem(item);\n\n // Cancel queued ticks.\n cancelDragStartTick(itemId);\n cancelDragMoveTick(itemId);\n cancelDragScrollTick(itemId);\n\n // Cancel sort procedure.\n this._cancelSort();\n\n if (this._isStarted) {\n // Remove scroll listeners.\n this._unbindScrollListeners();\n\n var element = item._element;\n var grid = this._getGrid();\n var draggingClass = grid._settings.itemDraggingClass;\n\n // Append item element to the container if it's not it's child. Also make\n // sure the translate values are adjusted to account for the DOM shift.\n if (element.parentNode !== grid._element) {\n grid._element.appendChild(element);\n item._setTranslate(this._gridX, this._gridY);\n\n // We need to do forced reflow to make sure the dragging class is removed\n // gracefully.\n // eslint-disable-next-line\n if (draggingClass) element.clientWidth;\n }\n\n // Remove dragging class.\n removeClass(element, draggingClass);\n }\n\n // Reset drag data.\n this._reset();\n};\n\n/**\n * Manually trigger drag sort. This is only needed for special edge cases where\n * e.g. you have disabled sort and want to trigger a sort right after enabling\n * it (and don't want to wait for the next move/scroll event).\n *\n * @private\n * @param {Boolean} [force=false]\n */\nItemDrag.prototype.sort = function (force) {\n var item = this._item;\n if (this._isActive && item._isActive && this._dragMoveEvent) {\n if (force === true) {\n this._handleSort();\n } else {\n addDragSortTick(item._id, this._handleSort);\n }\n }\n};\n\n/**\n * Destroy instance.\n *\n * @public\n */\nItemDrag.prototype.destroy = function () {\n if (this._isDestroyed) return;\n this.stop();\n this._dragger.destroy();\n ItemDrag.autoScroller.removeItem(this._item);\n this._isDestroyed = true;\n};\n\n/**\n * Private prototype methods\n * *************************\n */\n\n/**\n * Get Grid instance.\n *\n * @private\n * @returns {?Grid}\n */\nItemDrag.prototype._getGrid = function () {\n return GRID_INSTANCES[this._gridId] || null;\n};\n\n/**\n * Setup/reset drag data.\n *\n * @private\n */\nItemDrag.prototype._reset = function () {\n this._isActive = false;\n this._isStarted = false;\n\n // The dragged item's container element.\n this._container = null;\n\n // The dragged item's containing block.\n this._containingBlock = null;\n\n // Drag/scroll event data.\n this._dragStartEvent = null;\n this._dragMoveEvent = null;\n this._dragPrevMoveEvent = null;\n this._scrollEvent = null;\n\n // All the elements which need to be listened for scroll events during\n // dragging.\n this._scrollers = [];\n\n // The current translateX/translateY position.\n this._left = 0;\n this._top = 0;\n\n // Dragged element's current position within the grid.\n this._gridX = 0;\n this._gridY = 0;\n\n // Dragged element's current offset from window's northwest corner. Does\n // not account for element's margins.\n this._clientX = 0;\n this._clientY = 0;\n\n // Keep track of the clientX/Y diff for scrolling.\n this._scrollDiffX = 0;\n this._scrollDiffY = 0;\n\n // Keep track of the clientX/Y diff for moving.\n this._moveDiffX = 0;\n this._moveDiffY = 0;\n\n // Offset difference between the dragged element's temporary drag\n // container and it's original container.\n this._containerDiffX = 0;\n this._containerDiffY = 0;\n};\n\n/**\n * Bind drag scroll handlers to all scrollable ancestor elements of the\n * dragged element and the drag container element.\n *\n * @private\n */\nItemDrag.prototype._bindScrollListeners = function () {\n var gridContainer = this._getGrid()._element;\n var dragContainer = this._container;\n var scrollers = this._scrollers;\n var gridScrollers;\n var i;\n\n // Get dragged element's scrolling parents.\n scrollers.length = 0;\n getScrollableAncestors(this._item._element.parentNode, scrollers);\n\n // If drag container is defined and it's not the same element as grid\n // container then we need to add the grid container and it's scroll parents\n // to the elements which are going to be listener for scroll events.\n if (dragContainer !== gridContainer) {\n gridScrollers = [];\n getScrollableAncestors(gridContainer, gridScrollers);\n for (i = 0; i < gridScrollers.length; i++) {\n if (scrollers.indexOf(gridScrollers[i]) < 0) {\n scrollers.push(gridScrollers[i]);\n }\n }\n }\n\n // Bind scroll listeners.\n for (i = 0; i < scrollers.length; i++) {\n scrollers[i].addEventListener('scroll', this._onScroll, SCROLL_LISTENER_OPTIONS);\n }\n};\n\n/**\n * Unbind currently bound drag scroll handlers from all scrollable ancestor\n * elements of the dragged element and the drag container element.\n *\n * @private\n */\nItemDrag.prototype._unbindScrollListeners = function () {\n var scrollers = this._scrollers;\n var i;\n\n for (i = 0; i < scrollers.length; i++) {\n scrollers[i].removeEventListener('scroll', this._onScroll, SCROLL_LISTENER_OPTIONS);\n }\n\n scrollers.length = 0;\n};\n\n/**\n * Unbind currently bound drag scroll handlers from all scrollable ancestor\n * elements of the dragged element and the drag container element.\n *\n * @private\n * @param {Object} event\n * @returns {Boolean}\n */\nItemDrag.prototype._resolveStartPredicate = function (event) {\n var predicate = this._startPredicateData;\n if (event.distance < predicate.distance || predicate.delay) return;\n this._resetStartPredicate();\n return true;\n};\n\n/**\n * Forcefully resolve drag start predicate.\n *\n * @private\n * @param {Object} event\n */\nItemDrag.prototype._forceResolveStartPredicate = function (event) {\n if (!this._isDestroyed && this._startPredicateState === START_PREDICATE_PENDING) {\n this._startPredicateState = START_PREDICATE_RESOLVED;\n this._onStart(event);\n }\n};\n\n/**\n * Finalize start predicate.\n *\n * @private\n * @param {Object} event\n */\nItemDrag.prototype._finishStartPredicate = function (event) {\n var element = this._item._element;\n\n // Check if this is a click (very subjective heuristics).\n var isClick = Math.abs(event.deltaX) < 2 && Math.abs(event.deltaY) < 2 && event.deltaTime < 200;\n\n // Reset predicate.\n this._resetStartPredicate();\n\n // If the gesture can be interpreted as click let's try to open the element's\n // href url (if it is an anchor element).\n if (isClick) openAnchorHref(element);\n};\n\n/**\n * Reset drag sort heuristics.\n *\n * @private\n * @param {Number} x\n * @param {Number} y\n */\nItemDrag.prototype._resetHeuristics = function (x, y) {\n this._blockedSortIndex = null;\n this._sortX1 = this._sortX2 = x;\n this._sortY1 = this._sortY2 = y;\n};\n\n/**\n * Run heuristics and return true if overlap check can be performed, and false\n * if it can not.\n *\n * @private\n * @param {Number} x\n * @param {Number} y\n * @returns {Boolean}\n */\nItemDrag.prototype._checkHeuristics = function (x, y) {\n var settings = this._getGrid()._settings.dragSortHeuristics;\n var minDist = settings.minDragDistance;\n\n // Skip heuristics if not needed.\n if (minDist <= 0) {\n this._blockedSortIndex = null;\n return true;\n }\n\n var diffX = x - this._sortX2;\n var diffY = y - this._sortY2;\n\n // If we can't do proper bounce back check make sure that the blocked index\n // is not set.\n var canCheckBounceBack = minDist > 3 && settings.minBounceBackAngle > 0;\n if (!canCheckBounceBack) {\n this._blockedSortIndex = null;\n }\n\n if (Math.abs(diffX) > minDist || Math.abs(diffY) > minDist) {\n // Reset blocked index if angle changed enough. This check requires a\n // minimum value of 3 for minDragDistance to function properly.\n if (canCheckBounceBack) {\n var angle = Math.atan2(diffX, diffY);\n var prevAngle = Math.atan2(this._sortX2 - this._sortX1, this._sortY2 - this._sortY1);\n var deltaAngle = Math.atan2(Math.sin(angle - prevAngle), Math.cos(angle - prevAngle));\n if (Math.abs(deltaAngle) > settings.minBounceBackAngle) {\n this._blockedSortIndex = null;\n }\n }\n\n // Update points.\n this._sortX1 = this._sortX2;\n this._sortY1 = this._sortY2;\n this._sortX2 = x;\n this._sortY2 = y;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * Reset for default drag start predicate function.\n *\n * @private\n */\nItemDrag.prototype._resetStartPredicate = function () {\n var predicate = this._startPredicateData;\n if (predicate) {\n if (predicate.delayTimer) {\n predicate.delayTimer = window.clearTimeout(predicate.delayTimer);\n }\n this._startPredicateData = null;\n }\n};\n\n/**\n * Handle the sorting procedure. Manage drag sort heuristics/interval and\n * check overlap when necessary.\n *\n * @private\n */\nItemDrag.prototype._handleSort = function () {\n if (!this._isActive) return;\n\n var settings = this._getGrid()._settings;\n\n // No sorting when drag sort is disabled. Also, account for the scenario where\n // dragSort is temporarily disabled during drag procedure so we need to reset\n // sort timer heuristics state too.\n if (\n !settings.dragSort ||\n (!settings.dragAutoScroll.sortDuringScroll && ItemDrag.autoScroller.isItemScrolling(this._item))\n ) {\n this._sortX1 = this._sortX2 = this._gridX;\n this._sortY1 = this._sortY2 = this._gridY;\n // We set this to true intentionally so that overlap check would be\n // triggered as soon as possible after sort becomes enabled again.\n this._isSortNeeded = true;\n if (this._sortTimer !== undefined) {\n this._sortTimer = window.clearTimeout(this._sortTimer);\n }\n return;\n }\n\n // If sorting is enabled we always need to run the heuristics check to keep\n // the tracked coordinates updated. We also allow an exception when the sort\n // timer is finished because the heuristics are intended to prevent overlap\n // checks based on the dragged element's immediate movement and a delayed\n // overlap check is valid if it comes through, because it was valid when it\n // was invoked.\n var shouldSort = this._checkHeuristics(this._gridX, this._gridY);\n if (!this._isSortNeeded && !shouldSort) return;\n\n var sortInterval = settings.dragSortHeuristics.sortInterval;\n if (sortInterval <= 0 || this._isSortNeeded) {\n this._isSortNeeded = false;\n if (this._sortTimer !== undefined) {\n this._sortTimer = window.clearTimeout(this._sortTimer);\n }\n this._checkOverlap();\n } else if (this._sortTimer === undefined) {\n this._sortTimer = window.setTimeout(this._handleSortDelayed, sortInterval);\n }\n};\n\n/**\n * Delayed sort handler.\n *\n * @private\n */\nItemDrag.prototype._handleSortDelayed = function () {\n this._isSortNeeded = true;\n this._sortTimer = undefined;\n addDragSortTick(this._item._id, this._handleSort);\n};\n\n/**\n * Cancel and reset sort procedure.\n *\n * @private\n */\nItemDrag.prototype._cancelSort = function () {\n this._isSortNeeded = false;\n if (this._sortTimer !== undefined) {\n this._sortTimer = window.clearTimeout(this._sortTimer);\n }\n cancelDragSortTick(this._item._id);\n};\n\n/**\n * Handle the ending of the drag procedure for sorting.\n *\n * @private\n */\nItemDrag.prototype._finishSort = function () {\n var isSortEnabled = this._getGrid()._settings.dragSort;\n var needsFinalCheck = isSortEnabled && (this._isSortNeeded || this._sortTimer !== undefined);\n this._cancelSort();\n if (needsFinalCheck) this._checkOverlap();\n};\n\n/**\n * Check (during drag) if an item is overlapping other items and based on\n * the configuration layout the items.\n *\n * @private\n */\nItemDrag.prototype._checkOverlap = function () {\n if (!this._isActive) return;\n\n var item = this._item;\n var settings = this._getGrid()._settings;\n var result;\n var currentGrid;\n var currentIndex;\n var targetGrid;\n var targetIndex;\n var targetItem;\n var sortAction;\n var isMigration;\n\n // Get overlap check result.\n if (isFunction(settings.dragSortPredicate)) {\n result = settings.dragSortPredicate(item, this._dragMoveEvent);\n } else {\n result = ItemDrag.defaultSortPredicate(item, settings.dragSortPredicate);\n }\n\n // Let's make sure the result object has a valid index before going further.\n if (!result || typeof result.index !== 'number') return;\n\n sortAction = result.action === ACTION_SWAP ? ACTION_SWAP : ACTION_MOVE;\n currentGrid = item.getGrid();\n targetGrid = result.grid || currentGrid;\n isMigration = currentGrid !== targetGrid;\n currentIndex = currentGrid._items.indexOf(item);\n targetIndex = normalizeArrayIndex(\n targetGrid._items,\n result.index,\n isMigration && sortAction === ACTION_MOVE ? 1 : 0\n );\n\n // Prevent position bounce.\n if (!isMigration && targetIndex === this._blockedSortIndex) {\n return;\n }\n\n // If the item was moved within it's current grid.\n if (!isMigration) {\n // Make sure the target index is not the current index.\n if (currentIndex !== targetIndex) {\n this._blockedSortIndex = currentIndex;\n\n // Do the sort.\n (sortAction === ACTION_SWAP ? arraySwap : arrayMove)(\n currentGrid._items,\n currentIndex,\n targetIndex\n );\n\n // Emit move event.\n if (currentGrid._hasListeners(EVENT_MOVE)) {\n currentGrid._emit(EVENT_MOVE, {\n item: item,\n fromIndex: currentIndex,\n toIndex: targetIndex,\n action: sortAction,\n });\n }\n\n // Layout the grid.\n currentGrid.layout();\n }\n }\n\n // If the item was moved to another grid.\n else {\n this._blockedSortIndex = null;\n\n // Let's fetch the target item when it's still in it's original index.\n targetItem = targetGrid._items[targetIndex];\n\n // Emit beforeSend event.\n if (currentGrid._hasListeners(EVENT_BEFORE_SEND)) {\n currentGrid._emit(EVENT_BEFORE_SEND, {\n item: item,\n fromGrid: currentGrid,\n fromIndex: currentIndex,\n toGrid: targetGrid,\n toIndex: targetIndex,\n });\n }\n\n // Emit beforeReceive event.\n if (targetGrid._hasListeners(EVENT_BEFORE_RECEIVE)) {\n targetGrid._emit(EVENT_BEFORE_RECEIVE, {\n item: item,\n fromGrid: currentGrid,\n fromIndex: currentIndex,\n toGrid: targetGrid,\n toIndex: targetIndex,\n });\n }\n\n // Update item's grid id reference.\n item._gridId = targetGrid._id;\n\n // Update drag instance's migrating indicator.\n this._isMigrating = item._gridId !== this._gridId;\n\n // Move item instance from current grid to target grid.\n currentGrid._items.splice(currentIndex, 1);\n arrayInsert(targetGrid._items, item, targetIndex);\n\n // Reset sort data.\n item._sortData = null;\n\n // Emit send event.\n if (currentGrid._hasListeners(EVENT_SEND)) {\n currentGrid._emit(EVENT_SEND, {\n item: item,\n fromGrid: currentGrid,\n fromIndex: currentIndex,\n toGrid: targetGrid,\n toIndex: targetIndex,\n });\n }\n\n // Emit receive event.\n if (targetGrid._hasListeners(EVENT_RECEIVE)) {\n targetGrid._emit(EVENT_RECEIVE, {\n item: item,\n fromGrid: currentGrid,\n fromIndex: currentIndex,\n toGrid: targetGrid,\n toIndex: targetIndex,\n });\n }\n\n // If the sort action is \"swap\" let's respect it and send the target item\n // (if it exists) from the target grid to the originating grid. This process\n // is done on purpose after the dragged item placed within the target grid\n // so that we can keep this implementation as simple as possible utilizing\n // the existing API.\n if (sortAction === ACTION_SWAP && targetItem && targetItem.isActive()) {\n // Sanity check to make sure that the target item is still part of the\n // target grid. It could have been manipulated in the event handlers.\n if (targetGrid._items.indexOf(targetItem) > -1) {\n targetGrid.send(targetItem, currentGrid, currentIndex, {\n appendTo: this._container || document.body,\n layoutSender: false,\n layoutReceiver: false,\n });\n }\n }\n\n // Layout both grids.\n currentGrid.layout();\n targetGrid.layout();\n }\n};\n\n/**\n * If item is dragged into another grid, finish the migration process\n * gracefully.\n *\n * @private\n */\nItemDrag.prototype._finishMigration = function () {\n var item = this._item;\n var release = item._dragRelease;\n var element = item._element;\n var isActive = item._isActive;\n var targetGrid = item.getGrid();\n var targetGridElement = targetGrid._element;\n var targetSettings = targetGrid._settings;\n var targetContainer = targetSettings.dragContainer || targetGridElement;\n var currentSettings = this._getGrid()._settings;\n var currentContainer = element.parentNode;\n var currentVisClass = isActive\n ? currentSettings.itemVisibleClass\n : currentSettings.itemHiddenClass;\n var nextVisClass = isActive ? targetSettings.itemVisibleClass : targetSettings.itemHiddenClass;\n var translate;\n var offsetDiff;\n\n // Destroy current drag. Note that we need to set the migrating flag to\n // false first, because otherwise we create an infinite loop between this\n // and the drag.stop() method.\n this._isMigrating = false;\n this.destroy();\n\n // Update item class.\n if (currentSettings.itemClass !== targetSettings.itemClass) {\n removeClass(element, currentSettings.itemClass);\n addClass(element, targetSettings.itemClass);\n }\n\n // Update visibility class.\n if (currentVisClass !== nextVisClass) {\n removeClass(element, currentVisClass);\n addClass(element, nextVisClass);\n }\n\n // Move the item inside the target container if it's different than the\n // current container.\n if (targetContainer !== currentContainer) {\n targetContainer.appendChild(element);\n offsetDiff = getOffsetDiff(currentContainer, targetContainer, true);\n translate = getTranslate(element);\n translate.x -= offsetDiff.left;\n translate.y -= offsetDiff.top;\n }\n\n // Update item's cached dimensions.\n item._refreshDimensions();\n\n // Calculate the offset difference between target's drag container (if any)\n // and actual grid container element. We save it later for the release\n // process.\n offsetDiff = getOffsetDiff(targetContainer, targetGridElement, true);\n release._containerDiffX = offsetDiff.left;\n release._containerDiffY = offsetDiff.top;\n\n // Recreate item's drag handler.\n item._drag = targetSettings.dragEnabled ? new ItemDrag(item) : null;\n\n // Adjust the position of the item element if it was moved from a container\n // to another.\n if (targetContainer !== currentContainer) {\n item._setTranslate(translate.x, translate.y);\n }\n\n // Update child element's styles to reflect the current visibility state.\n item._visibility.setStyles(isActive ? targetSettings.visibleStyles : targetSettings.hiddenStyles);\n\n // Start the release.\n release.start();\n};\n\n/**\n * Drag pre-start handler.\n *\n * @private\n * @param {Object} event\n */\nItemDrag.prototype._preStartCheck = function (event) {\n // Let's activate drag start predicate state.\n if (this._startPredicateState === START_PREDICATE_INACTIVE) {\n this._startPredicateState = START_PREDICATE_PENDING;\n }\n\n // If predicate is pending try to resolve it.\n if (this._startPredicateState === START_PREDICATE_PENDING) {\n this._startPredicateResult = this._startPredicate(this._item, event);\n if (this._startPredicateResult === true) {\n this._startPredicateState = START_PREDICATE_RESOLVED;\n this._onStart(event);\n } else if (this._startPredicateResult === false) {\n this._resetStartPredicate(event);\n this._dragger._reset();\n this._startPredicateState = START_PREDICATE_INACTIVE;\n }\n }\n\n // Otherwise if predicate is resolved and drag is active, move the item.\n else if (this._startPredicateState === START_PREDICATE_RESOLVED && this._isActive) {\n this._onMove(event);\n }\n};\n\n/**\n * Drag pre-end handler.\n *\n * @private\n * @param {Object} event\n */\nItemDrag.prototype._preEndCheck = function (event) {\n var isResolved = this._startPredicateState === START_PREDICATE_RESOLVED;\n\n // Do final predicate check to allow user to unbind stuff for the current\n // drag procedure within the predicate callback. The return value of this\n // check will have no effect to the state of the predicate.\n this._startPredicate(this._item, event);\n\n this._startPredicateState = START_PREDICATE_INACTIVE;\n\n if (!isResolved || !this._isActive) return;\n\n if (this._isStarted) {\n this._onEnd(event);\n } else {\n this.stop();\n }\n};\n\n/**\n * Drag start handler.\n *\n * @private\n * @param {Object} event\n */\nItemDrag.prototype._onStart = function (event) {\n var item = this._item;\n if (!item._isActive) return;\n\n this._isActive = true;\n this._dragStartEvent = event;\n ItemDrag.autoScroller.addItem(item);\n\n addDragStartTick(item._id, this._prepareStart, this._applyStart);\n};\n\n/**\n * Prepare item to be dragged.\n *\n * @private\n * ItemDrag.prototype\n */\nItemDrag.prototype._prepareStart = function () {\n if (!this._isActive) return;\n\n var item = this._item;\n if (!item._isActive) return;\n\n var element = item._element;\n var grid = this._getGrid();\n var settings = grid._settings;\n var gridContainer = grid._element;\n var dragContainer = settings.dragContainer || gridContainer;\n var containingBlock = getContainingBlock(dragContainer);\n var translate = getTranslate(element);\n var elementRect = element.getBoundingClientRect();\n var hasDragContainer = dragContainer !== gridContainer;\n\n this._container = dragContainer;\n this._containingBlock = containingBlock;\n this._clientX = elementRect.left;\n this._clientY = elementRect.top;\n this._left = this._gridX = translate.x;\n this._top = this._gridY = translate.y;\n this._scrollDiffX = this._scrollDiffY = 0;\n this._moveDiffX = this._moveDiffY = 0;\n\n this._resetHeuristics(this._gridX, this._gridY);\n\n // If a specific drag container is set and it is different from the\n // grid's container element we store the offset between containers.\n if (hasDragContainer) {\n var offsetDiff = getOffsetDiff(containingBlock, gridContainer);\n this._containerDiffX = offsetDiff.left;\n this._containerDiffY = offsetDiff.top;\n }\n};\n\n/**\n * Start drag for the item.\n *\n * @private\n */\nItemDrag.prototype._applyStart = function () {\n if (!this._isActive) return;\n\n var item = this._item;\n if (!item._isActive) return;\n\n var grid = this._getGrid();\n var element = item._element;\n var release = item._dragRelease;\n var migrate = item._migrate;\n var hasDragContainer = this._container !== grid._element;\n\n if (item.isPositioning()) {\n item._layout.stop(true, this._left, this._top);\n }\n\n if (migrate._isActive) {\n this._left -= migrate._containerDiffX;\n this._top -= migrate._containerDiffY;\n this._gridX -= migrate._containerDiffX;\n this._gridY -= migrate._containerDiffY;\n migrate.stop(true, this._left, this._top);\n }\n\n if (item.isReleasing()) {\n release._reset();\n }\n\n if (grid._settings.dragPlaceholder.enabled) {\n item._dragPlaceholder.create();\n }\n\n this._isStarted = true;\n\n grid._emit(EVENT_DRAG_INIT, item, this._dragStartEvent);\n\n if (hasDragContainer) {\n // If the dragged element is a child of the drag container all we need to\n // do is setup the relative drag position data.\n if (element.parentNode === this._container) {\n this._gridX -= this._containerDiffX;\n this._gridY -= this._containerDiffY;\n }\n // Otherwise we need to append the element inside the correct container,\n // setup the actual drag position data and adjust the element's translate\n // values to account for the DOM position shift.\n else {\n this._left += this._containerDiffX;\n this._top += this._containerDiffY;\n this._container.appendChild(element);\n item._setTranslate(this._left, this._top);\n }\n }\n\n addClass(element, grid._settings.itemDraggingClass);\n this._bindScrollListeners();\n grid._emit(EVENT_DRAG_START, item, this._dragStartEvent);\n};\n\n/**\n * Drag move handler.\n *\n * @private\n * @param {Object} event\n */\nItemDrag.prototype._onMove = function (event) {\n var item = this._item;\n\n if (!item._isActive) {\n this.stop();\n return;\n }\n\n this._dragMoveEvent = event;\n addDragMoveTick(item._id, this._prepareMove, this._applyMove);\n addDragSortTick(item._id, this._handleSort);\n};\n\n/**\n * Prepare dragged item for moving.\n *\n * @private\n */\nItemDrag.prototype._prepareMove = function () {\n if (!this._isActive) return;\n\n var item = this._item;\n if (!item._isActive) return;\n\n var settings = this._getGrid()._settings;\n var axis = settings.dragAxis;\n var nextEvent = this._dragMoveEvent;\n var prevEvent = this._dragPrevMoveEvent || this._dragStartEvent || nextEvent;\n\n // Update horizontal position data.\n if (axis !== 'y') {\n var moveDiffX = nextEvent.clientX - prevEvent.clientX;\n this._left = this._left - this._moveDiffX + moveDiffX;\n this._gridX = this._gridX - this._moveDiffX + moveDiffX;\n this._clientX = this._clientX - this._moveDiffX + moveDiffX;\n this._moveDiffX = moveDiffX;\n }\n\n // Update vertical position data.\n if (axis !== 'x') {\n var moveDiffY = nextEvent.clientY - prevEvent.clientY;\n this._top = this._top - this._moveDiffY + moveDiffY;\n this._gridY = this._gridY - this._moveDiffY + moveDiffY;\n this._clientY = this._clientY - this._moveDiffY + moveDiffY;\n this._moveDiffY = moveDiffY;\n }\n\n this._dragPrevMoveEvent = nextEvent;\n};\n\n/**\n * Apply movement to dragged item.\n *\n * @private\n */\nItemDrag.prototype._applyMove = function () {\n if (!this._isActive) return;\n\n var item = this._item;\n if (!item._isActive) return;\n\n this._moveDiffX = this._moveDiffY = 0;\n item._setTranslate(this._left, this._top);\n this._getGrid()._emit(EVENT_DRAG_MOVE, item, this._dragMoveEvent);\n ItemDrag.autoScroller.updateItem(item);\n};\n\n/**\n * Drag scroll handler.\n *\n * @private\n * @param {Object} event\n */\nItemDrag.prototype._onScroll = function (event) {\n var item = this._item;\n\n if (!item._isActive) {\n this.stop();\n return;\n }\n\n this._scrollEvent = event;\n addDragScrollTick(item._id, this._prepareScroll, this._applyScroll);\n addDragSortTick(item._id, this._handleSort);\n};\n\n/**\n * Prepare dragged item for scrolling.\n *\n * @private\n */\nItemDrag.prototype._prepareScroll = function () {\n if (!this._isActive) return;\n\n // If item is not active do nothing.\n var item = this._item;\n if (!item._isActive) return;\n\n var element = item._element;\n var grid = this._getGrid();\n var gridContainer = grid._element;\n var rect = element.getBoundingClientRect();\n\n // Update container diff.\n if (this._container !== gridContainer) {\n var offsetDiff = getOffsetDiff(this._containingBlock, gridContainer);\n this._containerDiffX = offsetDiff.left;\n this._containerDiffY = offsetDiff.top;\n }\n\n // Update horizontal position data.\n var scrollDiffX = this._clientX - this._moveDiffX - rect.left;\n this._left = this._left - this._scrollDiffX + scrollDiffX;\n this._scrollDiffX = scrollDiffX;\n\n // Update vertical position data.\n var scrollDiffY = this._clientY - this._moveDiffY - rect.top;\n this._top = this._top - this._scrollDiffY + scrollDiffY;\n this._scrollDiffY = scrollDiffY;\n\n // Update grid position.\n this._gridX = this._left - this._containerDiffX;\n this._gridY = this._top - this._containerDiffY;\n};\n\n/**\n * Apply scroll to dragged item.\n *\n * @private\n */\nItemDrag.prototype._applyScroll = function () {\n if (!this._isActive) return;\n\n var item = this._item;\n if (!item._isActive) return;\n\n this._scrollDiffX = this._scrollDiffY = 0;\n item._setTranslate(this._left, this._top);\n this._getGrid()._emit(EVENT_DRAG_SCROLL, item, this._scrollEvent);\n};\n\n/**\n * Drag end handler.\n *\n * @private\n * @param {Object} event\n */\nItemDrag.prototype._onEnd = function (event) {\n var item = this._item;\n var element = item._element;\n var grid = this._getGrid();\n var settings = grid._settings;\n var release = item._dragRelease;\n\n // If item is not active, reset drag.\n if (!item._isActive) {\n this.stop();\n return;\n }\n\n // Cancel queued ticks.\n cancelDragStartTick(item._id);\n cancelDragMoveTick(item._id);\n cancelDragScrollTick(item._id);\n\n // Finish sort procedure (does final overlap check if needed).\n this._finishSort();\n\n // Remove scroll listeners.\n this._unbindScrollListeners();\n\n // Setup release data.\n release._containerDiffX = this._containerDiffX;\n release._containerDiffY = this._containerDiffY;\n\n // Reset drag data.\n this._reset();\n\n // Remove drag class name from element.\n removeClass(element, settings.itemDraggingClass);\n\n // Stop auto-scroll.\n ItemDrag.autoScroller.removeItem(item);\n\n // Emit dragEnd event.\n grid._emit(EVENT_DRAG_END, item, event);\n\n // Finish up the migration process or start the release process.\n this._isMigrating ? this._finishMigration() : release.start();\n};\n\n/**\n * Private helpers\n * ***************\n */\n\n/**\n * Check if an element is an anchor element and open the href url if possible.\n *\n * @param {HTMLElement} element\n */\nfunction openAnchorHref(element) {\n // Make sure the element is anchor element.\n if (element.tagName.toLowerCase() !== 'a') return;\n\n // Get href and make sure it exists.\n var href = element.getAttribute('href');\n if (!href) return;\n\n // Finally let's navigate to the link href.\n var target = element.getAttribute('target');\n if (target && target !== '_self') {\n window.open(href, target);\n } else {\n window.location.href = href;\n }\n}\n\n/**\n * Get current values of the provided styles definition object or array.\n *\n * @param {HTMLElement} element\n * @param {(Object|Array} styles\n * @return {Object}\n */\nfunction getCurrentStyles(element, styles) {\n var result = {};\n var prop, i;\n\n if (Array.isArray(styles)) {\n for (i = 0; i < styles.length; i++) {\n prop = styles[i];\n result[prop] = getStyle(element, getStyleName(prop));\n }\n } else {\n for (prop in styles) {\n result[prop] = getStyle(element, getStyleName(prop));\n }\n }\n\n return result;\n}\n\nvar unprefixRegEx = /^(webkit|moz|ms|o|Webkit|Moz|MS|O)(?=[A-Z])/;\nvar cache = {};\n\n/**\n * Remove any potential vendor prefixes from a property name.\n *\n * @param {String} prop\n * @returns {String}\n */\nfunction getUnprefixedPropName(prop) {\n var result = cache[prop];\n if (result) return result;\n\n result = prop.replace(unprefixRegEx, '');\n\n if (result !== prop) {\n result = result[0].toLowerCase() + result.slice(1);\n }\n\n cache[prop] = result;\n\n return result;\n}\n\nvar nativeCode = '[native code]';\n\n/**\n * Check if a value (e.g. a method or constructor) is native code. Good for\n * detecting when a polyfill is used and when not.\n *\n * @param {*} feat\n * @returns {Boolean}\n */\nfunction isNative(feat) {\n var S = window.Symbol;\n return !!(\n feat &&\n isFunction(S) &&\n isFunction(S.toString) &&\n S(feat).toString().indexOf(nativeCode) > -1\n );\n}\n\n/**\n * Set inline styles to an element.\n *\n * @param {HTMLElement} element\n * @param {Object} styles\n */\nfunction setStyles(element, styles) {\n for (var prop in styles) {\n element.style[prop] = styles[prop];\n }\n}\n\nvar HAS_WEB_ANIMATIONS = !!(Element && isFunction(Element.prototype.animate));\nvar HAS_NATIVE_WEB_ANIMATIONS = !!(Element && isNative(Element.prototype.animate));\n\n/**\n * Item animation handler powered by Web Animations API.\n *\n * @class\n * @param {HTMLElement} element\n */\nfunction Animator(element) {\n this._element = element;\n this._animation = null;\n this._duration = 0;\n this._easing = '';\n this._callback = null;\n this._props = [];\n this._values = [];\n this._isDestroyed = false;\n this._onFinish = this._onFinish.bind(this);\n}\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Start instance's animation. Automatically stops current animation if it is\n * running.\n *\n * @public\n * @param {Object} propsFrom\n * @param {Object} propsTo\n * @param {Object} [options]\n * @param {Number} [options.duration=300]\n * @param {String} [options.easing='ease']\n * @param {Function} [options.onFinish]\n */\nAnimator.prototype.start = function (propsFrom, propsTo, options) {\n if (this._isDestroyed) return;\n\n var element = this._element;\n var opts = options || {};\n\n // If we don't have web animations available let's not animate.\n if (!HAS_WEB_ANIMATIONS) {\n setStyles(element, propsTo);\n this._callback = isFunction(opts.onFinish) ? opts.onFinish : null;\n this._onFinish();\n return;\n }\n\n var animation = this._animation;\n var currentProps = this._props;\n var currentValues = this._values;\n var duration = opts.duration || 300;\n var easing = opts.easing || 'ease';\n var cancelAnimation = false;\n var propName, propCount, propIndex;\n\n // If we have an existing animation running, let's check if it needs to be\n // cancelled or if it can continue running.\n if (animation) {\n propCount = 0;\n\n // Cancel animation if duration or easing has changed.\n if (duration !== this._duration || easing !== this._easing) {\n cancelAnimation = true;\n }\n\n // Check if the requested animation target props and values match with the\n // current props and values.\n if (!cancelAnimation) {\n for (propName in propsTo) {\n ++propCount;\n propIndex = currentProps.indexOf(propName);\n if (propIndex === -1 || propsTo[propName] !== currentValues[propIndex]) {\n cancelAnimation = true;\n break;\n }\n }\n\n // Check if the target props count matches current props count. This is\n // needed for the edge case scenario where target props contain the same\n // styles as current props, but the current props have some additional\n // props.\n if (propCount !== currentProps.length) {\n cancelAnimation = true;\n }\n }\n }\n\n // Cancel animation (if required).\n if (cancelAnimation) animation.cancel();\n\n // Store animation callback.\n this._callback = isFunction(opts.onFinish) ? opts.onFinish : null;\n\n // If we have a running animation that does not need to be cancelled, let's\n // call it a day here and let it run.\n if (animation && !cancelAnimation) return;\n\n // Store target props and values to instance.\n currentProps.length = currentValues.length = 0;\n for (propName in propsTo) {\n currentProps.push(propName);\n currentValues.push(propsTo[propName]);\n }\n\n // Start the animation. We need to provide unprefixed property names to the\n // Web Animations polyfill if it is being used. If we have native Web\n // Animations available we need to provide prefixed properties instead.\n this._duration = duration;\n this._easing = easing;\n this._animation = element.animate(\n [\n createFrame(propsFrom, HAS_NATIVE_WEB_ANIMATIONS),\n createFrame(propsTo, HAS_NATIVE_WEB_ANIMATIONS),\n ],\n {\n duration: duration,\n easing: easing,\n }\n );\n this._animation.onfinish = this._onFinish;\n\n // Set the end styles. This makes sure that the element stays at the end\n // values after animation is finished.\n setStyles(element, propsTo);\n};\n\n/**\n * Stop instance's current animation if running.\n *\n * @public\n */\nAnimator.prototype.stop = function () {\n if (this._isDestroyed || !this._animation) return;\n this._animation.cancel();\n this._animation = this._callback = null;\n this._props.length = this._values.length = 0;\n};\n\n/**\n * Read the current values of the element's animated styles from the DOM.\n *\n * @public\n * @return {Object}\n */\nAnimator.prototype.getCurrentStyles = function () {\n return getCurrentStyles(element, currentProps);\n};\n\n/**\n * Check if the item is being animated currently.\n *\n * @public\n * @return {Boolean}\n */\nAnimator.prototype.isAnimating = function () {\n return !!this._animation;\n};\n\n/**\n * Destroy the instance and stop current animation if it is running.\n *\n * @public\n */\nAnimator.prototype.destroy = function () {\n if (this._isDestroyed) return;\n this.stop();\n this._element = null;\n this._isDestroyed = true;\n};\n\n/**\n * Private prototype methods\n * *************************\n */\n\n/**\n * Animation end handler.\n *\n * @private\n */\nAnimator.prototype._onFinish = function () {\n var callback = this._callback;\n this._animation = this._callback = null;\n this._props.length = this._values.length = 0;\n callback && callback();\n};\n\n/**\n * Private helpers\n * ***************\n */\n\nfunction createFrame(props, prefix) {\n var frame = {};\n for (var prop in props) {\n frame[prefix ? prop : getUnprefixedPropName(prop)] = props[prop];\n }\n return frame;\n}\n\n/**\n * Transform translateX and translateY value into CSS transform style\n * property's value.\n *\n * @param {Number} x\n * @param {Number} y\n * @returns {String}\n */\nfunction getTranslateString(x, y) {\n return 'translateX(' + x + 'px) translateY(' + y + 'px)';\n}\n\n/**\n * Drag placeholder.\n *\n * @class\n * @param {Item} item\n */\nfunction ItemDragPlaceholder(item) {\n this._item = item;\n this._animation = new Animator();\n this._element = null;\n this._className = '';\n this._didMigrate = false;\n this._resetAfterLayout = false;\n this._left = 0;\n this._top = 0;\n this._transX = 0;\n this._transY = 0;\n this._nextTransX = 0;\n this._nextTransY = 0;\n\n // Bind animation handlers.\n this._setupAnimation = this._setupAnimation.bind(this);\n this._startAnimation = this._startAnimation.bind(this);\n this._updateDimensions = this._updateDimensions.bind(this);\n\n // Bind event handlers.\n this._onLayoutStart = this._onLayoutStart.bind(this);\n this._onLayoutEnd = this._onLayoutEnd.bind(this);\n this._onReleaseEnd = this._onReleaseEnd.bind(this);\n this._onMigrate = this._onMigrate.bind(this);\n this._onHide = this._onHide.bind(this);\n}\n\n/**\n * Private prototype methods\n * *************************\n */\n\n/**\n * Update placeholder's dimensions to match the item's dimensions.\n *\n * @private\n */\nItemDragPlaceholder.prototype._updateDimensions = function () {\n if (!this.isActive()) return;\n setStyles(this._element, {\n width: this._item._width + 'px',\n height: this._item._height + 'px',\n });\n};\n\n/**\n * Move placeholder to a new position.\n *\n * @private\n * @param {Item[]} items\n * @param {Boolean} isInstant\n */\nItemDragPlaceholder.prototype._onLayoutStart = function (items, isInstant) {\n var item = this._item;\n\n // If the item is not part of the layout anymore reset placeholder.\n if (items.indexOf(item) === -1) {\n this.reset();\n return;\n }\n\n var nextLeft = item._left;\n var nextTop = item._top;\n var currentLeft = this._left;\n var currentTop = this._top;\n\n // Keep track of item layout position.\n this._left = nextLeft;\n this._top = nextTop;\n\n // If item's position did not change, and the item did not migrate and the\n // layout is not instant and we can safely skip layout.\n if (!isInstant && !this._didMigrate && currentLeft === nextLeft && currentTop === nextTop) {\n return;\n }\n\n // Slots data is calculated with item margins added to them so we need to add\n // item's left and top margin to the slot data to get the placeholder's\n // next position.\n var nextX = nextLeft + item._marginLeft;\n var nextY = nextTop + item._marginTop;\n\n // Just snap to new position without any animations if no animation is\n // required or if placeholder moves between grids.\n var grid = item.getGrid();\n var animEnabled = !isInstant && grid._settings.layoutDuration > 0;\n if (!animEnabled || this._didMigrate) {\n // Cancel potential (queued) layout tick.\n cancelPlaceholderLayoutTick(item._id);\n\n // Snap placeholder to correct position.\n this._element.style[transformProp] = getTranslateString(nextX, nextY);\n this._animation.stop();\n\n // Move placeholder inside correct container after migration.\n if (this._didMigrate) {\n grid.getElement().appendChild(this._element);\n this._didMigrate = false;\n }\n\n return;\n }\n\n // Start the placeholder's layout animation in the next tick. We do this to\n // avoid layout thrashing.\n this._nextTransX = nextX;\n this._nextTransY = nextY;\n addPlaceholderLayoutTick(item._id, this._setupAnimation, this._startAnimation);\n};\n\n/**\n * Prepare placeholder for layout animation.\n *\n * @private\n */\nItemDragPlaceholder.prototype._setupAnimation = function () {\n if (!this.isActive()) return;\n\n var translate = getTranslate(this._element);\n this._transX = translate.x;\n this._transY = translate.y;\n};\n\n/**\n * Start layout animation.\n *\n * @private\n */\nItemDragPlaceholder.prototype._startAnimation = function () {\n if (!this.isActive()) return;\n\n var animation = this._animation;\n var currentX = this._transX;\n var currentY = this._transY;\n var nextX = this._nextTransX;\n var nextY = this._nextTransY;\n\n // If placeholder is already in correct position let's just stop animation\n // and be done with it.\n if (currentX === nextX && currentY === nextY) {\n if (animation.isAnimating()) {\n this._element.style[transformProp] = getTranslateString(nextX, nextY);\n animation.stop();\n }\n return;\n }\n\n // Otherwise let's start the animation.\n var settings = this._item.getGrid()._settings;\n var currentStyles = {};\n var targetStyles = {};\n currentStyles[transformProp] = getTranslateString(currentX, currentY);\n targetStyles[transformProp] = getTranslateString(nextX, nextY);\n animation.start(currentStyles, targetStyles, {\n duration: settings.layoutDuration,\n easing: settings.layoutEasing,\n onFinish: this._onLayoutEnd,\n });\n};\n\n/**\n * Layout end handler.\n *\n * @private\n */\nItemDragPlaceholder.prototype._onLayoutEnd = function () {\n if (this._resetAfterLayout) {\n this.reset();\n }\n};\n\n/**\n * Drag end handler. This handler is called when dragReleaseEnd event is\n * emitted and receives the event data as it's argument.\n *\n * @private\n * @param {Item} item\n */\nItemDragPlaceholder.prototype._onReleaseEnd = function (item) {\n if (item._id === this._item._id) {\n // If the placeholder is not animating anymore we can safely reset it.\n if (!this._animation.isAnimating()) {\n this.reset();\n return;\n }\n\n // If the placeholder item is still animating here, let's wait for it to\n // finish it's animation.\n this._resetAfterLayout = true;\n }\n};\n\n/**\n * Migration start handler. This handler is called when beforeSend event is\n * emitted and receives the event data as it's argument.\n *\n * @private\n * @param {Object} data\n * @param {Item} data.item\n * @param {Grid} data.fromGrid\n * @param {Number} data.fromIndex\n * @param {Grid} data.toGrid\n * @param {Number} data.toIndex\n */\nItemDragPlaceholder.prototype._onMigrate = function (data) {\n // Make sure we have a matching item.\n if (data.item !== this._item) return;\n\n var grid = this._item.getGrid();\n var nextGrid = data.toGrid;\n\n // Unbind listeners from current grid.\n grid.off(EVENT_DRAG_RELEASE_END, this._onReleaseEnd);\n grid.off(EVENT_LAYOUT_START, this._onLayoutStart);\n grid.off(EVENT_BEFORE_SEND, this._onMigrate);\n grid.off(EVENT_HIDE_START, this._onHide);\n\n // Bind listeners to the next grid.\n nextGrid.on(EVENT_DRAG_RELEASE_END, this._onReleaseEnd);\n nextGrid.on(EVENT_LAYOUT_START, this._onLayoutStart);\n nextGrid.on(EVENT_BEFORE_SEND, this._onMigrate);\n nextGrid.on(EVENT_HIDE_START, this._onHide);\n\n // Mark the item as migrated.\n this._didMigrate = true;\n};\n\n/**\n * Reset placeholder if the associated item is hidden.\n *\n * @private\n * @param {Item[]} items\n */\nItemDragPlaceholder.prototype._onHide = function (items) {\n if (items.indexOf(this._item) > -1) this.reset();\n};\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Create placeholder. Note that this method only writes to DOM and does not\n * read anything from DOM so it should not cause any additional layout\n * thrashing when it's called at the end of the drag start procedure.\n *\n * @public\n */\nItemDragPlaceholder.prototype.create = function () {\n // If we already have placeholder set up we can skip the initiation logic.\n if (this.isActive()) {\n this._resetAfterLayout = false;\n return;\n }\n\n var item = this._item;\n var grid = item.getGrid();\n var settings = grid._settings;\n var animation = this._animation;\n\n // Keep track of layout position.\n this._left = item._left;\n this._top = item._top;\n\n // Create placeholder element.\n var element;\n if (isFunction(settings.dragPlaceholder.createElement)) {\n element = settings.dragPlaceholder.createElement(item);\n } else {\n element = document.createElement('div');\n }\n this._element = element;\n\n // Update element to animation instance.\n animation._element = element;\n\n // Add placeholder class to the placeholder element.\n this._className = settings.itemPlaceholderClass || '';\n if (this._className) {\n addClass(element, this._className);\n }\n\n // Set initial styles.\n setStyles(element, {\n position: 'absolute',\n left: '0px',\n top: '0px',\n width: item._width + 'px',\n height: item._height + 'px',\n });\n\n // Set initial position.\n element.style[transformProp] = getTranslateString(\n item._left + item._marginLeft,\n item._top + item._marginTop\n );\n\n // Bind event listeners.\n grid.on(EVENT_LAYOUT_START, this._onLayoutStart);\n grid.on(EVENT_DRAG_RELEASE_END, this._onReleaseEnd);\n grid.on(EVENT_BEFORE_SEND, this._onMigrate);\n grid.on(EVENT_HIDE_START, this._onHide);\n\n // onCreate hook.\n if (isFunction(settings.dragPlaceholder.onCreate)) {\n settings.dragPlaceholder.onCreate(item, element);\n }\n\n // Insert the placeholder element to the grid.\n grid.getElement().appendChild(element);\n};\n\n/**\n * Reset placeholder data.\n *\n * @public\n */\nItemDragPlaceholder.prototype.reset = function () {\n if (!this.isActive()) return;\n\n var element = this._element;\n var item = this._item;\n var grid = item.getGrid();\n var settings = grid._settings;\n var animation = this._animation;\n\n // Reset flag.\n this._resetAfterLayout = false;\n\n // Cancel potential (queued) layout tick.\n cancelPlaceholderLayoutTick(item._id);\n cancelPlaceholderResizeTick(item._id);\n\n // Reset animation instance.\n animation.stop();\n animation._element = null;\n\n // Unbind event listeners.\n grid.off(EVENT_DRAG_RELEASE_END, this._onReleaseEnd);\n grid.off(EVENT_LAYOUT_START, this._onLayoutStart);\n grid.off(EVENT_BEFORE_SEND, this._onMigrate);\n grid.off(EVENT_HIDE_START, this._onHide);\n\n // Remove placeholder class from the placeholder element.\n if (this._className) {\n removeClass(element, this._className);\n this._className = '';\n }\n\n // Remove element.\n element.parentNode.removeChild(element);\n this._element = null;\n\n // onRemove hook. Note that here we use the current grid's onRemove callback\n // so if the item has migrated during drag the onRemove method will not be\n // the originating grid's method.\n if (isFunction(settings.dragPlaceholder.onRemove)) {\n settings.dragPlaceholder.onRemove(item, element);\n }\n};\n\n/**\n * Check if placeholder is currently active (visible).\n *\n * @public\n * @returns {Boolean}\n */\nItemDragPlaceholder.prototype.isActive = function () {\n return !!this._element;\n};\n\n/**\n * Get placeholder element.\n *\n * @public\n * @returns {?HTMLElement}\n */\nItemDragPlaceholder.prototype.getElement = function () {\n return this._element;\n};\n\n/**\n * Update placeholder's dimensions to match the item's dimensions. Note that\n * the updating is done asynchronously in the next tick to avoid layout\n * thrashing.\n *\n * @public\n */\nItemDragPlaceholder.prototype.updateDimensions = function () {\n if (!this.isActive()) return;\n addPlaceholderResizeTick(this._item._id, this._updateDimensions);\n};\n\n/**\n * Destroy placeholder instance.\n *\n * @public\n */\nItemDragPlaceholder.prototype.destroy = function () {\n this.reset();\n this._animation.destroy();\n this._item = this._animation = null;\n};\n\n/**\n * The release process handler constructor. Although this might seem as proper\n * fit for the drag process this needs to be separated into it's own logic\n * because there might be a scenario where drag is disabled, but the release\n * process still needs to be implemented (dragging from a grid to another).\n *\n * @class\n * @param {Item} item\n */\nfunction ItemDragRelease(item) {\n this._item = item;\n this._isActive = false;\n this._isDestroyed = false;\n this._isPositioningStarted = false;\n this._containerDiffX = 0;\n this._containerDiffY = 0;\n}\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Start the release process of an item.\n *\n * @public\n */\nItemDragRelease.prototype.start = function () {\n if (this._isDestroyed || this._isActive) return;\n\n var item = this._item;\n var grid = item.getGrid();\n var settings = grid._settings;\n\n this._isActive = true;\n addClass(item._element, settings.itemReleasingClass);\n if (!settings.dragRelease.useDragContainer) {\n this._placeToGrid();\n }\n grid._emit(EVENT_DRAG_RELEASE_START, item);\n\n // Let's start layout manually _only_ if there is no unfinished layout in\n // about to finish.\n if (!grid._nextLayoutData) item._layout.start(false);\n};\n\n/**\n * End the release process of an item. This method can be used to abort an\n * ongoing release process (animation) or finish the release process.\n *\n * @public\n * @param {Boolean} [abort=false]\n * - Should the release be aborted? When true, the release end event won't be\n * emitted. Set to true only when you need to abort the release process\n * while the item is animating to it's position.\n * @param {Number} [left]\n * - The element's current translateX value (optional).\n * @param {Number} [top]\n * - The element's current translateY value (optional).\n */\nItemDragRelease.prototype.stop = function (abort, left, top) {\n if (this._isDestroyed || !this._isActive) return;\n\n var item = this._item;\n var grid = item.getGrid();\n\n if (!abort && (left === undefined || top === undefined)) {\n left = item._left;\n top = item._top;\n }\n\n var didReparent = this._placeToGrid(left, top);\n this._reset(didReparent);\n\n if (!abort) grid._emit(EVENT_DRAG_RELEASE_END, item);\n};\n\nItemDragRelease.prototype.isJustReleased = function () {\n return this._isActive && this._isPositioningStarted === false;\n};\n\n/**\n * Destroy instance.\n *\n * @public\n */\nItemDragRelease.prototype.destroy = function () {\n if (this._isDestroyed) return;\n this.stop(true);\n this._item = null;\n this._isDestroyed = true;\n};\n\n/**\n * Private prototype methods\n * *************************\n */\n\n/**\n * Move the element back to the grid container element if it does not exist\n * there already.\n *\n * @private\n * @param {Number} [left]\n * - The element's current translateX value (optional).\n * @param {Number} [top]\n * - The element's current translateY value (optional).\n * @returns {Boolean}\n * - Returns `true` if the element was reparented.\n */\nItemDragRelease.prototype._placeToGrid = function (left, top) {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var element = item._element;\n var container = item.getGrid()._element;\n var didReparent = false;\n\n if (element.parentNode !== container) {\n if (left === undefined || top === undefined) {\n var translate = getTranslate(element);\n left = translate.x - this._containerDiffX;\n top = translate.y - this._containerDiffY;\n }\n\n container.appendChild(element);\n item._setTranslate(left, top);\n didReparent = true;\n }\n\n this._containerDiffX = 0;\n this._containerDiffY = 0;\n\n return didReparent;\n};\n\n/**\n * Reset data and remove releasing class.\n *\n * @private\n * @param {Boolean} [needsReflow]\n */\nItemDragRelease.prototype._reset = function (needsReflow) {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var releasingClass = item.getGrid()._settings.itemReleasingClass;\n\n this._isActive = false;\n this._isPositioningStarted = false;\n this._containerDiffX = 0;\n this._containerDiffY = 0;\n\n // If the element was just reparented we need to do a forced reflow to remove\n // the class gracefully.\n if (releasingClass) {\n // eslint-disable-next-line\n if (needsReflow) item._element.clientWidth;\n removeClass(item._element, releasingClass);\n }\n};\n\nvar MIN_ANIMATION_DISTANCE = 2;\n\n/**\n * Layout manager for Item instance, handles the positioning of an item.\n *\n * @class\n * @param {Item} item\n */\nfunction ItemLayout(item) {\n var element = item._element;\n var elementStyle = element.style;\n\n this._item = item;\n this._isActive = false;\n this._isDestroyed = false;\n this._isInterrupted = false;\n this._currentStyles = {};\n this._targetStyles = {};\n this._nextLeft = 0;\n this._nextTop = 0;\n this._offsetLeft = 0;\n this._offsetTop = 0;\n this._skipNextAnimation = false;\n this._animOptions = {\n onFinish: this._finish.bind(this),\n duration: 0,\n easing: 0,\n };\n\n // Set element's initial position styles.\n elementStyle.left = '0px';\n elementStyle.top = '0px';\n item._setTranslate(0, 0);\n\n this._animation = new Animator(element);\n this._queue = 'layout-' + item._id;\n\n // Bind animation handlers and finish method.\n this._setupAnimation = this._setupAnimation.bind(this);\n this._startAnimation = this._startAnimation.bind(this);\n}\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Start item layout based on it's current data.\n *\n * @public\n * @param {Boolean} instant\n * @param {Function} [onFinish]\n */\nItemLayout.prototype.start = function (instant, onFinish) {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var release = item._dragRelease;\n var gridSettings = item.getGrid()._settings;\n var isPositioning = this._isActive;\n var isJustReleased = release.isJustReleased();\n var animDuration = isJustReleased\n ? gridSettings.dragRelease.duration\n : gridSettings.layoutDuration;\n var animEasing = isJustReleased ? gridSettings.dragRelease.easing : gridSettings.layoutEasing;\n var animEnabled = !instant && !this._skipNextAnimation && animDuration > 0;\n\n // If the item is currently positioning cancel potential queued layout tick\n // and process current layout callback queue with interrupted flag on.\n if (isPositioning) {\n cancelLayoutTick(item._id);\n item._emitter.burst(this._queue, true, item);\n }\n\n // Mark release positioning as started.\n if (isJustReleased) release._isPositioningStarted = true;\n\n // Push the callback to the callback queue.\n if (isFunction(onFinish)) {\n item._emitter.on(this._queue, onFinish);\n }\n\n // Reset animation skipping flag.\n this._skipNextAnimation = false;\n\n // If no animations are needed, easy peasy!\n if (!animEnabled) {\n this._updateOffsets();\n item._setTranslate(this._nextLeft, this._nextTop);\n this._animation.stop();\n this._finish();\n return;\n }\n\n // Let's make sure an ongoing animation's callback is cancelled before going\n // further. Without this there's a chance that the animation will finish\n // before the next tick and mess up our logic.\n if (this._animation.isAnimating()) {\n this._animation._animation.onfinish = null;\n }\n\n // Kick off animation to be started in the next tick.\n this._isActive = true;\n this._animOptions.easing = animEasing;\n this._animOptions.duration = animDuration;\n this._isInterrupted = isPositioning;\n addLayoutTick(item._id, this._setupAnimation, this._startAnimation);\n};\n\n/**\n * Stop item's position animation if it is currently animating.\n *\n * @public\n * @param {Boolean} processCallbackQueue\n * @param {Number} [left]\n * @param {Number} [top]\n */\nItemLayout.prototype.stop = function (processCallbackQueue, left, top) {\n if (this._isDestroyed || !this._isActive) return;\n\n var item = this._item;\n\n // Cancel animation init.\n cancelLayoutTick(item._id);\n\n // Stop animation.\n if (this._animation.isAnimating()) {\n if (left === undefined || top === undefined) {\n var translate = getTranslate(item._element);\n left = translate.x;\n top = translate.y;\n }\n item._setTranslate(left, top);\n this._animation.stop();\n }\n\n // Remove positioning class.\n removeClass(item._element, item.getGrid()._settings.itemPositioningClass);\n\n // Reset active state.\n this._isActive = false;\n\n // Process callback queue if needed.\n if (processCallbackQueue) {\n item._emitter.burst(this._queue, true, item);\n }\n};\n\n/**\n * Destroy the instance and stop current animation if it is running.\n *\n * @public\n */\nItemLayout.prototype.destroy = function () {\n if (this._isDestroyed) return;\n\n var elementStyle = this._item._element.style;\n\n this.stop(true, 0, 0);\n this._item._emitter.clear(this._queue);\n this._animation.destroy();\n\n elementStyle[transformProp] = '';\n elementStyle.left = '';\n elementStyle.top = '';\n\n this._item = null;\n this._currentStyles = null;\n this._targetStyles = null;\n this._animOptions = null;\n this._isDestroyed = true;\n};\n\n/**\n * Private prototype methods\n * *************************\n */\n\n/**\n * Calculate and update item's current layout offset data.\n *\n * @private\n */\nItemLayout.prototype._updateOffsets = function () {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var migrate = item._migrate;\n var release = item._dragRelease;\n\n this._offsetLeft = release._isActive\n ? release._containerDiffX\n : migrate._isActive\n ? migrate._containerDiffX\n : 0;\n\n this._offsetTop = release._isActive\n ? release._containerDiffY\n : migrate._isActive\n ? migrate._containerDiffY\n : 0;\n\n this._nextLeft = this._item._left + this._offsetLeft;\n this._nextTop = this._item._top + this._offsetTop;\n};\n\n/**\n * Finish item layout procedure.\n *\n * @private\n */\nItemLayout.prototype._finish = function () {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var migrate = item._migrate;\n var release = item._dragRelease;\n\n // Update internal translate values.\n item._tX = this._nextLeft;\n item._tY = this._nextTop;\n\n // Mark the item as inactive and remove positioning classes.\n if (this._isActive) {\n this._isActive = false;\n removeClass(item._element, item.getGrid()._settings.itemPositioningClass);\n }\n\n // Finish up release and migration.\n if (release._isActive) release.stop();\n if (migrate._isActive) migrate.stop();\n\n // Process the callback queue.\n item._emitter.burst(this._queue, false, item);\n};\n\n/**\n * Prepare item for layout animation.\n *\n * @private\n */\nItemLayout.prototype._setupAnimation = function () {\n var item = this._item;\n if (item._tX === undefined || item._tY === undefined) {\n var translate = getTranslate(item._element);\n item._tX = translate.x;\n item._tY = translate.y;\n }\n};\n\n/**\n * Start layout animation.\n *\n * @private\n */\nItemLayout.prototype._startAnimation = function () {\n var item = this._item;\n var settings = item.getGrid()._settings;\n var isInstant = this._animOptions.duration <= 0;\n\n // Let's update the offset data and target styles.\n this._updateOffsets();\n\n var xDiff = Math.abs(item._left - (item._tX - this._offsetLeft));\n var yDiff = Math.abs(item._top - (item._tY - this._offsetTop));\n\n // If there is no need for animation or if the item is already in correct\n // position (or near it) let's finish the process early.\n if (isInstant || (xDiff < MIN_ANIMATION_DISTANCE && yDiff < MIN_ANIMATION_DISTANCE)) {\n if (xDiff || yDiff || this._isInterrupted) {\n item._setTranslate(this._nextLeft, this._nextTop);\n }\n this._animation.stop();\n this._finish();\n return;\n }\n\n // Set item's positioning class if needed.\n if (!this._isInterrupted) {\n addClass(item._element, settings.itemPositioningClass);\n }\n\n // Get current/next styles for animation.\n this._currentStyles[transformProp] = getTranslateString(item._tX, item._tY);\n this._targetStyles[transformProp] = getTranslateString(this._nextLeft, this._nextTop);\n\n // Set internal translation values to undefined for the duration of the\n // animation since they will be changing on each animation frame for the\n // duration of the animation and tracking them would mean reading the DOM on\n // each frame, which is pretty darn expensive.\n item._tX = item._tY = undefined;\n\n // Start animation.\n this._animation.start(this._currentStyles, this._targetStyles, this._animOptions);\n};\n\n/**\n * The migrate process handler constructor.\n *\n * @class\n * @param {Item} item\n */\nfunction ItemMigrate(item) {\n // Private props.\n this._item = item;\n this._isActive = false;\n this._isDestroyed = false;\n this._container = false;\n this._containerDiffX = 0;\n this._containerDiffY = 0;\n}\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Start the migrate process of an item.\n *\n * @public\n * @param {Grid} targetGrid\n * @param {(HTMLElement|Number|Item)} position\n * @param {HTMLElement} [container]\n */\nItemMigrate.prototype.start = function (targetGrid, position, container) {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var element = item._element;\n var isActive = item.isActive();\n var isVisible = item.isVisible();\n var grid = item.getGrid();\n var settings = grid._settings;\n var targetSettings = targetGrid._settings;\n var targetElement = targetGrid._element;\n var targetItems = targetGrid._items;\n var currentIndex = grid._items.indexOf(item);\n var targetContainer = container || document.body;\n var targetIndex;\n var targetItem;\n var currentContainer;\n var offsetDiff;\n var containerDiff;\n var translate;\n var translateX;\n var translateY;\n var currentVisClass;\n var nextVisClass;\n\n // Get target index.\n if (typeof position === 'number') {\n targetIndex = normalizeArrayIndex(targetItems, position, 1);\n } else {\n targetItem = targetGrid.getItem(position);\n if (!targetItem) return;\n targetIndex = targetItems.indexOf(targetItem);\n }\n\n // Get current translateX and translateY values if needed.\n if (item.isPositioning() || this._isActive || item.isReleasing()) {\n translate = getTranslate(element);\n translateX = translate.x;\n translateY = translate.y;\n }\n\n // Abort current positioning.\n if (item.isPositioning()) {\n item._layout.stop(true, translateX, translateY);\n }\n\n // Abort current migration.\n if (this._isActive) {\n translateX -= this._containerDiffX;\n translateY -= this._containerDiffY;\n this.stop(true, translateX, translateY);\n }\n\n // Abort current release.\n if (item.isReleasing()) {\n translateX -= item._dragRelease._containerDiffX;\n translateY -= item._dragRelease._containerDiffY;\n item._dragRelease.stop(true, translateX, translateY);\n }\n\n // Stop current visibility animation.\n item._visibility.stop(true);\n\n // Destroy current drag.\n if (item._drag) item._drag.destroy();\n\n // Emit beforeSend event.\n if (grid._hasListeners(EVENT_BEFORE_SEND)) {\n grid._emit(EVENT_BEFORE_SEND, {\n item: item,\n fromGrid: grid,\n fromIndex: currentIndex,\n toGrid: targetGrid,\n toIndex: targetIndex,\n });\n }\n\n // Emit beforeReceive event.\n if (targetGrid._hasListeners(EVENT_BEFORE_RECEIVE)) {\n targetGrid._emit(EVENT_BEFORE_RECEIVE, {\n item: item,\n fromGrid: grid,\n fromIndex: currentIndex,\n toGrid: targetGrid,\n toIndex: targetIndex,\n });\n }\n\n // Update item class.\n if (settings.itemClass !== targetSettings.itemClass) {\n removeClass(element, settings.itemClass);\n addClass(element, targetSettings.itemClass);\n }\n\n // Update visibility class.\n currentVisClass = isVisible ? settings.itemVisibleClass : settings.itemHiddenClass;\n nextVisClass = isVisible ? targetSettings.itemVisibleClass : targetSettings.itemHiddenClass;\n if (currentVisClass !== nextVisClass) {\n removeClass(element, currentVisClass);\n addClass(element, nextVisClass);\n }\n\n // Move item instance from current grid to target grid.\n grid._items.splice(currentIndex, 1);\n arrayInsert(targetItems, item, targetIndex);\n\n // Update item's grid id reference.\n item._gridId = targetGrid._id;\n\n // If item is active we need to move the item inside the target container for\n // the duration of the (potential) animation if it's different than the\n // current container.\n if (isActive) {\n currentContainer = element.parentNode;\n if (targetContainer !== currentContainer) {\n targetContainer.appendChild(element);\n offsetDiff = getOffsetDiff(targetContainer, currentContainer, true);\n if (!translate) {\n translate = getTranslate(element);\n translateX = translate.x;\n translateY = translate.y;\n }\n item._setTranslate(translateX + offsetDiff.left, translateY + offsetDiff.top);\n }\n }\n // If item is not active let's just append it to the target grid's element.\n else {\n targetElement.appendChild(element);\n }\n\n // Update child element's styles to reflect the current visibility state.\n item._visibility.setStyles(\n isVisible ? targetSettings.visibleStyles : targetSettings.hiddenStyles\n );\n\n // Get offset diff for the migration data, if the item is active.\n if (isActive) {\n containerDiff = getOffsetDiff(targetContainer, targetElement, true);\n }\n\n // Update item's cached dimensions.\n item._refreshDimensions();\n\n // Reset item's sort data.\n item._sortData = null;\n\n // Create new drag handler.\n item._drag = targetSettings.dragEnabled ? new ItemDrag(item) : null;\n\n // Setup migration data.\n if (isActive) {\n this._isActive = true;\n this._container = targetContainer;\n this._containerDiffX = containerDiff.left;\n this._containerDiffY = containerDiff.top;\n } else {\n this._isActive = false;\n this._container = null;\n this._containerDiffX = 0;\n this._containerDiffY = 0;\n }\n\n // Emit send event.\n if (grid._hasListeners(EVENT_SEND)) {\n grid._emit(EVENT_SEND, {\n item: item,\n fromGrid: grid,\n fromIndex: currentIndex,\n toGrid: targetGrid,\n toIndex: targetIndex,\n });\n }\n\n // Emit receive event.\n if (targetGrid._hasListeners(EVENT_RECEIVE)) {\n targetGrid._emit(EVENT_RECEIVE, {\n item: item,\n fromGrid: grid,\n fromIndex: currentIndex,\n toGrid: targetGrid,\n toIndex: targetIndex,\n });\n }\n};\n\n/**\n * End the migrate process of an item. This method can be used to abort an\n * ongoing migrate process (animation) or finish the migrate process.\n *\n * @public\n * @param {Boolean} [abort=false]\n * - Should the migration be aborted?\n * @param {Number} [left]\n * - The element's current translateX value (optional).\n * @param {Number} [top]\n * - The element's current translateY value (optional).\n */\nItemMigrate.prototype.stop = function (abort, left, top) {\n if (this._isDestroyed || !this._isActive) return;\n\n var item = this._item;\n var element = item._element;\n var grid = item.getGrid();\n var gridElement = grid._element;\n var translate;\n\n if (this._container !== gridElement) {\n if (left === undefined || top === undefined) {\n if (abort) {\n translate = getTranslate(element);\n left = translate.x - this._containerDiffX;\n top = translate.y - this._containerDiffY;\n } else {\n left = item._left;\n top = item._top;\n }\n }\n\n gridElement.appendChild(element);\n item._setTranslate(left, top);\n }\n\n this._isActive = false;\n this._container = null;\n this._containerDiffX = 0;\n this._containerDiffY = 0;\n};\n\n/**\n * Destroy instance.\n *\n * @public\n */\nItemMigrate.prototype.destroy = function () {\n if (this._isDestroyed) return;\n this.stop(true);\n this._item = null;\n this._isDestroyed = true;\n};\n\n/**\n * Visibility manager for Item instance, handles visibility of an item.\n *\n * @class\n * @param {Item} item\n */\nfunction ItemVisibility(item) {\n var isActive = item._isActive;\n var element = item._element;\n var childElement = element.children[0];\n var settings = item.getGrid()._settings;\n\n if (!childElement) {\n throw new Error('No valid child element found within item element.');\n }\n\n this._item = item;\n this._isDestroyed = false;\n this._isHidden = !isActive;\n this._isHiding = false;\n this._isShowing = false;\n this._childElement = childElement;\n this._currentStyleProps = [];\n this._animation = new Animator(childElement);\n this._queue = 'visibility-' + item._id;\n this._finishShow = this._finishShow.bind(this);\n this._finishHide = this._finishHide.bind(this);\n\n element.style.display = isActive ? '' : 'none';\n addClass(element, isActive ? settings.itemVisibleClass : settings.itemHiddenClass);\n this.setStyles(isActive ? settings.visibleStyles : settings.hiddenStyles);\n}\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Show item.\n *\n * @public\n * @param {Boolean} instant\n * @param {Function} [onFinish]\n */\nItemVisibility.prototype.show = function (instant, onFinish) {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var element = item._element;\n var callback = isFunction(onFinish) ? onFinish : null;\n var grid = item.getGrid();\n var settings = grid._settings;\n\n // If item is visible call the callback and be done with it.\n if (!this._isShowing && !this._isHidden) {\n callback && callback(false, item);\n return;\n }\n\n // If item is showing and does not need to be shown instantly, let's just\n // push callback to the callback queue and be done with it.\n if (this._isShowing && !instant) {\n callback && item._emitter.on(this._queue, callback);\n return;\n }\n\n // If the item is hiding or hidden process the current visibility callback\n // queue with the interrupted flag active, update classes and set display\n // to block if necessary.\n if (!this._isShowing) {\n item._emitter.burst(this._queue, true, item);\n removeClass(element, settings.itemHiddenClass);\n addClass(element, settings.itemVisibleClass);\n if (!this._isHiding) element.style.display = '';\n }\n\n // Push callback to the callback queue.\n callback && item._emitter.on(this._queue, callback);\n\n // Update visibility states.\n this._isShowing = true;\n this._isHiding = this._isHidden = false;\n\n // Finally let's start show animation.\n this._startAnimation(true, instant, this._finishShow);\n};\n\n/**\n * Hide item.\n *\n * @public\n * @param {Boolean} instant\n * @param {Function} [onFinish]\n */\nItemVisibility.prototype.hide = function (instant, onFinish) {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var element = item._element;\n var callback = isFunction(onFinish) ? onFinish : null;\n var grid = item.getGrid();\n var settings = grid._settings;\n\n // If item is already hidden call the callback and be done with it.\n if (!this._isHiding && this._isHidden) {\n callback && callback(false, item);\n return;\n }\n\n // If item is hiding and does not need to be hidden instantly, let's just\n // push callback to the callback queue and be done with it.\n if (this._isHiding && !instant) {\n callback && item._emitter.on(this._queue, callback);\n return;\n }\n\n // If the item is showing or visible process the current visibility callback\n // queue with the interrupted flag active, update classes and set display\n // to block if necessary.\n if (!this._isHiding) {\n item._emitter.burst(this._queue, true, item);\n addClass(element, settings.itemHiddenClass);\n removeClass(element, settings.itemVisibleClass);\n }\n\n // Push callback to the callback queue.\n callback && item._emitter.on(this._queue, callback);\n\n // Update visibility states.\n this._isHidden = this._isHiding = true;\n this._isShowing = false;\n\n // Finally let's start hide animation.\n this._startAnimation(false, instant, this._finishHide);\n};\n\n/**\n * Stop current hiding/showing process.\n *\n * @public\n * @param {Boolean} processCallbackQueue\n */\nItemVisibility.prototype.stop = function (processCallbackQueue) {\n if (this._isDestroyed) return;\n if (!this._isHiding && !this._isShowing) return;\n\n var item = this._item;\n\n cancelVisibilityTick(item._id);\n this._animation.stop();\n if (processCallbackQueue) {\n item._emitter.burst(this._queue, true, item);\n }\n};\n\n/**\n * Reset all existing visibility styles and apply new visibility styles to the\n * visibility element. This method should be used to set styles when there is a\n * chance that the current style properties differ from the new ones (basically\n * on init and on migrations).\n *\n * @public\n * @param {Object} styles\n */\nItemVisibility.prototype.setStyles = function (styles) {\n var childElement = this._childElement;\n var currentStyleProps = this._currentStyleProps;\n this._removeCurrentStyles();\n for (var prop in styles) {\n currentStyleProps.push(prop);\n childElement.style[prop] = styles[prop];\n }\n};\n\n/**\n * Destroy the instance and stop current animation if it is running.\n *\n * @public\n */\nItemVisibility.prototype.destroy = function () {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var element = item._element;\n var grid = item.getGrid();\n var settings = grid._settings;\n\n this.stop(true);\n item._emitter.clear(this._queue);\n this._animation.destroy();\n this._removeCurrentStyles();\n removeClass(element, settings.itemVisibleClass);\n removeClass(element, settings.itemHiddenClass);\n element.style.display = '';\n\n // Reset state.\n this._isHiding = this._isShowing = false;\n this._isDestroyed = this._isHidden = true;\n};\n\n/**\n * Private prototype methods\n * *************************\n */\n\n/**\n * Start visibility animation.\n *\n * @private\n * @param {Boolean} toVisible\n * @param {Boolean} [instant]\n * @param {Function} [onFinish]\n */\nItemVisibility.prototype._startAnimation = function (toVisible, instant, onFinish) {\n if (this._isDestroyed) return;\n\n var item = this._item;\n var animation = this._animation;\n var childElement = this._childElement;\n var settings = item.getGrid()._settings;\n var targetStyles = toVisible ? settings.visibleStyles : settings.hiddenStyles;\n var duration = toVisible ? settings.showDuration : settings.hideDuration;\n var easing = toVisible ? settings.showEasing : settings.hideEasing;\n var isInstant = instant || duration <= 0;\n var currentStyles;\n\n // No target styles? Let's quit early.\n if (!targetStyles) {\n onFinish && onFinish();\n return;\n }\n\n // Cancel queued visibility tick.\n cancelVisibilityTick(item._id);\n\n // If we need to apply the styles instantly without animation.\n if (isInstant) {\n setStyles(childElement, targetStyles);\n animation.stop();\n onFinish && onFinish();\n return;\n }\n\n // Let's make sure an ongoing animation's callback is cancelled before going\n // further. Without this there's a chance that the animation will finish\n // before the next tick and mess up our logic.\n if (animation.isAnimating()) {\n animation._animation.onfinish = null;\n }\n\n // Start the animation in the next tick (to avoid layout thrashing).\n addVisibilityTick(\n item._id,\n function () {\n currentStyles = getCurrentStyles(childElement, targetStyles);\n },\n function () {\n animation.start(currentStyles, targetStyles, {\n duration: duration,\n easing: easing,\n onFinish: onFinish,\n });\n }\n );\n};\n\n/**\n * Finish show procedure.\n *\n * @private\n */\nItemVisibility.prototype._finishShow = function () {\n if (this._isHidden) return;\n this._isShowing = false;\n this._item._emitter.burst(this._queue, false, this._item);\n};\n\n/**\n * Finish hide procedure.\n *\n * @private\n */\nItemVisibility.prototype._finishHide = function () {\n if (!this._isHidden) return;\n var item = this._item;\n this._isHiding = false;\n item._layout.stop(true, 0, 0);\n item._element.style.display = 'none';\n item._emitter.burst(this._queue, false, item);\n};\n\n/**\n * Remove currently applied visibility related inline style properties.\n *\n * @private\n */\nItemVisibility.prototype._removeCurrentStyles = function () {\n var childElement = this._childElement;\n var currentStyleProps = this._currentStyleProps;\n\n for (var i = 0; i < currentStyleProps.length; i++) {\n childElement.style[currentStyleProps[i]] = '';\n }\n\n currentStyleProps.length = 0;\n};\n\nvar id = 0;\n\n/**\n * Returns a unique numeric id (increments a base value on every call).\n * @returns {Number}\n */\nfunction createUid() {\n return ++id;\n}\n\n/**\n * Creates a new Item instance for a Grid instance.\n *\n * @class\n * @param {Grid} grid\n * @param {HTMLElement} element\n * @param {Boolean} [isActive]\n */\nfunction Item(grid, element, isActive) {\n var settings = grid._settings;\n\n // Store item/element pair to a map (for faster item querying by element).\n if (ITEM_ELEMENT_MAP) {\n if (ITEM_ELEMENT_MAP.has(element)) {\n throw new Error('You can only create one Muuri Item per element!');\n } else {\n ITEM_ELEMENT_MAP.set(element, this);\n }\n }\n\n this._id = createUid();\n this._gridId = grid._id;\n this._element = element;\n this._isDestroyed = false;\n this._left = 0;\n this._top = 0;\n this._width = 0;\n this._height = 0;\n this._marginLeft = 0;\n this._marginRight = 0;\n this._marginTop = 0;\n this._marginBottom = 0;\n this._tX = undefined;\n this._tY = undefined;\n this._sortData = null;\n this._emitter = new Emitter();\n\n // If the provided item element is not a direct child of the grid container\n // element, append it to the grid container. Note, we are indeed reading the\n // DOM here but it's a property that does not cause reflowing.\n if (element.parentNode !== grid._element) {\n grid._element.appendChild(element);\n }\n\n // Set item class.\n addClass(element, settings.itemClass);\n\n // If isActive is not defined, let's try to auto-detect it. Note, we are\n // indeed reading the DOM here but it's a property that does not cause\n // reflowing.\n if (typeof isActive !== 'boolean') {\n isActive = getStyle(element, 'display') !== 'none';\n }\n\n // Set up active state (defines if the item is considered part of the layout\n // or not).\n this._isActive = isActive;\n\n // Setup visibility handler.\n this._visibility = new ItemVisibility(this);\n\n // Set up layout handler.\n this._layout = new ItemLayout(this);\n\n // Set up migration handler data.\n this._migrate = new ItemMigrate(this);\n\n // Set up drag handler.\n this._drag = settings.dragEnabled ? new ItemDrag(this) : null;\n\n // Set up release handler. Note that although this is fully linked to dragging\n // this still needs to be always instantiated to handle migration scenarios\n // correctly.\n this._dragRelease = new ItemDragRelease(this);\n\n // Set up drag placeholder handler. Note that although this is fully linked to\n // dragging this still needs to be always instantiated to handle migration\n // scenarios correctly.\n this._dragPlaceholder = new ItemDragPlaceholder(this);\n\n // Note! You must call the following methods before you start using the\n // instance. They are deliberately not called in the end as it would cause\n // potentially a massive amount of reflows if multiple items were instantiated\n // in a loop.\n // this._refreshDimensions();\n // this._refreshSortData();\n}\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Get the instance grid reference.\n *\n * @public\n * @returns {Grid}\n */\nItem.prototype.getGrid = function () {\n return GRID_INSTANCES[this._gridId];\n};\n\n/**\n * Get the instance element.\n *\n * @public\n * @returns {HTMLElement}\n */\nItem.prototype.getElement = function () {\n return this._element;\n};\n\n/**\n * Get instance element's cached width.\n *\n * @public\n * @returns {Number}\n */\nItem.prototype.getWidth = function () {\n return this._width;\n};\n\n/**\n * Get instance element's cached height.\n *\n * @public\n * @returns {Number}\n */\nItem.prototype.getHeight = function () {\n return this._height;\n};\n\n/**\n * Get instance element's cached margins.\n *\n * @public\n * @returns {Object}\n * - The returned object contains left, right, top and bottom properties\n * which indicate the item element's cached margins.\n */\nItem.prototype.getMargin = function () {\n return {\n left: this._marginLeft,\n right: this._marginRight,\n top: this._marginTop,\n bottom: this._marginBottom,\n };\n};\n\n/**\n * Get instance element's cached position.\n *\n * @public\n * @returns {Object}\n * - The returned object contains left and top properties which indicate the\n * item element's cached position in the grid.\n */\nItem.prototype.getPosition = function () {\n return {\n left: this._left,\n top: this._top,\n };\n};\n\n/**\n * Is the item active?\n *\n * @public\n * @returns {Boolean}\n */\nItem.prototype.isActive = function () {\n return this._isActive;\n};\n\n/**\n * Is the item visible?\n *\n * @public\n * @returns {Boolean}\n */\nItem.prototype.isVisible = function () {\n return !!this._visibility && !this._visibility._isHidden;\n};\n\n/**\n * Is the item being animated to visible?\n *\n * @public\n * @returns {Boolean}\n */\nItem.prototype.isShowing = function () {\n return !!(this._visibility && this._visibility._isShowing);\n};\n\n/**\n * Is the item being animated to hidden?\n *\n * @public\n * @returns {Boolean}\n */\nItem.prototype.isHiding = function () {\n return !!(this._visibility && this._visibility._isHiding);\n};\n\n/**\n * Is the item positioning?\n *\n * @public\n * @returns {Boolean}\n */\nItem.prototype.isPositioning = function () {\n return !!(this._layout && this._layout._isActive);\n};\n\n/**\n * Is the item being dragged (or queued for dragging)?\n *\n * @public\n * @returns {Boolean}\n */\nItem.prototype.isDragging = function () {\n return !!(this._drag && this._drag._isActive);\n};\n\n/**\n * Is the item being released?\n *\n * @public\n * @returns {Boolean}\n */\nItem.prototype.isReleasing = function () {\n return !!(this._dragRelease && this._dragRelease._isActive);\n};\n\n/**\n * Is the item destroyed?\n *\n * @public\n * @returns {Boolean}\n */\nItem.prototype.isDestroyed = function () {\n return this._isDestroyed;\n};\n\n/**\n * Private prototype methods\n * *************************\n */\n\n/**\n * Recalculate item's dimensions.\n *\n * @private\n * @param {Boolean} [force=false]\n */\nItem.prototype._refreshDimensions = function (force) {\n if (this._isDestroyed) return;\n if (force !== true && this._visibility._isHidden) return;\n\n var element = this._element;\n var dragPlaceholder = this._dragPlaceholder;\n var rect = element.getBoundingClientRect();\n\n // Calculate width and height.\n this._width = rect.width;\n this._height = rect.height;\n\n // Calculate margins (ignore negative margins).\n this._marginLeft = Math.max(0, getStyleAsFloat(element, 'margin-left'));\n this._marginRight = Math.max(0, getStyleAsFloat(element, 'margin-right'));\n this._marginTop = Math.max(0, getStyleAsFloat(element, 'margin-top'));\n this._marginBottom = Math.max(0, getStyleAsFloat(element, 'margin-bottom'));\n\n // Keep drag placeholder's dimensions synced with the item's.\n if (dragPlaceholder) dragPlaceholder.updateDimensions();\n};\n\n/**\n * Fetch and store item's sort data.\n *\n * @private\n */\nItem.prototype._refreshSortData = function () {\n if (this._isDestroyed) return;\n\n var data = (this._sortData = {});\n var getters = this.getGrid()._settings.sortData;\n var prop;\n\n for (prop in getters) {\n data[prop] = getters[prop](this, this._element);\n }\n};\n\n/**\n * Add item to layout.\n *\n * @private\n */\nItem.prototype._addToLayout = function (left, top) {\n if (this._isActive === true) return;\n this._isActive = true;\n this._left = left || 0;\n this._top = top || 0;\n};\n\n/**\n * Remove item from layout.\n *\n * @private\n */\nItem.prototype._removeFromLayout = function () {\n if (this._isActive === false) return;\n this._isActive = false;\n this._left = 0;\n this._top = 0;\n};\n\n/**\n * Check if the layout procedure can be skipped for the item.\n *\n * @private\n * @param {Number} left\n * @param {Number} top\n * @returns {Boolean}\n */\nItem.prototype._canSkipLayout = function (left, top) {\n return (\n this._left === left &&\n this._top === top &&\n !this._migrate._isActive &&\n !this._layout._skipNextAnimation &&\n !this._dragRelease.isJustReleased()\n );\n};\n\n/**\n * Set the provided left and top arguments as the item element's translate\n * values in the DOM. This method keeps track of the currently applied\n * translate values and skips the update operation if the provided values are\n * identical to the currently applied values. Returns `false` if there was no\n * need for update and `true` if the translate value was updated.\n *\n * @private\n * @param {Number} left\n * @param {Number} top\n * @returns {Boolean}\n */\nItem.prototype._setTranslate = function (left, top) {\n if (this._tX === left && this._tY === top) return false;\n this._tX = left;\n this._tY = top;\n this._element.style[transformProp] = getTranslateString(left, top);\n return true;\n};\n\n/**\n * Destroy item instance.\n *\n * @private\n * @param {Boolean} [removeElement=false]\n */\nItem.prototype._destroy = function (removeElement) {\n if (this._isDestroyed) return;\n\n var element = this._element;\n var grid = this.getGrid();\n var settings = grid._settings;\n\n // Destroy handlers.\n this._dragPlaceholder.destroy();\n this._dragRelease.destroy();\n this._migrate.destroy();\n this._layout.destroy();\n this._visibility.destroy();\n if (this._drag) this._drag.destroy();\n\n // Destroy emitter.\n this._emitter.destroy();\n\n // Remove item class.\n removeClass(element, settings.itemClass);\n\n // Remove element from DOM.\n if (removeElement) element.parentNode.removeChild(element);\n\n // Remove item/element pair from map.\n if (ITEM_ELEMENT_MAP) ITEM_ELEMENT_MAP.delete(element);\n\n // Reset state.\n this._isActive = false;\n this._isDestroyed = true;\n};\n\nfunction createPackerProcessor(isWorker) {\n var FILL_GAPS = 1;\n var HORIZONTAL = 2;\n var ALIGN_RIGHT = 4;\n var ALIGN_BOTTOM = 8;\n var ROUNDING = 16;\n\n var EPS = 0.001;\n var MIN_SLOT_SIZE = 0.5;\n\n // Rounds number first to three decimal precision and then floors the result\n // to two decimal precision.\n // Math.floor(Math.round(number * 1000) / 10) / 100\n function roundNumber(number) {\n return ((((number * 1000 + 0.5) << 0) / 10) << 0) / 100;\n }\n\n /**\n * @class\n */\n function PackerProcessor() {\n this.currentRects = [];\n this.nextRects = [];\n this.rectTarget = {};\n this.rectStore = [];\n this.slotSizes = [];\n this.rectId = 0;\n this.slotIndex = -1;\n this.slotData = { left: 0, top: 0, width: 0, height: 0 };\n this.sortRectsLeftTop = this.sortRectsLeftTop.bind(this);\n this.sortRectsTopLeft = this.sortRectsTopLeft.bind(this);\n }\n\n /**\n * Takes a layout object as an argument and computes positions (slots) for the\n * layout items. Also computes the final width and height of the layout. The\n * provided layout object's slots array is mutated as well as the width and\n * height properties.\n *\n * @param {Object} layout\n * @param {Number} layout.width\n * - The start (current) width of the layout in pixels.\n * @param {Number} layout.height\n * - The start (current) height of the layout in pixels.\n * @param {(Item[]|Number[])} layout.items\n * - List of Muuri.Item instances or a list of item dimensions\n * (e.g [ item1Width, item1Height, item2Width, item2Height, ... ]).\n * @param {(Array|Float32Array)} layout.slots\n * - An Array/Float32Array instance which's length should equal to\n * the amount of items times two. The position (width and height) of each\n * item will be written into this array.\n * @param {Number} settings\n * - The layout's settings as bitmasks.\n * @returns {Object}\n */\n PackerProcessor.prototype.computeLayout = function (layout, settings) {\n var items = layout.items;\n var slots = layout.slots;\n var fillGaps = !!(settings & FILL_GAPS);\n var horizontal = !!(settings & HORIZONTAL);\n var alignRight = !!(settings & ALIGN_RIGHT);\n var alignBottom = !!(settings & ALIGN_BOTTOM);\n var rounding = !!(settings & ROUNDING);\n var isPreProcessed = typeof items[0] === 'number';\n var i, bump, item, slotWidth, slotHeight, slot;\n\n // No need to go further if items do not exist.\n if (!items.length) return layout;\n\n // Compute slots for the items.\n bump = isPreProcessed ? 2 : 1;\n for (i = 0; i < items.length; i += bump) {\n // If items are pre-processed it means that items array contains only\n // the raw dimensions of the items. Otherwise we assume it is an array\n // of normal Muuri items.\n if (isPreProcessed) {\n slotWidth = items[i];\n slotHeight = items[i + 1];\n } else {\n item = items[i];\n slotWidth = item._width + item._marginLeft + item._marginRight;\n slotHeight = item._height + item._marginTop + item._marginBottom;\n }\n\n // If rounding is enabled let's round the item's width and height to\n // make the layout algorithm a bit more stable. This has a performance\n // cost so don't use this if not necessary.\n if (rounding) {\n slotWidth = roundNumber(slotWidth);\n slotHeight = roundNumber(slotHeight);\n }\n\n // Get slot data.\n slot = this.computeNextSlot(layout, slotWidth, slotHeight, fillGaps, horizontal);\n\n // Update layout width/height.\n if (horizontal) {\n if (slot.left + slot.width > layout.width) {\n layout.width = slot.left + slot.width;\n }\n } else {\n if (slot.top + slot.height > layout.height) {\n layout.height = slot.top + slot.height;\n }\n }\n\n // Add item slot data to layout slots.\n slots[++this.slotIndex] = slot.left;\n slots[++this.slotIndex] = slot.top;\n\n // Store the size too (for later usage) if needed.\n if (alignRight || alignBottom) {\n this.slotSizes.push(slot.width, slot.height);\n }\n }\n\n // If the alignment is set to right we need to adjust the results.\n if (alignRight) {\n for (i = 0; i < slots.length; i += 2) {\n slots[i] = layout.width - (slots[i] + this.slotSizes[i]);\n }\n }\n\n // If the alignment is set to bottom we need to adjust the results.\n if (alignBottom) {\n for (i = 1; i < slots.length; i += 2) {\n slots[i] = layout.height - (slots[i] + this.slotSizes[i]);\n }\n }\n\n // Reset stuff.\n this.slotSizes.length = 0;\n this.currentRects.length = 0;\n this.nextRects.length = 0;\n this.rectStore.length = 0;\n this.rectId = 0;\n this.slotIndex = -1;\n\n return layout;\n };\n\n /**\n * Calculate next slot in the layout. Returns a slot object with position and\n * dimensions data. The returned object is reused between calls.\n *\n * @param {Object} layout\n * @param {Number} slotWidth\n * @param {Number} slotHeight\n * @param {Boolean} fillGaps\n * @param {Boolean} horizontal\n * @returns {Object}\n */\n PackerProcessor.prototype.computeNextSlot = function (\n layout,\n slotWidth,\n slotHeight,\n fillGaps,\n horizontal\n ) {\n var slot = this.slotData;\n var currentRects = this.currentRects;\n var nextRects = this.nextRects;\n var ignoreCurrentRects = false;\n var rect;\n var rectId;\n var shards;\n var i;\n var j;\n\n // Reset new slots.\n nextRects.length = 0;\n\n // Set item slot initial data.\n slot.left = null;\n slot.top = null;\n slot.width = slotWidth;\n slot.height = slotHeight;\n\n // Try to find position for the slot from the existing free spaces in the\n // layout.\n for (i = 0; i < currentRects.length; i++) {\n rectId = currentRects[i];\n if (!rectId) continue;\n rect = this.getRect(rectId);\n if (slot.width <= rect.width + EPS && slot.height <= rect.height + EPS) {\n slot.left = rect.left;\n slot.top = rect.top;\n break;\n }\n }\n\n // If no position was found for the slot let's position the slot to\n // the bottom left (in vertical mode) or top right (in horizontal mode) of\n // the layout.\n if (slot.left === null) {\n if (horizontal) {\n slot.left = layout.width;\n slot.top = 0;\n } else {\n slot.left = 0;\n slot.top = layout.height;\n }\n\n // If gaps don't need filling let's throw away all the current free spaces\n // (currentRects).\n if (!fillGaps) {\n ignoreCurrentRects = true;\n }\n }\n\n // In vertical mode, if the slot's bottom overlaps the layout's bottom.\n if (!horizontal && slot.top + slot.height > layout.height + EPS) {\n // If slot is not aligned to the left edge, create a new free space to the\n // left of the slot.\n if (slot.left > MIN_SLOT_SIZE) {\n nextRects.push(this.addRect(0, layout.height, slot.left, Infinity));\n }\n\n // If slot is not aligned to the right edge, create a new free space to\n // the right of the slot.\n if (slot.left + slot.width < layout.width - MIN_SLOT_SIZE) {\n nextRects.push(\n this.addRect(\n slot.left + slot.width,\n layout.height,\n layout.width - slot.left - slot.width,\n Infinity\n )\n );\n }\n\n // Update layout height.\n layout.height = slot.top + slot.height;\n }\n\n // In horizontal mode, if the slot's right overlaps the layout's right edge.\n if (horizontal && slot.left + slot.width > layout.width + EPS) {\n // If slot is not aligned to the top, create a new free space above the\n // slot.\n if (slot.top > MIN_SLOT_SIZE) {\n nextRects.push(this.addRect(layout.width, 0, Infinity, slot.top));\n }\n\n // If slot is not aligned to the bottom, create a new free space below\n // the slot.\n if (slot.top + slot.height < layout.height - MIN_SLOT_SIZE) {\n nextRects.push(\n this.addRect(\n layout.width,\n slot.top + slot.height,\n Infinity,\n layout.height - slot.top - slot.height\n )\n );\n }\n\n // Update layout width.\n layout.width = slot.left + slot.width;\n }\n\n // Clean up the current free spaces making sure none of them overlap with\n // the slot. Split all overlapping free spaces into smaller shards that do\n // not overlap with the slot.\n if (!ignoreCurrentRects) {\n if (fillGaps) i = 0;\n for (; i < currentRects.length; i++) {\n rectId = currentRects[i];\n if (!rectId) continue;\n rect = this.getRect(rectId);\n shards = this.splitRect(rect, slot);\n for (j = 0; j < shards.length; j++) {\n rectId = shards[j];\n rect = this.getRect(rectId);\n // Make sure that the free space is within the boundaries of the\n // layout. This routine is critical to the algorithm as it makes sure\n // that there are no leftover spaces with infinite height/width.\n // It's also essential that we don't compare values absolutely to each\n // other but leave a little headroom (EPSILON) to get rid of false\n // positives.\n if (\n horizontal ? rect.left + EPS < layout.width - EPS : rect.top + EPS < layout.height - EPS\n ) {\n nextRects.push(rectId);\n }\n }\n }\n }\n\n // Sanitize and sort all the new free spaces that will be used in the next\n // iteration. This procedure is critical to make the bin-packing algorithm\n // work. The free spaces have to be in correct order in the beginning of the\n // next iteration.\n if (nextRects.length > 1) {\n this.purgeRects(nextRects).sort(horizontal ? this.sortRectsLeftTop : this.sortRectsTopLeft);\n }\n\n // Finally we need to make sure that `this.currentRects` points to\n // `nextRects` array as that is used in the next iteration's beginning when\n // we try to find a space for the next slot.\n this.currentRects = nextRects;\n this.nextRects = currentRects;\n\n return slot;\n };\n\n /**\n * Add a new rectangle to the rectangle store. Returns the id of the new\n * rectangle.\n *\n * @param {Number} left\n * @param {Number} top\n * @param {Number} width\n * @param {Number} height\n * @returns {Number}\n */\n PackerProcessor.prototype.addRect = function (left, top, width, height) {\n var rectId = ++this.rectId;\n this.rectStore[rectId] = left || 0;\n this.rectStore[++this.rectId] = top || 0;\n this.rectStore[++this.rectId] = width || 0;\n this.rectStore[++this.rectId] = height || 0;\n return rectId;\n };\n\n /**\n * Get rectangle data from the rectangle store by id. Optionally you can\n * provide a target object where the rectangle data will be written in. By\n * default an internal object is reused as a target object.\n *\n * @param {Number} id\n * @param {Object} [target]\n * @returns {Object}\n */\n PackerProcessor.prototype.getRect = function (id, target) {\n if (!target) target = this.rectTarget;\n target.left = this.rectStore[id] || 0;\n target.top = this.rectStore[++id] || 0;\n target.width = this.rectStore[++id] || 0;\n target.height = this.rectStore[++id] || 0;\n return target;\n };\n\n /**\n * Punch a hole into a rectangle and return the shards (1-4).\n *\n * @param {Object} rect\n * @param {Object} hole\n * @returns {Number[]}\n */\n PackerProcessor.prototype.splitRect = (function () {\n var shards = [];\n var width = 0;\n var height = 0;\n return function (rect, hole) {\n // Reset old shards.\n shards.length = 0;\n\n // If the slot does not overlap with the hole add slot to the return data\n // as is. Note that in this case we are eager to keep the slot as is if\n // possible so we use the EPSILON in favour of that logic.\n if (\n rect.left + rect.width <= hole.left + EPS ||\n hole.left + hole.width <= rect.left + EPS ||\n rect.top + rect.height <= hole.top + EPS ||\n hole.top + hole.height <= rect.top + EPS\n ) {\n shards.push(this.addRect(rect.left, rect.top, rect.width, rect.height));\n return shards;\n }\n\n // Left split.\n width = hole.left - rect.left;\n if (width >= MIN_SLOT_SIZE) {\n shards.push(this.addRect(rect.left, rect.top, width, rect.height));\n }\n\n // Right split.\n width = rect.left + rect.width - (hole.left + hole.width);\n if (width >= MIN_SLOT_SIZE) {\n shards.push(this.addRect(hole.left + hole.width, rect.top, width, rect.height));\n }\n\n // Top split.\n height = hole.top - rect.top;\n if (height >= MIN_SLOT_SIZE) {\n shards.push(this.addRect(rect.left, rect.top, rect.width, height));\n }\n\n // Bottom split.\n height = rect.top + rect.height - (hole.top + hole.height);\n if (height >= MIN_SLOT_SIZE) {\n shards.push(this.addRect(rect.left, hole.top + hole.height, rect.width, height));\n }\n\n return shards;\n };\n })();\n\n /**\n * Check if a rectangle is fully within another rectangle.\n *\n * @param {Object} a\n * @param {Object} b\n * @returns {Boolean}\n */\n PackerProcessor.prototype.isRectAWithinRectB = function (a, b) {\n return (\n a.left + EPS >= b.left &&\n a.top + EPS >= b.top &&\n a.left + a.width - EPS <= b.left + b.width &&\n a.top + a.height - EPS <= b.top + b.height\n );\n };\n\n /**\n * Loops through an array of rectangle ids and resets all that are fully\n * within another rectangle in the array. Resetting in this case means that\n * the rectangle id value is replaced with zero.\n *\n * @param {Number[]} rectIds\n * @returns {Number[]}\n */\n PackerProcessor.prototype.purgeRects = (function () {\n var rectA = {};\n var rectB = {};\n return function (rectIds) {\n var i = rectIds.length;\n var j;\n\n while (i--) {\n j = rectIds.length;\n if (!rectIds[i]) continue;\n this.getRect(rectIds[i], rectA);\n while (j--) {\n if (!rectIds[j] || i === j) continue;\n this.getRect(rectIds[j], rectB);\n if (this.isRectAWithinRectB(rectA, rectB)) {\n rectIds[i] = 0;\n break;\n }\n }\n }\n\n return rectIds;\n };\n })();\n\n /**\n * Sort rectangles with top-left gravity.\n *\n * @param {Number} aId\n * @param {Number} bId\n * @returns {Number}\n */\n PackerProcessor.prototype.sortRectsTopLeft = (function () {\n var rectA = {};\n var rectB = {};\n return function (aId, bId) {\n this.getRect(aId, rectA);\n this.getRect(bId, rectB);\n\n return rectA.top < rectB.top && rectA.top + EPS < rectB.top\n ? -1\n : rectA.top > rectB.top && rectA.top - EPS > rectB.top\n ? 1\n : rectA.left < rectB.left && rectA.left + EPS < rectB.left\n ? -1\n : rectA.left > rectB.left && rectA.left - EPS > rectB.left\n ? 1\n : 0;\n };\n })();\n\n /**\n * Sort rectangles with left-top gravity.\n *\n * @param {Number} aId\n * @param {Number} bId\n * @returns {Number}\n */\n PackerProcessor.prototype.sortRectsLeftTop = (function () {\n var rectA = {};\n var rectB = {};\n return function (aId, bId) {\n this.getRect(aId, rectA);\n this.getRect(bId, rectB);\n return rectA.left < rectB.left && rectA.left + EPS < rectB.left\n ? -1\n : rectA.left > rectB.left && rectA.left - EPS < rectB.left\n ? 1\n : rectA.top < rectB.top && rectA.top + EPS < rectB.top\n ? -1\n : rectA.top > rectB.top && rectA.top - EPS > rectB.top\n ? 1\n : 0;\n };\n })();\n\n if (isWorker) {\n var PACKET_INDEX_WIDTH = 1;\n var PACKET_INDEX_HEIGHT = 2;\n var PACKET_INDEX_OPTIONS = 3;\n var PACKET_HEADER_SLOTS = 4;\n var processor = new PackerProcessor();\n\n self.onmessage = function (msg) {\n var data = new Float32Array(msg.data);\n var items = data.subarray(PACKET_HEADER_SLOTS, data.length);\n var slots = new Float32Array(items.length);\n var settings = data[PACKET_INDEX_OPTIONS];\n var layout = {\n items: items,\n slots: slots,\n width: data[PACKET_INDEX_WIDTH],\n height: data[PACKET_INDEX_HEIGHT],\n };\n\n // Compute the layout (width / height / slots).\n processor.computeLayout(layout, settings);\n\n // Copy layout data to the return data.\n data[PACKET_INDEX_WIDTH] = layout.width;\n data[PACKET_INDEX_HEIGHT] = layout.height;\n data.set(layout.slots, PACKET_HEADER_SLOTS);\n\n // Send layout back to the main thread.\n postMessage(data.buffer, [data.buffer]);\n };\n }\n\n return PackerProcessor;\n}\n\nvar PackerProcessor = createPackerProcessor();\n\n//\n// WORKER UTILS\n//\n\nvar blobUrl = null;\nvar activeWorkers = [];\n\nfunction createWorkerProcessors(amount, onmessage) {\n var workers = [];\n\n if (amount > 0) {\n if (!blobUrl) {\n blobUrl = URL.createObjectURL(\n new Blob(['(' + createPackerProcessor.toString() + ')(true)'], {\n type: 'application/javascript',\n })\n );\n }\n\n for (var i = 0, worker; i < amount; i++) {\n worker = new Worker(blobUrl);\n if (onmessage) worker.onmessage = onmessage;\n workers.push(worker);\n activeWorkers.push(worker);\n }\n }\n\n return workers;\n}\n\nfunction destroyWorkerProcessors(workers) {\n var worker;\n var index;\n\n for (var i = 0; i < workers.length; i++) {\n worker = workers[i];\n worker.onmessage = null;\n worker.onerror = null;\n worker.onmessageerror = null;\n worker.terminate();\n\n index = activeWorkers.indexOf(worker);\n if (index > -1) activeWorkers.splice(index, 1);\n }\n\n if (blobUrl && !activeWorkers.length) {\n URL.revokeObjectURL(blobUrl);\n blobUrl = null;\n }\n}\n\nfunction isWorkerProcessorsSupported() {\n return !!(window.Worker && window.URL && window.Blob);\n}\n\nvar FILL_GAPS = 1;\nvar HORIZONTAL = 2;\nvar ALIGN_RIGHT = 4;\nvar ALIGN_BOTTOM = 8;\nvar ROUNDING = 16;\nvar PACKET_INDEX_ID = 0;\nvar PACKET_INDEX_WIDTH = 1;\nvar PACKET_INDEX_HEIGHT = 2;\nvar PACKET_INDEX_OPTIONS = 3;\nvar PACKET_HEADER_SLOTS = 4;\n\n/**\n * @class\n * @param {Number} [numWorkers=0]\n * @param {Object} [options]\n * @param {Boolean} [options.fillGaps=false]\n * @param {Boolean} [options.horizontal=false]\n * @param {Boolean} [options.alignRight=false]\n * @param {Boolean} [options.alignBottom=false]\n * @param {Boolean} [options.rounding=false]\n */\nfunction Packer(numWorkers, options) {\n this._options = 0;\n this._processor = null;\n this._layoutQueue = [];\n this._layouts = {};\n this._layoutCallbacks = {};\n this._layoutWorkers = {};\n this._layoutWorkerData = {};\n this._workers = [];\n this._onWorkerMessage = this._onWorkerMessage.bind(this);\n\n // Set initial options.\n this.setOptions(options);\n\n // Init the worker(s) or the processor if workers can't be used.\n numWorkers = typeof numWorkers === 'number' ? Math.max(0, numWorkers) : 0;\n if (numWorkers && isWorkerProcessorsSupported()) {\n try {\n this._workers = createWorkerProcessors(numWorkers, this._onWorkerMessage);\n } catch (e) {\n this._processor = new PackerProcessor();\n }\n } else {\n this._processor = new PackerProcessor();\n }\n}\n\nPacker.prototype._sendToWorker = function () {\n if (!this._layoutQueue.length || !this._workers.length) return;\n\n var layoutId = this._layoutQueue.shift();\n var worker = this._workers.pop();\n var data = this._layoutWorkerData[layoutId];\n\n delete this._layoutWorkerData[layoutId];\n this._layoutWorkers[layoutId] = worker;\n worker.postMessage(data.buffer, [data.buffer]);\n};\n\nPacker.prototype._onWorkerMessage = function (msg) {\n var data = new Float32Array(msg.data);\n var layoutId = data[PACKET_INDEX_ID];\n var layout = this._layouts[layoutId];\n var callback = this._layoutCallbacks[layoutId];\n var worker = this._layoutWorkers[layoutId];\n\n if (layout) delete this._layouts[layoutId];\n if (callback) delete this._layoutCallbacks[layoutId];\n if (worker) delete this._layoutWorkers[layoutId];\n\n if (layout && callback) {\n layout.width = data[PACKET_INDEX_WIDTH];\n layout.height = data[PACKET_INDEX_HEIGHT];\n layout.slots = data.subarray(PACKET_HEADER_SLOTS, data.length);\n this._finalizeLayout(layout);\n callback(layout);\n }\n\n if (worker) {\n this._workers.push(worker);\n this._sendToWorker();\n }\n};\n\nPacker.prototype._finalizeLayout = function (layout) {\n var grid = layout._grid;\n var isHorizontal = layout._settings & HORIZONTAL;\n var isBorderBox = grid._boxSizing === 'border-box';\n\n delete layout._grid;\n delete layout._settings;\n\n layout.styles = {};\n\n if (isHorizontal) {\n layout.styles.width =\n (isBorderBox ? layout.width + grid._borderLeft + grid._borderRight : layout.width) + 'px';\n } else {\n layout.styles.height =\n (isBorderBox ? layout.height + grid._borderTop + grid._borderBottom : layout.height) + 'px';\n }\n\n return layout;\n};\n\n/**\n * @public\n * @param {Object} [options]\n * @param {Boolean} [options.fillGaps]\n * @param {Boolean} [options.horizontal]\n * @param {Boolean} [options.alignRight]\n * @param {Boolean} [options.alignBottom]\n * @param {Boolean} [options.rounding]\n */\nPacker.prototype.setOptions = function (options) {\n if (!options) return;\n\n var fillGaps;\n if (typeof options.fillGaps === 'boolean') {\n fillGaps = options.fillGaps ? FILL_GAPS : 0;\n } else {\n fillGaps = this._options & FILL_GAPS;\n }\n\n var horizontal;\n if (typeof options.horizontal === 'boolean') {\n horizontal = options.horizontal ? HORIZONTAL : 0;\n } else {\n horizontal = this._options & HORIZONTAL;\n }\n\n var alignRight;\n if (typeof options.alignRight === 'boolean') {\n alignRight = options.alignRight ? ALIGN_RIGHT : 0;\n } else {\n alignRight = this._options & ALIGN_RIGHT;\n }\n\n var alignBottom;\n if (typeof options.alignBottom === 'boolean') {\n alignBottom = options.alignBottom ? ALIGN_BOTTOM : 0;\n } else {\n alignBottom = this._options & ALIGN_BOTTOM;\n }\n\n var rounding;\n if (typeof options.rounding === 'boolean') {\n rounding = options.rounding ? ROUNDING : 0;\n } else {\n rounding = this._options & ROUNDING;\n }\n\n this._options = fillGaps | horizontal | alignRight | alignBottom | rounding;\n};\n\n/**\n * @public\n * @param {Grid} grid\n * @param {Number} layoutId\n * @param {Item[]} items\n * @param {Number} width\n * @param {Number} height\n * @param {Function} callback\n * @returns {?Function}\n */\nPacker.prototype.createLayout = function (grid, layoutId, items, width, height, callback) {\n if (this._layouts[layoutId]) {\n throw new Error('A layout with the provided id is currently being processed.');\n }\n\n var horizontal = this._options & HORIZONTAL;\n var layout = {\n id: layoutId,\n items: items,\n slots: null,\n width: horizontal ? 0 : width,\n height: !horizontal ? 0 : height,\n // Temporary data, which will be removed before sending the layout data\n // outside of Packer's context.\n _grid: grid,\n _settings: this._options,\n };\n\n // If there are no items let's call the callback immediately.\n if (!items.length) {\n layout.slots = [];\n this._finalizeLayout(layout);\n callback(layout);\n return;\n }\n\n // Create layout synchronously if needed.\n if (this._processor) {\n layout.slots = window.Float32Array\n ? new Float32Array(items.length * 2)\n : new Array(items.length * 2);\n this._processor.computeLayout(layout, layout._settings);\n this._finalizeLayout(layout);\n callback(layout);\n return;\n }\n\n // Worker data.\n var data = new Float32Array(PACKET_HEADER_SLOTS + items.length * 2);\n\n // Worker data header.\n data[PACKET_INDEX_ID] = layoutId;\n data[PACKET_INDEX_WIDTH] = layout.width;\n data[PACKET_INDEX_HEIGHT] = layout.height;\n data[PACKET_INDEX_OPTIONS] = layout._settings;\n\n // Worker data items.\n var i, j, item;\n for (i = 0, j = PACKET_HEADER_SLOTS - 1, item; i < items.length; i++) {\n item = items[i];\n data[++j] = item._width + item._marginLeft + item._marginRight;\n data[++j] = item._height + item._marginTop + item._marginBottom;\n }\n\n this._layoutQueue.push(layoutId);\n this._layouts[layoutId] = layout;\n this._layoutCallbacks[layoutId] = callback;\n this._layoutWorkerData[layoutId] = data;\n\n this._sendToWorker();\n\n return this.cancelLayout.bind(this, layoutId);\n};\n\n/**\n * @public\n * @param {Number} layoutId\n */\nPacker.prototype.cancelLayout = function (layoutId) {\n var layout = this._layouts[layoutId];\n if (!layout) return;\n\n delete this._layouts[layoutId];\n delete this._layoutCallbacks[layoutId];\n\n if (this._layoutWorkerData[layoutId]) {\n delete this._layoutWorkerData[layoutId];\n var queueIndex = this._layoutQueue.indexOf(layoutId);\n if (queueIndex > -1) this._layoutQueue.splice(queueIndex, 1);\n }\n};\n\n/**\n * @public\n */\nPacker.prototype.destroy = function () {\n // Move all currently used workers back in the workers array.\n for (var key in this._layoutWorkers) {\n this._workers.push(this._layoutWorkers[key]);\n }\n\n // Destroy all instance's workers.\n destroyWorkerProcessors(this._workers);\n\n // Reset data.\n this._workers.length = 0;\n this._layoutQueue.length = 0;\n this._layouts = {};\n this._layoutCallbacks = {};\n this._layoutWorkers = {};\n this._layoutWorkerData = {};\n};\n\nvar debounceId = 0;\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. The returned function accepts one argument which, when\n * being `true`, cancels the debounce function immediately. When the debounce\n * function is canceled it cannot be invoked again.\n *\n * @param {Function} fn\n * @param {Number} durationMs\n * @returns {Function}\n */\nfunction debounce(fn, durationMs) {\n var id = ++debounceId;\n var timer = 0;\n var lastTime = 0;\n var isCanceled = false;\n var tick = function (time) {\n if (isCanceled) return;\n\n if (lastTime) timer -= time - lastTime;\n lastTime = time;\n\n if (timer > 0) {\n addDebounceTick(id, tick);\n } else {\n timer = lastTime = 0;\n fn();\n }\n };\n\n return function (cancel) {\n if (isCanceled) return;\n\n if (durationMs <= 0) {\n if (cancel !== true) fn();\n return;\n }\n\n if (cancel === true) {\n isCanceled = true;\n timer = lastTime = 0;\n tick = undefined;\n cancelDebounceTick(id);\n return;\n }\n\n if (timer <= 0) {\n timer = durationMs;\n tick(0);\n } else {\n timer = durationMs;\n }\n };\n}\n\nvar htmlCollectionType = '[object HTMLCollection]';\nvar nodeListType = '[object NodeList]';\n\n/**\n * Check if a value is a node list or a html collection.\n *\n * @param {*} val\n * @returns {Boolean}\n */\nfunction isNodeList(val) {\n var type = Object.prototype.toString.call(val);\n return type === htmlCollectionType || type === nodeListType;\n}\n\nvar objectType = 'object';\nvar objectToStringType = '[object Object]';\nvar toString = Object.prototype.toString;\n\n/**\n * Check if a value is a plain object.\n *\n * @param {*} val\n * @returns {Boolean}\n */\nfunction isPlainObject(val) {\n return typeof val === objectType && toString.call(val) === objectToStringType;\n}\n\nfunction noop() {}\n\n/**\n * Converts a value to an array or clones an array.\n *\n * @param {*} val\n * @returns {Array}\n */\nfunction toArray(val) {\n return isNodeList(val) ? Array.prototype.slice.call(val) : Array.prototype.concat(val);\n}\n\nvar NUMBER_TYPE = 'number';\nvar STRING_TYPE = 'string';\nvar INSTANT_LAYOUT = 'instant';\nvar layoutId = 0;\n\n/**\n * Creates a new Grid instance.\n *\n * @class\n * @param {(HTMLElement|String)} element\n * @param {Object} [options]\n * @param {(String|HTMLElement[]|NodeList|HTMLCollection)} [options.items=\"*\"]\n * @param {Number} [options.showDuration=300]\n * @param {String} [options.showEasing=\"ease\"]\n * @param {Object} [options.visibleStyles={opacity: \"1\", transform: \"scale(1)\"}]\n * @param {Number} [options.hideDuration=300]\n * @param {String} [options.hideEasing=\"ease\"]\n * @param {Object} [options.hiddenStyles={opacity: \"0\", transform: \"scale(0.5)\"}]\n * @param {(Function|Object)} [options.layout]\n * @param {Boolean} [options.layout.fillGaps=false]\n * @param {Boolean} [options.layout.horizontal=false]\n * @param {Boolean} [options.layout.alignRight=false]\n * @param {Boolean} [options.layout.alignBottom=false]\n * @param {Boolean} [options.layout.rounding=false]\n * @param {(Boolean|Number)} [options.layoutOnResize=150]\n * @param {Boolean} [options.layoutOnInit=true]\n * @param {Number} [options.layoutDuration=300]\n * @param {String} [options.layoutEasing=\"ease\"]\n * @param {?Object} [options.sortData=null]\n * @param {Boolean} [options.dragEnabled=false]\n * @param {?String} [options.dragHandle=null]\n * @param {?HtmlElement} [options.dragContainer=null]\n * @param {?Function} [options.dragStartPredicate]\n * @param {Number} [options.dragStartPredicate.distance=0]\n * @param {Number} [options.dragStartPredicate.delay=0]\n * @param {String} [options.dragAxis=\"xy\"]\n * @param {(Boolean|Function)} [options.dragSort=true]\n * @param {Object} [options.dragSortHeuristics]\n * @param {Number} [options.dragSortHeuristics.sortInterval=100]\n * @param {Number} [options.dragSortHeuristics.minDragDistance=10]\n * @param {Number} [options.dragSortHeuristics.minBounceBackAngle=1]\n * @param {(Function|Object)} [options.dragSortPredicate]\n * @param {Number} [options.dragSortPredicate.threshold=50]\n * @param {String} [options.dragSortPredicate.action=\"move\"]\n * @param {String} [options.dragSortPredicate.migrateAction=\"move\"]\n * @param {Object} [options.dragRelease]\n * @param {Number} [options.dragRelease.duration=300]\n * @param {String} [options.dragRelease.easing=\"ease\"]\n * @param {Boolean} [options.dragRelease.useDragContainer=true]\n * @param {Object} [options.dragCssProps]\n * @param {Object} [options.dragPlaceholder]\n * @param {Boolean} [options.dragPlaceholder.enabled=false]\n * @param {?Function} [options.dragPlaceholder.createElement=null]\n * @param {?Function} [options.dragPlaceholder.onCreate=null]\n * @param {?Function} [options.dragPlaceholder.onRemove=null]\n * @param {Object} [options.dragAutoScroll]\n * @param {(Function|Array)} [options.dragAutoScroll.targets=[]]\n * @param {?Function} [options.dragAutoScroll.handle=null]\n * @param {Number} [options.dragAutoScroll.threshold=50]\n * @param {Number} [options.dragAutoScroll.safeZone=0.2]\n * @param {(Function|Number)} [options.dragAutoScroll.speed]\n * @param {Boolean} [options.dragAutoScroll.sortDuringScroll=true]\n * @param {Boolean} [options.dragAutoScroll.smoothStop=false]\n * @param {?Function} [options.dragAutoScroll.onStart=null]\n * @param {?Function} [options.dragAutoScroll.onStop=null]\n * @param {String} [options.containerClass=\"muuri\"]\n * @param {String} [options.itemClass=\"muuri-item\"]\n * @param {String} [options.itemVisibleClass=\"muuri-item-visible\"]\n * @param {String} [options.itemHiddenClass=\"muuri-item-hidden\"]\n * @param {String} [options.itemPositioningClass=\"muuri-item-positioning\"]\n * @param {String} [options.itemDraggingClass=\"muuri-item-dragging\"]\n * @param {String} [options.itemReleasingClass=\"muuri-item-releasing\"]\n * @param {String} [options.itemPlaceholderClass=\"muuri-item-placeholder\"]\n */\nfunction Grid(element, options) {\n // Allow passing element as selector string\n if (typeof element === STRING_TYPE) {\n element = document.querySelector(element);\n }\n\n // Throw an error if the container element is not body element or does not\n // exist within the body element.\n var isElementInDom = element.getRootNode\n ? element.getRootNode({ composed: true }) === document\n : document.body.contains(element);\n if (!isElementInDom || element === document.documentElement) {\n throw new Error('Container element must be an existing DOM element.');\n }\n\n // Create instance settings by merging the options with default options.\n var settings = mergeSettings(Grid.defaultOptions, options);\n settings.visibleStyles = normalizeStyles(settings.visibleStyles);\n settings.hiddenStyles = normalizeStyles(settings.hiddenStyles);\n if (!isFunction(settings.dragSort)) {\n settings.dragSort = !!settings.dragSort;\n }\n\n this._id = createUid();\n this._element = element;\n this._settings = settings;\n this._isDestroyed = false;\n this._items = [];\n this._layout = {\n id: 0,\n items: [],\n slots: [],\n };\n this._isLayoutFinished = true;\n this._nextLayoutData = null;\n this._emitter = new Emitter();\n this._onLayoutDataReceived = this._onLayoutDataReceived.bind(this);\n\n // Store grid instance to the grid instances collection.\n GRID_INSTANCES[this._id] = this;\n\n // Add container element's class name.\n addClass(element, settings.containerClass);\n\n // If layoutOnResize option is a valid number sanitize it and bind the resize\n // handler.\n bindLayoutOnResize(this, settings.layoutOnResize);\n\n // Add initial items.\n this.add(getInitialGridElements(element, settings.items), { layout: false });\n\n // Layout on init if necessary.\n if (settings.layoutOnInit) {\n this.layout(true);\n }\n}\n\n/**\n * Public properties\n * *****************\n */\n\n/**\n * @public\n * @static\n * @see Item\n */\nGrid.Item = Item;\n\n/**\n * @public\n * @static\n * @see ItemLayout\n */\nGrid.ItemLayout = ItemLayout;\n\n/**\n * @public\n * @static\n * @see ItemVisibility\n */\nGrid.ItemVisibility = ItemVisibility;\n\n/**\n * @public\n * @static\n * @see ItemMigrate\n */\nGrid.ItemMigrate = ItemMigrate;\n\n/**\n * @public\n * @static\n * @see ItemDrag\n */\nGrid.ItemDrag = ItemDrag;\n\n/**\n * @public\n * @static\n * @see ItemDragRelease\n */\nGrid.ItemDragRelease = ItemDragRelease;\n\n/**\n * @public\n * @static\n * @see ItemDragPlaceholder\n */\nGrid.ItemDragPlaceholder = ItemDragPlaceholder;\n\n/**\n * @public\n * @static\n * @see Emitter\n */\nGrid.Emitter = Emitter;\n\n/**\n * @public\n * @static\n * @see Animator\n */\nGrid.Animator = Animator;\n\n/**\n * @public\n * @static\n * @see Dragger\n */\nGrid.Dragger = Dragger;\n\n/**\n * @public\n * @static\n * @see Packer\n */\nGrid.Packer = Packer;\n\n/**\n * @public\n * @static\n * @see AutoScroller\n */\nGrid.AutoScroller = AutoScroller;\n\n/**\n * The default Packer instance used by default for all layouts.\n *\n * @public\n * @static\n * @type {Packer}\n */\nGrid.defaultPacker = new Packer(2);\n\n/**\n * Default options for Grid instance.\n *\n * @public\n * @static\n * @type {Object}\n */\nGrid.defaultOptions = {\n // Initial item elements\n items: '*',\n\n // Default show animation\n showDuration: 300,\n showEasing: 'ease',\n\n // Default hide animation\n hideDuration: 300,\n hideEasing: 'ease',\n\n // Item's visible/hidden state styles\n visibleStyles: {\n opacity: '1',\n transform: 'scale(1)',\n },\n hiddenStyles: {\n opacity: '0',\n transform: 'scale(0.5)',\n },\n\n // Layout\n layout: {\n fillGaps: false,\n horizontal: false,\n alignRight: false,\n alignBottom: false,\n rounding: false,\n },\n layoutOnResize: 150,\n layoutOnInit: true,\n layoutDuration: 300,\n layoutEasing: 'ease',\n\n // Sorting\n sortData: null,\n\n // Drag & Drop\n dragEnabled: false,\n dragContainer: null,\n dragHandle: null,\n dragStartPredicate: {\n distance: 0,\n delay: 0,\n },\n dragAxis: 'xy',\n dragSort: true,\n dragSortHeuristics: {\n sortInterval: 100,\n minDragDistance: 10,\n minBounceBackAngle: 1,\n },\n dragSortPredicate: {\n threshold: 50,\n action: ACTION_MOVE,\n migrateAction: ACTION_MOVE,\n },\n dragRelease: {\n duration: 300,\n easing: 'ease',\n useDragContainer: true,\n },\n dragCssProps: {\n touchAction: 'none',\n userSelect: 'none',\n userDrag: 'none',\n tapHighlightColor: 'rgba(0, 0, 0, 0)',\n touchCallout: 'none',\n contentZooming: 'none',\n },\n dragPlaceholder: {\n enabled: false,\n createElement: null,\n onCreate: null,\n onRemove: null,\n },\n dragAutoScroll: {\n targets: [],\n handle: null,\n threshold: 50,\n safeZone: 0.2,\n speed: AutoScroller.smoothSpeed(1000, 2000, 2500),\n sortDuringScroll: true,\n smoothStop: false,\n onStart: null,\n onStop: null,\n },\n\n // Classnames\n containerClass: 'muuri',\n itemClass: 'muuri-item',\n itemVisibleClass: 'muuri-item-shown',\n itemHiddenClass: 'muuri-item-hidden',\n itemPositioningClass: 'muuri-item-positioning',\n itemDraggingClass: 'muuri-item-dragging',\n itemReleasingClass: 'muuri-item-releasing',\n itemPlaceholderClass: 'muuri-item-placeholder',\n};\n\n/**\n * Public prototype methods\n * ************************\n */\n\n/**\n * Bind an event listener.\n *\n * @public\n * @param {String} event\n * @param {Function} listener\n * @returns {Grid}\n */\nGrid.prototype.on = function (event, listener) {\n this._emitter.on(event, listener);\n return this;\n};\n\n/**\n * Unbind an event listener.\n *\n * @public\n * @param {String} event\n * @param {Function} listener\n * @returns {Grid}\n */\nGrid.prototype.off = function (event, listener) {\n this._emitter.off(event, listener);\n return this;\n};\n\n/**\n * Get the container element.\n *\n * @public\n * @returns {HTMLElement}\n */\nGrid.prototype.getElement = function () {\n return this._element;\n};\n\n/**\n * Get instance's item by element or by index. Target can also be an Item\n * instance in which case the function returns the item if it exists within\n * related Grid instance. If nothing is found with the provided target, null\n * is returned.\n *\n * @private\n * @param {(HtmlElement|Number|Item)} [target]\n * @returns {?Item}\n */\nGrid.prototype.getItem = function (target) {\n // If no target is specified or the instance is destroyed, return null.\n if (this._isDestroyed || (!target && target !== 0)) {\n return null;\n }\n\n // If target is number return the item in that index. If the number is lower\n // than zero look for the item starting from the end of the items array. For\n // example -1 for the last item, -2 for the second last item, etc.\n if (typeof target === NUMBER_TYPE) {\n return this._items[target > -1 ? target : this._items.length + target] || null;\n }\n\n // If the target is an instance of Item return it if it is attached to this\n // Grid instance, otherwise return null.\n if (target instanceof Item) {\n return target._gridId === this._id ? target : null;\n }\n\n // In other cases let's assume that the target is an element, so let's try\n // to find an item that matches the element and return it. If item is not\n // found return null.\n if (ITEM_ELEMENT_MAP) {\n var item = ITEM_ELEMENT_MAP.get(target);\n return item && item._gridId === this._id ? item : null;\n } else {\n for (var i = 0; i < this._items.length; i++) {\n if (this._items[i]._element === target) {\n return this._items[i];\n }\n }\n }\n\n return null;\n};\n\n/**\n * Get all items. Optionally you can provide specific targets (elements,\n * indices and item instances). All items that are not found are omitted from\n * the returned array.\n *\n * @public\n * @param {(HtmlElement|Number|Item|Array)} [targets]\n * @returns {Item[]}\n */\nGrid.prototype.getItems = function (targets) {\n // Return all items immediately if no targets were provided or if the\n // instance is destroyed.\n if (this._isDestroyed || targets === undefined) {\n return this._items.slice(0);\n }\n\n var items = [];\n var i, item;\n\n if (Array.isArray(targets) || isNodeList(targets)) {\n for (i = 0; i < targets.length; i++) {\n item = this.getItem(targets[i]);\n if (item) items.push(item);\n }\n } else {\n item = this.getItem(targets);\n if (item) items.push(item);\n }\n\n return items;\n};\n\n/**\n * Update the cached dimensions of the instance's items. By default all the\n * items are refreshed, but you can also provide an array of target items as the\n * first argument if you want to refresh specific items. Note that all hidden\n * items are not refreshed by default since their \"display\" property is \"none\"\n * and their dimensions are therefore not readable from the DOM. However, if you\n * do want to force update hidden item dimensions too you can provide `true`\n * as the second argument, which makes the elements temporarily visible while\n * their dimensions are being read.\n *\n * @public\n * @param {Item[]} [items]\n * @param {Boolean} [force=false]\n * @returns {Grid}\n */\nGrid.prototype.refreshItems = function (items, force) {\n if (this._isDestroyed) return this;\n\n var targets = items || this._items;\n var i, item, style, hiddenItemStyles;\n\n if (force === true) {\n hiddenItemStyles = [];\n for (i = 0; i < targets.length; i++) {\n item = targets[i];\n if (!item.isVisible() && !item.isHiding()) {\n style = item.getElement().style;\n style.visibility = 'hidden';\n style.display = '';\n hiddenItemStyles.push(style);\n }\n }\n }\n\n for (i = 0; i < targets.length; i++) {\n targets[i]._refreshDimensions(force);\n }\n\n if (force === true) {\n for (i = 0; i < hiddenItemStyles.length; i++) {\n style = hiddenItemStyles[i];\n style.visibility = '';\n style.display = 'none';\n }\n hiddenItemStyles.length = 0;\n }\n\n return this;\n};\n\n/**\n * Update the sort data of the instance's items. By default all the items are\n * refreshed, but you can also provide an array of target items if you want to\n * refresh specific items.\n *\n * @public\n * @param {Item[]} [items]\n * @returns {Grid}\n */\nGrid.prototype.refreshSortData = function (items) {\n if (this._isDestroyed) return this;\n\n var targets = items || this._items;\n for (var i = 0; i < targets.length; i++) {\n targets[i]._refreshSortData();\n }\n\n return this;\n};\n\n/**\n * Synchronize the item elements to match the order of the items in the DOM.\n * This comes handy if you need to keep the DOM structure matched with the\n * order of the items. Note that if an item's element is not currently a child\n * of the container element (if it is dragged for example) it is ignored and\n * left untouched.\n *\n * @public\n * @returns {Grid}\n */\nGrid.prototype.synchronize = function () {\n if (this._isDestroyed) return this;\n\n var items = this._items;\n if (!items.length) return this;\n\n var fragment;\n var element;\n\n for (var i = 0; i < items.length; i++) {\n element = items[i]._element;\n if (element.parentNode === this._element) {\n fragment = fragment || document.createDocumentFragment();\n fragment.appendChild(element);\n }\n }\n\n if (!fragment) return this;\n\n this._element.appendChild(fragment);\n this._emit(EVENT_SYNCHRONIZE);\n\n return this;\n};\n\n/**\n * Calculate and apply item positions.\n *\n * @public\n * @param {Boolean} [instant=false]\n * @param {Function} [onFinish]\n * @returns {Grid}\n */\nGrid.prototype.layout = function (instant, onFinish) {\n if (this._isDestroyed) return this;\n\n // Cancel unfinished layout algorithm if possible.\n var unfinishedLayout = this._nextLayoutData;\n if (unfinishedLayout && isFunction(unfinishedLayout.cancel)) {\n unfinishedLayout.cancel();\n }\n\n // Compute layout id (let's stay in Float32 range).\n layoutId = (layoutId % MAX_SAFE_FLOAT32_INTEGER) + 1;\n var nextLayoutId = layoutId;\n\n // Store data for next layout.\n this._nextLayoutData = {\n id: nextLayoutId,\n instant: instant,\n onFinish: onFinish,\n cancel: null,\n };\n\n // Collect layout items (all active grid items).\n var items = this._items;\n var layoutItems = [];\n for (var i = 0; i < items.length; i++) {\n if (items[i]._isActive) layoutItems.push(items[i]);\n }\n\n // Compute new layout.\n this._refreshDimensions();\n var gridWidth = this._width - this._borderLeft - this._borderRight;\n var gridHeight = this._height - this._borderTop - this._borderBottom;\n var layoutSettings = this._settings.layout;\n var cancelLayout;\n if (isFunction(layoutSettings)) {\n cancelLayout = layoutSettings(\n this,\n nextLayoutId,\n layoutItems,\n gridWidth,\n gridHeight,\n this._onLayoutDataReceived\n );\n } else {\n Grid.defaultPacker.setOptions(layoutSettings);\n cancelLayout = Grid.defaultPacker.createLayout(\n this,\n nextLayoutId,\n layoutItems,\n gridWidth,\n gridHeight,\n this._onLayoutDataReceived\n );\n }\n\n // Store layout cancel method if available.\n if (\n isFunction(cancelLayout) &&\n this._nextLayoutData &&\n this._nextLayoutData.id === nextLayoutId\n ) {\n this._nextLayoutData.cancel = cancelLayout;\n }\n\n return this;\n};\n\n/**\n * Add new items by providing the elements you wish to add to the instance and\n * optionally provide the index where you want the items to be inserted into.\n * All elements that are not already children of the container element will be\n * automatically appended to the container element. If an element has it's CSS\n * display property set to \"none\" it will be marked as inactive during the\n * initiation process. As long as the item is inactive it will not be part of\n * the layout, but it will retain it's index. You can activate items at any\n * point with grid.show() method. This method will automatically call\n * grid.layout() if one or more of the added elements are visible. If only\n * hidden items are added no layout will be called. All the new visible items\n * are positioned without animation during their first layout.\n *\n * @public\n * @param {(HTMLElement|HTMLElement[])} elements\n * @param {Object} [options]\n * @param {Number} [options.index=-1]\n * @param {Boolean} [options.active]\n * @param {(Boolean|Function|String)} [options.layout=true]\n * @returns {Item[]}\n */\nGrid.prototype.add = function (elements, options) {\n if (this._isDestroyed || !elements) return [];\n\n var newItems = toArray(elements);\n if (!newItems.length) return newItems;\n\n var opts = options || {};\n var layout = opts.layout ? opts.layout : opts.layout === undefined;\n var items = this._items;\n var needsLayout = false;\n var fragment;\n var element;\n var item;\n var i;\n\n // Collect all the elements that are not child of the grid element into a\n // document fragment.\n for (i = 0; i < newItems.length; i++) {\n element = newItems[i];\n if (element.parentNode !== this._element) {\n fragment = fragment || document.createDocumentFragment();\n fragment.appendChild(element);\n }\n }\n\n // If we have a fragment, let's append it to the grid element. We could just\n // not do this and the `new Item()` instantiation would handle this for us,\n // but this way we can add the elements into the DOM a bit faster.\n if (fragment) {\n this._element.appendChild(fragment);\n }\n\n // Map provided elements into new grid items.\n for (i = 0; i < newItems.length; i++) {\n element = newItems[i];\n item = newItems[i] = new Item(this, element, opts.active);\n\n // If the item to be added is active, we need to do a layout. Also, we\n // need to mark the item with the skipNextAnimation flag to make it\n // position instantly (without animation) during the next layout. Without\n // the hack the item would animate to it's new position from the northwest\n // corner of the grid, which feels a bit buggy (imho).\n if (item._isActive) {\n needsLayout = true;\n item._layout._skipNextAnimation = true;\n }\n }\n\n // Set up the items' initial dimensions and sort data. This needs to be done\n // in a separate loop to avoid layout thrashing.\n for (i = 0; i < newItems.length; i++) {\n item = newItems[i];\n item._refreshDimensions();\n item._refreshSortData();\n }\n\n // Add the new items to the items collection to correct index.\n arrayInsert(items, newItems, opts.index);\n\n // Emit add event.\n if (this._hasListeners(EVENT_ADD)) {\n this._emit(EVENT_ADD, newItems.slice(0));\n }\n\n // If layout is needed.\n if (needsLayout && layout) {\n this.layout(layout === INSTANT_LAYOUT, isFunction(layout) ? layout : undefined);\n }\n\n return newItems;\n};\n\n/**\n * Remove items from the instance.\n *\n * @public\n * @param {Item[]} items\n * @param {Object} [options]\n * @param {Boolean} [options.removeElements=false]\n * @param {(Boolean|Function|String)} [options.layout=true]\n * @returns {Item[]}\n */\nGrid.prototype.remove = function (items, options) {\n if (this._isDestroyed || !items.length) return [];\n\n var opts = options || {};\n var layout = opts.layout ? opts.layout : opts.layout === undefined;\n var needsLayout = false;\n var allItems = this.getItems();\n var targetItems = [];\n var indices = [];\n var index;\n var item;\n var i;\n\n // Remove the individual items.\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item._isDestroyed) continue;\n\n index = this._items.indexOf(item);\n if (index === -1) continue;\n\n if (item._isActive) needsLayout = true;\n\n targetItems.push(item);\n indices.push(allItems.indexOf(item));\n item._destroy(opts.removeElements);\n this._items.splice(index, 1);\n }\n\n // Emit remove event.\n if (this._hasListeners(EVENT_REMOVE)) {\n this._emit(EVENT_REMOVE, targetItems.slice(0), indices);\n }\n\n // If layout is needed.\n if (needsLayout && layout) {\n this.layout(layout === INSTANT_LAYOUT, isFunction(layout) ? layout : undefined);\n }\n\n return targetItems;\n};\n\n/**\n * Show specific instance items.\n *\n * @public\n * @param {Item[]} items\n * @param {Object} [options]\n * @param {Boolean} [options.instant=false]\n * @param {Boolean} [options.syncWithLayout=true]\n * @param {Function} [options.onFinish]\n * @param {(Boolean|Function|String)} [options.layout=true]\n * @returns {Grid}\n */\nGrid.prototype.show = function (items, options) {\n if (!this._isDestroyed && items.length) {\n this._setItemsVisibility(items, true, options);\n }\n return this;\n};\n\n/**\n * Hide specific instance items.\n *\n * @public\n * @param {Item[]} items\n * @param {Object} [options]\n * @param {Boolean} [options.instant=false]\n * @param {Boolean} [options.syncWithLayout=true]\n * @param {Function} [options.onFinish]\n * @param {(Boolean|Function|String)} [options.layout=true]\n * @returns {Grid}\n */\nGrid.prototype.hide = function (items, options) {\n if (!this._isDestroyed && items.length) {\n this._setItemsVisibility(items, false, options);\n }\n return this;\n};\n\n/**\n * Filter items. Expects at least one argument, a predicate, which should be\n * either a function or a string. The predicate callback is executed for every\n * item in the instance. If the return value of the predicate is truthy the\n * item in question will be shown and otherwise hidden. The predicate callback\n * receives the item instance as it's argument. If the predicate is a string\n * it is considered to be a selector and it is checked against every item\n * element in the instance with the native element.matches() method. All the\n * matching items will be shown and others hidden.\n *\n * @public\n * @param {(Function|String)} predicate\n * @param {Object} [options]\n * @param {Boolean} [options.instant=false]\n * @param {Boolean} [options.syncWithLayout=true]\n * @param {FilterCallback} [options.onFinish]\n * @param {(Boolean|Function|String)} [options.layout=true]\n * @returns {Grid}\n */\nGrid.prototype.filter = function (predicate, options) {\n if (this._isDestroyed || !this._items.length) return this;\n\n var itemsToShow = [];\n var itemsToHide = [];\n var isPredicateString = typeof predicate === STRING_TYPE;\n var isPredicateFn = isFunction(predicate);\n var opts = options || {};\n var isInstant = opts.instant === true;\n var syncWithLayout = opts.syncWithLayout;\n var layout = opts.layout ? opts.layout : opts.layout === undefined;\n var onFinish = isFunction(opts.onFinish) ? opts.onFinish : null;\n var tryFinishCounter = -1;\n var tryFinish = noop;\n var item;\n var i;\n\n // If we have onFinish callback, let's create proper tryFinish callback.\n if (onFinish) {\n tryFinish = function () {\n ++tryFinishCounter && onFinish(itemsToShow.slice(0), itemsToHide.slice(0));\n };\n }\n\n // Check which items need to be shown and which hidden.\n if (isPredicateFn || isPredicateString) {\n for (i = 0; i < this._items.length; i++) {\n item = this._items[i];\n if (isPredicateFn ? predicate(item) : elementMatches(item._element, predicate)) {\n itemsToShow.push(item);\n } else {\n itemsToHide.push(item);\n }\n }\n }\n\n // Show items that need to be shown.\n if (itemsToShow.length) {\n this.show(itemsToShow, {\n instant: isInstant,\n syncWithLayout: syncWithLayout,\n onFinish: tryFinish,\n layout: false,\n });\n } else {\n tryFinish();\n }\n\n // Hide items that need to be hidden.\n if (itemsToHide.length) {\n this.hide(itemsToHide, {\n instant: isInstant,\n syncWithLayout: syncWithLayout,\n onFinish: tryFinish,\n layout: false,\n });\n } else {\n tryFinish();\n }\n\n // If there are any items to filter.\n if (itemsToShow.length || itemsToHide.length) {\n // Emit filter event.\n if (this._hasListeners(EVENT_FILTER)) {\n this._emit(EVENT_FILTER, itemsToShow.slice(0), itemsToHide.slice(0));\n }\n\n // If layout is needed.\n if (layout) {\n this.layout(layout === INSTANT_LAYOUT, isFunction(layout) ? layout : undefined);\n }\n }\n\n return this;\n};\n\n/**\n * Sort items. There are three ways to sort the items. The first is simply by\n * providing a function as the comparer which works identically to native\n * array sort. Alternatively you can sort by the sort data you have provided\n * in the instance's options. Just provide the sort data key(s) as a string\n * (separated by space) and the items will be sorted based on the provided\n * sort data keys. Lastly you have the opportunity to provide a presorted\n * array of items which will be used to sync the internal items array in the\n * same order.\n *\n * @public\n * @param {(Function|String|Item[])} comparer\n * @param {Object} [options]\n * @param {Boolean} [options.descending=false]\n * @param {(Boolean|Function|String)} [options.layout=true]\n * @returns {Grid}\n */\nGrid.prototype.sort = (function () {\n var sortComparer;\n var isDescending;\n var origItems;\n var indexMap;\n\n function defaultComparer(a, b) {\n var result = 0;\n var criteriaName;\n var criteriaOrder;\n var valA;\n var valB;\n\n // Loop through the list of sort criteria.\n for (var i = 0; i < sortComparer.length; i++) {\n // Get the criteria name, which should match an item's sort data key.\n criteriaName = sortComparer[i][0];\n criteriaOrder = sortComparer[i][1];\n\n // Get items' cached sort values for the criteria. If the item has no sort\n // data let's update the items sort data (this is a lazy load mechanism).\n valA = (a._sortData ? a : a._refreshSortData())._sortData[criteriaName];\n valB = (b._sortData ? b : b._refreshSortData())._sortData[criteriaName];\n\n // Sort the items in descending order if defined so explicitly. Otherwise\n // sort items in ascending order.\n if (criteriaOrder === 'desc' || (!criteriaOrder && isDescending)) {\n result = valB < valA ? -1 : valB > valA ? 1 : 0;\n } else {\n result = valA < valB ? -1 : valA > valB ? 1 : 0;\n }\n\n // If we have -1 or 1 as the return value, let's return it immediately.\n if (result) return result;\n }\n\n // If values are equal let's compare the item indices to make sure we\n // have a stable sort. Note that this is not necessary in evergreen browsers\n // because Array.sort() is nowadays stable. However, in order to guarantee\n // same results in older browsers we need this.\n if (!result) {\n if (!indexMap) indexMap = createIndexMap(origItems);\n result = isDescending ? compareIndexMap(indexMap, b, a) : compareIndexMap(indexMap, a, b);\n }\n return result;\n }\n\n function customComparer(a, b) {\n var result = isDescending ? -sortComparer(a, b) : sortComparer(a, b);\n if (!result) {\n if (!indexMap) indexMap = createIndexMap(origItems);\n result = isDescending ? compareIndexMap(indexMap, b, a) : compareIndexMap(indexMap, a, b);\n }\n return result;\n }\n\n return function (comparer, options) {\n if (this._isDestroyed || this._items.length < 2) return this;\n\n var items = this._items;\n var opts = options || {};\n var layout = opts.layout ? opts.layout : opts.layout === undefined;\n\n // Setup parent scope data.\n isDescending = !!opts.descending;\n origItems = items.slice(0);\n indexMap = null;\n\n // If function is provided do a native array sort.\n if (isFunction(comparer)) {\n sortComparer = comparer;\n items.sort(customComparer);\n }\n // Otherwise if we got a string, let's sort by the sort data as provided in\n // the instance's options.\n else if (typeof comparer === STRING_TYPE) {\n sortComparer = comparer\n .trim()\n .split(' ')\n .filter(function (val) {\n return val;\n })\n .map(function (val) {\n return val.split(':');\n });\n items.sort(defaultComparer);\n }\n // Otherwise if we got an array, let's assume it's a presorted array of the\n // items and order the items based on it. Here we blindly trust that the\n // presorted array consists of the same item instances as the current\n // `gird._items` array.\n else if (Array.isArray(comparer)) {\n items.length = 0;\n items.push.apply(items, comparer);\n }\n // Otherwise let's throw an error.\n else {\n sortComparer = isDescending = origItems = indexMap = null;\n throw new Error('Invalid comparer argument provided.');\n }\n\n // Emit sort event.\n if (this._hasListeners(EVENT_SORT)) {\n this._emit(EVENT_SORT, items.slice(0), origItems);\n }\n\n // If layout is needed.\n if (layout) {\n this.layout(layout === INSTANT_LAYOUT, isFunction(layout) ? layout : undefined);\n }\n\n // Reset data (to avoid mem leaks).\n sortComparer = isDescending = origItems = indexMap = null;\n\n return this;\n };\n})();\n\n/**\n * Move item to another index or in place of another item.\n *\n * @public\n * @param {(HtmlElement|Number|Item)} item\n * @param {(HtmlElement|Number|Item)} position\n * @param {Object} [options]\n * @param {String} [options.action=\"move\"]\n * - Accepts either \"move\" or \"swap\".\n * - \"move\" moves the item in place of the other item.\n * - \"swap\" swaps the position of the items.\n * @param {(Boolean|Function|String)} [options.layout=true]\n * @returns {Grid}\n */\nGrid.prototype.move = function (item, position, options) {\n if (this._isDestroyed || this._items.length < 2) return this;\n\n var items = this._items;\n var opts = options || {};\n var layout = opts.layout ? opts.layout : opts.layout === undefined;\n var isSwap = opts.action === ACTION_SWAP;\n var action = isSwap ? ACTION_SWAP : ACTION_MOVE;\n var fromItem = this.getItem(item);\n var toItem = this.getItem(position);\n var fromIndex;\n var toIndex;\n\n // Make sure the items exist and are not the same.\n if (fromItem && toItem && fromItem !== toItem) {\n // Get the indices of the items.\n fromIndex = items.indexOf(fromItem);\n toIndex = items.indexOf(toItem);\n\n // Do the move/swap.\n if (isSwap) {\n arraySwap(items, fromIndex, toIndex);\n } else {\n arrayMove(items, fromIndex, toIndex);\n }\n\n // Emit move event.\n if (this._hasListeners(EVENT_MOVE)) {\n this._emit(EVENT_MOVE, {\n item: fromItem,\n fromIndex: fromIndex,\n toIndex: toIndex,\n action: action,\n });\n }\n\n // If layout is needed.\n if (layout) {\n this.layout(layout === INSTANT_LAYOUT, isFunction(layout) ? layout : undefined);\n }\n }\n\n return this;\n};\n\n/**\n * Send item to another Grid instance.\n *\n * @public\n * @param {(HtmlElement|Number|Item)} item\n * @param {Grid} targetGrid\n * @param {(HtmlElement|Number|Item)} position\n * @param {Object} [options]\n * @param {HTMLElement} [options.appendTo=document.body]\n * @param {(Boolean|Function|String)} [options.layoutSender=true]\n * @param {(Boolean|Function|String)} [options.layoutReceiver=true]\n * @returns {Grid}\n */\nGrid.prototype.send = function (item, targetGrid, position, options) {\n if (this._isDestroyed || targetGrid._isDestroyed || this === targetGrid) return this;\n\n // Make sure we have a valid target item.\n item = this.getItem(item);\n if (!item) return this;\n\n var opts = options || {};\n var container = opts.appendTo || document.body;\n var layoutSender = opts.layoutSender ? opts.layoutSender : opts.layoutSender === undefined;\n var layoutReceiver = opts.layoutReceiver\n ? opts.layoutReceiver\n : opts.layoutReceiver === undefined;\n\n // Start the migration process.\n item._migrate.start(targetGrid, position, container);\n\n // If migration was started successfully and the item is active, let's layout\n // the grids.\n if (item._migrate._isActive && item._isActive) {\n if (layoutSender) {\n this.layout(\n layoutSender === INSTANT_LAYOUT,\n isFunction(layoutSender) ? layoutSender : undefined\n );\n }\n if (layoutReceiver) {\n targetGrid.layout(\n layoutReceiver === INSTANT_LAYOUT,\n isFunction(layoutReceiver) ? layoutReceiver : undefined\n );\n }\n }\n\n return this;\n};\n\n/**\n * Destroy the instance.\n *\n * @public\n * @param {Boolean} [removeElements=false]\n * @returns {Grid}\n */\nGrid.prototype.destroy = function (removeElements) {\n if (this._isDestroyed) return this;\n\n var container = this._element;\n var items = this._items.slice(0);\n var layoutStyles = (this._layout && this._layout.styles) || {};\n var i, prop;\n\n // Unbind window resize event listener.\n unbindLayoutOnResize(this);\n\n // Destroy items.\n for (i = 0; i < items.length; i++) items[i]._destroy(removeElements);\n this._items.length = 0;\n\n // Restore container.\n removeClass(container, this._settings.containerClass);\n for (prop in layoutStyles) container.style[prop] = '';\n\n // Emit destroy event and unbind all events.\n this._emit(EVENT_DESTROY);\n this._emitter.destroy();\n\n // Remove reference from the grid instances collection.\n delete GRID_INSTANCES[this._id];\n\n // Flag instance as destroyed.\n this._isDestroyed = true;\n\n return this;\n};\n\n/**\n * Private prototype methods\n * *************************\n */\n\n/**\n * Emit a grid event.\n *\n * @private\n * @param {String} event\n * @param {...*} [arg]\n */\nGrid.prototype._emit = function () {\n if (this._isDestroyed) return;\n this._emitter.emit.apply(this._emitter, arguments);\n};\n\n/**\n * Check if there are any events listeners for an event.\n *\n * @private\n * @param {String} event\n * @returns {Boolean}\n */\nGrid.prototype._hasListeners = function (event) {\n if (this._isDestroyed) return false;\n return this._emitter.countListeners(event) > 0;\n};\n\n/**\n * Update container's width, height and offsets.\n *\n * @private\n */\nGrid.prototype._updateBoundingRect = function () {\n var element = this._element;\n var rect = element.getBoundingClientRect();\n this._width = rect.width;\n this._height = rect.height;\n this._left = rect.left;\n this._top = rect.top;\n this._right = rect.right;\n this._bottom = rect.bottom;\n};\n\n/**\n * Update container's border sizes.\n *\n * @private\n * @param {Boolean} left\n * @param {Boolean} right\n * @param {Boolean} top\n * @param {Boolean} bottom\n */\nGrid.prototype._updateBorders = function (left, right, top, bottom) {\n var element = this._element;\n if (left) this._borderLeft = getStyleAsFloat(element, 'border-left-width');\n if (right) this._borderRight = getStyleAsFloat(element, 'border-right-width');\n if (top) this._borderTop = getStyleAsFloat(element, 'border-top-width');\n if (bottom) this._borderBottom = getStyleAsFloat(element, 'border-bottom-width');\n};\n\n/**\n * Refresh all of container's internal dimensions and offsets.\n *\n * @private\n */\nGrid.prototype._refreshDimensions = function () {\n this._updateBoundingRect();\n this._updateBorders(1, 1, 1, 1);\n this._boxSizing = getStyle(this._element, 'box-sizing');\n};\n\n/**\n * Calculate and apply item positions.\n *\n * @private\n * @param {Object} layout\n */\nGrid.prototype._onLayoutDataReceived = (function () {\n var itemsToLayout = [];\n return function (layout) {\n if (this._isDestroyed || !this._nextLayoutData || this._nextLayoutData.id !== layout.id) return;\n\n var grid = this;\n var instant = this._nextLayoutData.instant;\n var onFinish = this._nextLayoutData.onFinish;\n var numItems = layout.items.length;\n var counter = numItems;\n var item;\n var left;\n var top;\n var i;\n\n // Reset next layout data.\n this._nextLayoutData = null;\n\n if (!this._isLayoutFinished && this._hasListeners(EVENT_LAYOUT_ABORT)) {\n this._emit(EVENT_LAYOUT_ABORT, this._layout.items.slice(0));\n }\n\n // Update the layout reference.\n this._layout = layout;\n\n // Update the item positions and collect all items that need to be laid\n // out. It is critical that we update the item position _before_ the\n // layoutStart event as the new data might be needed in the callback.\n itemsToLayout.length = 0;\n for (i = 0; i < numItems; i++) {\n item = layout.items[i];\n\n // Make sure we have a matching item.\n if (!item) {\n --counter;\n continue;\n }\n\n // Get the item's new left and top values.\n left = layout.slots[i * 2];\n top = layout.slots[i * 2 + 1];\n\n // Let's skip the layout process if we can. Possibly avoids a lot of DOM\n // operations which saves us some CPU cycles.\n if (item._canSkipLayout(left, top)) {\n --counter;\n continue;\n }\n\n // Update the item's position.\n item._left = left;\n item._top = top;\n\n // Only active non-dragged items need to be moved.\n if (item.isActive() && !item.isDragging()) {\n itemsToLayout.push(item);\n } else {\n --counter;\n }\n }\n\n // Set layout styles to the grid element.\n if (layout.styles) {\n setStyles(this._element, layout.styles);\n }\n\n // layoutStart event is intentionally emitted after the container element's\n // dimensions are set, because otherwise there would be no hook for reacting\n // to container dimension changes.\n if (this._hasListeners(EVENT_LAYOUT_START)) {\n this._emit(EVENT_LAYOUT_START, layout.items.slice(0), instant === true);\n // Let's make sure that the current layout process has not been overridden\n // in the layoutStart event, and if so, let's stop processing the aborted\n // layout.\n if (this._layout.id !== layout.id) return;\n }\n\n var tryFinish = function () {\n if (--counter > 0) return;\n\n var hasLayoutChanged = grid._layout.id !== layout.id;\n var callback = isFunction(instant) ? instant : onFinish;\n\n if (!hasLayoutChanged) {\n grid._isLayoutFinished = true;\n }\n\n if (isFunction(callback)) {\n callback(layout.items.slice(0), hasLayoutChanged);\n }\n\n if (!hasLayoutChanged && grid._hasListeners(EVENT_LAYOUT_END)) {\n grid._emit(EVENT_LAYOUT_END, layout.items.slice(0));\n }\n };\n\n if (!itemsToLayout.length) {\n tryFinish();\n return this;\n }\n\n this._isLayoutFinished = false;\n\n for (i = 0; i < itemsToLayout.length; i++) {\n if (this._layout.id !== layout.id) break;\n itemsToLayout[i]._layout.start(instant === true, tryFinish);\n }\n\n if (this._layout.id === layout.id) {\n itemsToLayout.length = 0;\n }\n\n return this;\n };\n})();\n\n/**\n * Show or hide Grid instance's items.\n *\n * @private\n * @param {Item[]} items\n * @param {Boolean} toVisible\n * @param {Object} [options]\n * @param {Boolean} [options.instant=false]\n * @param {Boolean} [options.syncWithLayout=true]\n * @param {Function} [options.onFinish]\n * @param {(Boolean|Function|String)} [options.layout=true]\n */\nGrid.prototype._setItemsVisibility = function (items, toVisible, options) {\n var grid = this;\n var targetItems = items.slice(0);\n var opts = options || {};\n var isInstant = opts.instant === true;\n var callback = opts.onFinish;\n var layout = opts.layout ? opts.layout : opts.layout === undefined;\n var counter = targetItems.length;\n var startEvent = toVisible ? EVENT_SHOW_START : EVENT_HIDE_START;\n var endEvent = toVisible ? EVENT_SHOW_END : EVENT_HIDE_END;\n var method = toVisible ? 'show' : 'hide';\n var needsLayout = false;\n var completedItems = [];\n var hiddenItems = [];\n var item;\n var i;\n\n // If there are no items call the callback, but don't emit any events.\n if (!counter) {\n if (isFunction(callback)) callback(targetItems);\n return;\n }\n\n // Prepare the items.\n for (i = 0; i < targetItems.length; i++) {\n item = targetItems[i];\n\n // If inactive item is shown or active item is hidden we need to do\n // layout.\n if ((toVisible && !item._isActive) || (!toVisible && item._isActive)) {\n needsLayout = true;\n }\n\n // If inactive item is shown we also need to do a little hack to make the\n // item not animate it's next positioning (layout).\n item._layout._skipNextAnimation = !!(toVisible && !item._isActive);\n\n // If a hidden item is being shown we need to refresh the item's\n // dimensions.\n if (toVisible && item._visibility._isHidden) {\n hiddenItems.push(item);\n }\n\n // Add item to layout or remove it from layout.\n if (toVisible) {\n item._addToLayout();\n } else {\n item._removeFromLayout();\n }\n }\n\n // Force refresh the dimensions of all hidden items.\n if (hiddenItems.length) {\n this.refreshItems(hiddenItems, true);\n hiddenItems.length = 0;\n }\n\n // Show the items in sync with the next layout.\n function triggerVisibilityChange() {\n if (needsLayout && opts.syncWithLayout !== false) {\n grid.off(EVENT_LAYOUT_START, triggerVisibilityChange);\n }\n\n if (grid._hasListeners(startEvent)) {\n grid._emit(startEvent, targetItems.slice(0));\n }\n\n for (i = 0; i < targetItems.length; i++) {\n // Make sure the item is still in the original grid. There is a chance\n // that the item starts migrating before tiggerVisibilityChange is called.\n if (targetItems[i]._gridId !== grid._id) {\n if (--counter < 1) {\n if (isFunction(callback)) callback(completedItems.slice(0));\n if (grid._hasListeners(endEvent)) grid._emit(endEvent, completedItems.slice(0));\n }\n continue;\n }\n\n targetItems[i]._visibility[method](isInstant, function (interrupted, item) {\n // If the current item's animation was not interrupted add it to the\n // completedItems array.\n if (!interrupted) completedItems.push(item);\n\n // If all items have finished their animations call the callback\n // and emit showEnd/hideEnd event.\n if (--counter < 1) {\n if (isFunction(callback)) callback(completedItems.slice(0));\n if (grid._hasListeners(endEvent)) grid._emit(endEvent, completedItems.slice(0));\n }\n });\n }\n }\n\n // Trigger the visibility change, either async with layout or instantly.\n if (needsLayout && opts.syncWithLayout !== false) {\n this.on(EVENT_LAYOUT_START, triggerVisibilityChange);\n } else {\n triggerVisibilityChange();\n }\n\n // Trigger layout if needed.\n if (needsLayout && layout) {\n this.layout(layout === INSTANT_LAYOUT, isFunction(layout) ? layout : undefined);\n }\n};\n\n/**\n * Private helpers\n * ***************\n */\n\n/**\n * Merge default settings with user settings. The returned object is a new\n * object with merged values. The merging is a deep merge meaning that all\n * objects and arrays within the provided settings objects will be also merged\n * so that modifying the values of the settings object will have no effect on\n * the returned object.\n *\n * @param {Object} defaultSettings\n * @param {Object} [userSettings]\n * @returns {Object} Returns a new object.\n */\nfunction mergeSettings(defaultSettings, userSettings) {\n // Create a fresh copy of default settings.\n var settings = mergeObjects({}, defaultSettings);\n\n // Merge user settings to default settings.\n if (userSettings) {\n settings = mergeObjects(settings, userSettings);\n }\n\n // Handle visible/hidden styles manually so that the whole object is\n // overridden instead of the props.\n\n if (userSettings && userSettings.visibleStyles) {\n settings.visibleStyles = userSettings.visibleStyles;\n } else if (defaultSettings && defaultSettings.visibleStyles) {\n settings.visibleStyles = defaultSettings.visibleStyles;\n }\n\n if (userSettings && userSettings.hiddenStyles) {\n settings.hiddenStyles = userSettings.hiddenStyles;\n } else if (defaultSettings && defaultSettings.hiddenStyles) {\n settings.hiddenStyles = defaultSettings.hiddenStyles;\n }\n\n return settings;\n}\n\n/**\n * Merge two objects recursively (deep merge). The source object's properties\n * are merged to the target object.\n *\n * @param {Object} target\n * - The target object.\n * @param {Object} source\n * - The source object.\n * @returns {Object} Returns the target object.\n */\nfunction mergeObjects(target, source) {\n var sourceKeys = Object.keys(source);\n var length = sourceKeys.length;\n var isSourceObject;\n var propName;\n var i;\n\n for (i = 0; i < length; i++) {\n propName = sourceKeys[i];\n isSourceObject = isPlainObject(source[propName]);\n\n // If target and source values are both objects, merge the objects and\n // assign the merged value to the target property.\n if (isPlainObject(target[propName]) && isSourceObject) {\n target[propName] = mergeObjects(mergeObjects({}, target[propName]), source[propName]);\n continue;\n }\n\n // If source's value is object and target's is not let's clone the object as\n // the target's value.\n if (isSourceObject) {\n target[propName] = mergeObjects({}, source[propName]);\n continue;\n }\n\n // If source's value is an array let's clone the array as the target's\n // value.\n if (Array.isArray(source[propName])) {\n target[propName] = source[propName].slice(0);\n continue;\n }\n\n // In all other cases let's just directly assign the source's value as the\n // target's value.\n target[propName] = source[propName];\n }\n\n return target;\n}\n\n/**\n * Collect and return initial items for grid.\n *\n * @param {HTMLElement} gridElement\n * @param {?(HTMLElement[]|NodeList|HtmlCollection|String)} elements\n * @returns {(HTMLElement[]|NodeList|HtmlCollection)}\n */\nfunction getInitialGridElements(gridElement, elements) {\n // If we have a wildcard selector let's return all the children.\n if (elements === '*') {\n return gridElement.children;\n }\n\n // If we have some more specific selector, let's filter the elements.\n if (typeof elements === STRING_TYPE) {\n var result = [];\n var children = gridElement.children;\n for (var i = 0; i < children.length; i++) {\n if (elementMatches(children[i], elements)) {\n result.push(children[i]);\n }\n }\n return result;\n }\n\n // If we have an array of elements or a node list.\n if (Array.isArray(elements) || isNodeList(elements)) {\n return elements;\n }\n\n // Otherwise just return an empty array.\n return [];\n}\n\n/**\n * Bind grid's resize handler to window.\n *\n * @param {Grid} grid\n * @param {(Number|Boolean)} delay\n */\nfunction bindLayoutOnResize(grid, delay) {\n if (typeof delay !== NUMBER_TYPE) {\n delay = delay === true ? 0 : -1;\n }\n\n if (delay >= 0) {\n grid._resizeHandler = debounce(function () {\n grid.refreshItems().layout();\n }, delay);\n\n window.addEventListener('resize', grid._resizeHandler);\n }\n}\n\n/**\n * Unbind grid's resize handler from window.\n *\n * @param {Grid} grid\n */\nfunction unbindLayoutOnResize(grid) {\n if (grid._resizeHandler) {\n grid._resizeHandler(true);\n window.removeEventListener('resize', grid._resizeHandler);\n grid._resizeHandler = null;\n }\n}\n\n/**\n * Normalize style declaration object, returns a normalized (new) styles object\n * (prefixed properties and invalid properties removed).\n *\n * @param {Object} styles\n * @returns {Object}\n */\nfunction normalizeStyles(styles) {\n var normalized = {};\n var docElemStyle = document.documentElement.style;\n var prop, prefixedProp;\n\n // Normalize visible styles (prefix and remove invalid).\n for (prop in styles) {\n if (!styles[prop]) continue;\n prefixedProp = getPrefixedPropName(docElemStyle, prop);\n if (!prefixedProp) continue;\n normalized[prefixedProp] = styles[prop];\n }\n\n return normalized;\n}\n\n/**\n * Create index map from items.\n *\n * @param {Item[]} items\n * @returns {Object}\n */\nfunction createIndexMap(items) {\n var result = {};\n for (var i = 0; i < items.length; i++) {\n result[items[i]._id] = i;\n }\n return result;\n}\n\n/**\n * Sort comparer function for items' index map.\n *\n * @param {Object} indexMap\n * @param {Item} itemA\n * @param {Item} itemB\n * @returns {Number}\n */\nfunction compareIndexMap(indexMap, itemA, itemB) {\n var indexA = indexMap[itemA._id];\n var indexB = indexMap[itemB._id];\n return indexA - indexB;\n}\n\nexport default Grid;\n","/*!\n * chartjs-chart-matrix v2.0.1\n * https://chartjs-chart-matrix.pages.dev/\n * (c) 2023 Jukka Kurkela\n * Released under the MIT license\n */\nimport { DatasetController, Element } from 'chart.js';\nimport { toTRBLCorners, addRoundedRectPath, isObject } from 'chart.js/helpers';\n\nvar version = \"2.0.1\";\n\nclass MatrixController extends DatasetController {\n\n static id = 'matrix';\n static version = version;\n\n static defaults = {\n dataElementType: 'matrix',\n\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height']\n }\n },\n };\n\n static overrides = {\n interaction: {\n mode: 'nearest',\n intersect: true\n },\n scales: {\n x: {\n type: 'linear',\n offset: true\n },\n y: {\n type: 'linear',\n reverse: true\n }\n },\n };\n\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n\n update(mode) {\n const me = this;\n const meta = me._cachedMeta;\n\n me.updateElements(meta.data, 0, meta.data.length, mode);\n }\n\n updateElements(rects, start, count, mode) {\n const me = this;\n const reset = mode === 'reset';\n const {xScale, yScale} = me._cachedMeta;\n const firstOpts = me.resolveDataElementOptions(start, mode);\n const sharedOptions = me.getSharedOptions(mode, rects[start], firstOpts);\n\n for (let i = start; i < start + count; i++) {\n const parsed = !reset && me.getParsed(i);\n const x = reset ? xScale.getBasePixel() : xScale.getPixelForValue(parsed.x);\n const y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(parsed.y);\n const options = me.resolveDataElementOptions(i, mode);\n const {width, height, anchorX, anchorY} = options;\n const properties = {\n x: resolveX(anchorX, x, width),\n y: resolveY(anchorY, y, height),\n width,\n height,\n options\n };\n me.updateElement(rects[i], i, properties, mode);\n }\n\n me.updateSharedOptions(sharedOptions, mode);\n }\n\n draw() {\n const me = this;\n const data = me.getMeta().data || [];\n let i, ilen;\n\n for (i = 0, ilen = data.length; i < ilen; ++i) {\n data[i].draw(me._ctx);\n }\n }\n}\n\nfunction resolveX(anchorX, x, width) {\n if (anchorX === 'left' || anchorX === 'start') {\n return x;\n }\n if (anchorX === 'right' || anchorX === 'end') {\n return x - width;\n }\n return x - width / 2;\n}\n\nfunction resolveY(anchorY, y, height) {\n if (anchorY === 'top' || anchorY === 'start') {\n return y;\n }\n if (anchorY === 'bottom' || anchorY === 'end') {\n return y - height;\n }\n return y - height / 2;\n}\n\n/**\n * Helper function to get the bounds of the rect\n * @param {MatrixElement} rect the rect\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the rect\n * @private\n */\nfunction getBounds(rect, useFinalPosition) {\n const {x, y, width, height} = rect.getProps(['x', 'y', 'width', 'height'], useFinalPosition);\n return {left: x, top: y, right: x + width, bottom: y + height};\n}\n\nfunction limit(value, min, max) {\n return Math.max(Math.min(value, max), min);\n}\n\nfunction parseBorderWidth(rect, maxW, maxH) {\n const value = rect.options.borderWidth;\n let t, r, b, l;\n\n if (isObject(value)) {\n t = +value.top || 0;\n r = +value.right || 0;\n b = +value.bottom || 0;\n l = +value.left || 0;\n } else {\n t = r = b = l = +value || 0;\n }\n\n return {\n t: limit(t, 0, maxH),\n r: limit(r, 0, maxW),\n b: limit(b, 0, maxH),\n l: limit(l, 0, maxW)\n };\n}\n\nfunction boundingRects(rect) {\n const bounds = getBounds(rect);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(rect, width / 2, height / 2);\n\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b\n }\n };\n}\n\nfunction inRange(rect, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const bounds = !rect || (skipX && skipY) ? false : getBounds(rect, useFinalPosition);\n\n return bounds\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\n}\n\nclass MatrixElement extends Element {\n\n static id = 'matrix';\n\n static defaults = {\n backgroundColor: undefined,\n borderColor: undefined,\n borderWidth: undefined,\n borderRadius: 0,\n anchorX: 'center',\n anchorY: 'center',\n width: 20,\n height: 20\n };\n\n constructor(cfg) {\n super();\n\n this.options = undefined;\n this.width = undefined;\n this.height = undefined;\n\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n\n draw(ctx) {\n const options = this.options;\n const {inner, outer} = boundingRects(this);\n const radius = toTRBLCorners(options.borderRadius);\n\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {x: outer.x, y: outer.y, w: outer.w, h: outer.h, radius});\n addRoundedRectPath(ctx, {x: inner.x, y: inner.y, w: inner.w, h: inner.h, radius});\n ctx.fillStyle = options.backgroundColor;\n ctx.fill();\n ctx.fillStyle = options.borderColor;\n ctx.fill('evenodd');\n } else {\n ctx.beginPath();\n addRoundedRectPath(ctx, {x: inner.x, y: inner.y, w: inner.w, h: inner.h, radius});\n ctx.fillStyle = options.backgroundColor;\n ctx.fill();\n }\n\n ctx.restore();\n }\n\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n\n getCenterPoint(useFinalPosition) {\n const {x, y, width, height} = this.getProps(['x', 'y', 'width', 'height'], useFinalPosition);\n return {\n x: x + width / 2,\n y: y + height / 2\n };\n }\n\n tooltipPosition() {\n return this.getCenterPoint();\n }\n\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nexport { MatrixController, MatrixElement };\n","/*!\n * Glide.js v3.7.1\n * (c) 2013-2024 Jędrzej Chałubek (https://github.com/jedrzejchalubek/)\n * Released under the MIT License.\n */\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _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\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(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\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nfunction _get() {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}\n\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A number of slides moved on single swipe.\n *\n * Available types:\n * `` - Moves slider by one slide per swipe\n * `|` - Moves slider between views per swipe (number of slides defined in `perView` options)\n *\n * @type {String}\n */\n perSwipe: '',\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Wait for the animation to finish until the next user input can be processed\n *\n * @type {boolean}\n */\n waitForTransition: true,\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Defines how many clones of current viewport will be generated.\n *\n * @type {Number}\n */\n cloningRatio: 1,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n type: {\n slider: 'glide--slider',\n carousel: 'glide--carousel'\n },\n slide: {\n clone: 'glide__slide--clone',\n active: 'glide__slide--active'\n },\n arrow: {\n disabled: 'glide__arrow--disabled'\n },\n nav: {\n active: 'glide__bullet--active'\n }\n }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n console.error(\"[Glide warn]: \".concat(msg));\n}\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n return parseInt(value);\n}\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\n\nfunction toFloat(value) {\n return parseFloat(value);\n}\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction isObject(value) {\n var type = _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\n\nfunction isArray(value) {\n return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\n\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\n\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n return r[k], r;\n }, {});\n}\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\n\nfunction mergeOptions(defaults, settings) {\n var options = Object.assign({}, defaults, settings); // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n\n if (settings.hasOwnProperty('classes')) {\n options.classes = Object.assign({}, defaults.classes, settings.classes);\n var properties = ['direction', 'type', 'slide', 'arrow', 'nav'];\n properties.forEach(function (property) {\n if (settings.classes.hasOwnProperty(property)) {\n options.classes[property] = _objectSpread2(_objectSpread2({}, defaults.classes[property]), settings.classes[property]);\n }\n });\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = Object.assign({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = /*#__PURE__*/function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n _createClass(EventsBus, [{\n key: \"on\",\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n\n return;\n } // Create the event's object if not yet created\n\n\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n } // Add the handler to queue\n\n\n var index = this.events[event].push(handler) - 1; // Provide handle back for removal of event\n\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: \"emit\",\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n\n return;\n } // If the event doesn't exist, or there's no handlers in queue, just leave\n\n\n if (!this.hop.call(this.events, event)) {\n return;\n } // Cycle through events queue, fire!\n\n\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n\n return EventsBus;\n}();\n\nvar Glide$1 = /*#__PURE__*/function () {\n /**\r\n * Construct glide.\r\n *\r\n * @param {String} selector\r\n * @param {Object} options\r\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n /**\r\n * Initializes glide.\r\n *\r\n * @param {Object} extensions Collection of extensions to initialize.\r\n * @return {Glide}\r\n */\n\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n /**\r\n * Collects an instance `translate` transformers.\r\n *\r\n * @param {Array} transformers Collection of transformers.\r\n * @return {Void}\r\n */\n\n }, {\n key: \"mutate\",\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n /**\r\n * Updates glide with specified settings.\r\n *\r\n * @param {Object} settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"update\",\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n /**\r\n * Change slide with specified pattern. A pattern must be in the special format:\r\n * `>` - Move one forward\r\n * `<` - Move one backward\r\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n * `>>` - Rewinds to end (last slide)\r\n * `<<` - Rewinds to start (first slide)\r\n * `|>` - Move one viewport forward\r\n * `|<` - Move one viewport backward\r\n *\r\n * @param {String} pattern\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"go\",\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n /**\r\n * Move track by specified distance.\r\n *\r\n * @param {String} distance\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"move\",\n value: function move(distance) {\n this._c.Transition.disable();\n\n this._c.Move.make(distance);\n\n return this;\n }\n /**\r\n * Destroy instance and revert all changes done by this._c.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n /**\r\n * Start instance autoplaying.\r\n *\r\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"play\",\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n /**\r\n * Stop instance autoplaying.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"pause\",\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n /**\r\n * Sets glide into a idle status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"disable\",\n value: function disable() {\n this.disabled = true;\n return this;\n }\n /**\r\n * Sets glide into a active status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"enable\",\n value: function enable() {\n this.disabled = false;\n return this;\n }\n /**\r\n * Adds cuutom event listener with handler.\r\n *\r\n * @param {String|Array} event\r\n * @param {Function} handler\r\n * @return {Glide}\r\n */\n\n }, {\n key: \"on\",\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n /**\r\n * Checks if glide is a precised type.\r\n *\r\n * @param {String} name\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"isType\",\n value: function isType(name) {\n return this.settings.type === name;\n }\n /**\r\n * Gets value of the core options.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"settings\",\n get: function get() {\n return this._o;\n }\n /**\r\n * Sets value of the core options.\r\n *\r\n * @param {Object} o\r\n * @return {Void}\r\n */\n ,\n set: function set(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n /**\r\n * Gets current index of the slider.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: \"index\",\n get: function get() {\n return this._i;\n }\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set(i) {\n this._i = toInt(i);\n }\n /**\r\n * Gets type name of the slider.\r\n *\r\n * @return {String}\r\n */\n\n }, {\n key: \"type\",\n get: function get() {\n return this.settings.type;\n }\n /**\r\n * Gets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n\n }, {\n key: \"disabled\",\n get: function get() {\n return this._d;\n }\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set(status) {\n this._d = !!status;\n }\n }]);\n\n return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n !Glide.settings.waitForTransition || Glide.disable();\n this.move = move;\n Events.emit('run.before', this.move);\n this.calculate();\n Events.emit('run', this.move);\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset()) {\n _this._o = false;\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n Glide.enable();\n });\n }\n },\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Number|Undefined}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction; // By default assume that size of view is equal to one slide\n\n var viewSize = 1; // While direction is `=` we want jump to\n // a specified index described in steps.\n\n if (direction === '=') {\n // Check if bound is true, \n // as we want to avoid whitespaces.\n if (Glide.settings.bound && toInt(steps) > length) {\n Glide.index = length;\n return;\n }\n\n Glide.index = steps;\n return;\n } // When pattern is equal to `>>` we want\n // fast forward to the last slide.\n\n\n if (direction === '>' && steps === '>') {\n Glide.index = length;\n return;\n } // When pattern is equal to `<<` we want\n // fast forward to the first slide.\n\n\n if (direction === '<' && steps === '<') {\n Glide.index = 0;\n return;\n } // pagination movement\n\n\n if (direction === '|') {\n viewSize = Glide.settings.perView || 1;\n } // we are moving forward\n\n\n if (direction === '>' || direction === '|' && steps === '>') {\n var index = calculateForwardIndex(viewSize);\n\n if (index > length) {\n this._o = true;\n }\n\n Glide.index = normalizeForwardIndex(index, viewSize);\n return;\n } // we are moving backward\n\n\n if (direction === '<' || direction === '|' && steps === '<') {\n var _index = calculateBackwardIndex(viewSize);\n\n if (_index < 0) {\n this._o = true;\n }\n\n Glide.index = normalizeBackwardIndex(_index, viewSize);\n return;\n }\n\n warn(\"Invalid direction pattern [\".concat(direction).concat(steps, \"] has been used\"));\n },\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index <= 0;\n },\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index >= this.length;\n },\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset() {\n var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n if (!direction) {\n return this._o;\n }\n\n if (!this._o) {\n return false;\n } // did we view to the right?\n\n\n if (direction === '|>') {\n return this.move.direction === '|' && this.move.steps === '>';\n } // did we view to the left?\n\n\n if (direction === '|<') {\n return this.move.direction === '|' && this.move.steps === '<';\n }\n\n return this.move.direction === direction;\n },\n\n /**\n * Checks if bound mode is active\n *\n * @return {Boolean}\n */\n isBound: function isBound() {\n return Glide.isType('slider') && Glide.settings.focusAt !== 'center' && Glide.settings.bound;\n }\n };\n /**\n * Returns index value to move forward/to the right\n *\n * @param viewSize\n * @returns {Number}\n */\n\n function calculateForwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index + viewSize;\n }\n\n return index + (viewSize - index % viewSize);\n }\n /**\n * Normalizes the given forward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {Number}\n */\n\n\n function normalizeForwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index <= length) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index - (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on the last possible index value given by bound\n if (Run.isBound() && !Run.isEnd()) {\n return length;\n }\n\n return 0;\n }\n\n if (Run.isBound()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n /**\n * Calculates index value to move backward/to the left\n *\n * @param viewSize\n * @returns {Number}\n */\n\n\n function calculateBackwardIndex(viewSize) {\n var index = Glide.index;\n\n if (Glide.isType('carousel')) {\n return index - viewSize;\n } // ensure our back navigation results in the same index as a forward navigation\n // to experience a homogeneous paging\n\n\n var view = Math.ceil(index / viewSize);\n return (view - 1) * viewSize;\n }\n /**\n * Normalizes the given backward index based on glide settings, preventing it to exceed certain boundaries\n *\n * @param index\n * @param length\n * @param viewSize\n * @returns {*}\n */\n\n\n function normalizeBackwardIndex(index, viewSize) {\n var length = Run.length;\n\n if (index >= 0) {\n return index;\n }\n\n if (Glide.isType('carousel')) {\n return index + (length + 1);\n }\n\n if (Glide.settings.rewind) {\n // bound does funny things with the length, therefor we have to be certain\n // that we are on first possible index value before we to rewind to the length given by bound\n if (Run.isBound() && Run.isStart()) {\n return length;\n }\n\n return Math.floor(length / viewSize) * viewSize;\n }\n\n return 0;\n }\n\n define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length; // If the `bound` option is active, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (this.isBound()) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\n\nfunction throttle(func, wait) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var timeout, context, args, result;\n var previous = 0;\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\nfunction Gaps (Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = \"\".concat(this.value / 2, \"px\");\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n define(Gaps, 'grow', {\n /**\n * Gets additional dimensions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * Components.Sizes.length;\n }\n });\n define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n return Gaps.value * (perView - 1) / perView;\n }\n });\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n/**\n * Coerces a NodeList to an Array.\n *\n * @param {NodeList} nodeList\n * @return {Array}\n */\n\nfunction toArray(nodeList) {\n return Array.prototype.slice.call(nodeList);\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\nfunction Html (Glide, Components, Events) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.collectSlides();\n },\n\n /**\n * Collect slides\n */\n collectSlides: function collectSlides() {\n this.slides = toArray(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.slide.clone);\n });\n }\n };\n define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = document.querySelector(r);\n }\n\n if (r !== null) {\n Html._r = r;\n } else {\n warn('Root element must be a existing Html node');\n }\n }\n });\n define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n Html._t = t;\n }\n });\n define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n /**\n * Add/remove/reorder dynamic slides\n */\n\n Events.on('update', function () {\n Html.collectSlides();\n });\n return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n this.offset = offset;\n Events.emit('move', {\n movement: this.value\n });\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimensions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = \"\".concat(this.slideWidth, \"px\");\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n /**\n * Setups dimensions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper() {\n Components.Html.wrapper.style.width = \"\".concat(this.wrapperSize, \"px\");\n },\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n define(Sizes, 'width', {\n /**\n * Gets width value of the slider (visible area).\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.track.offsetWidth;\n }\n });\n define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n define(Sizes, 'slideWidth', {\n /**\n * Gets width value of a single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimensions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Sizes.remove();\n });\n return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n this.typeClass();\n this.activeClass();\n Events.emit('build.after');\n },\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes.type[Glide.settings.type]);\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.slide.active);\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.slide.active);\n });\n }\n },\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var _Glide$settings$class = Glide.settings.classes,\n type = _Glide$settings$class.type,\n slide = _Glide$settings$class.slide;\n Components.Html.root.classList.remove(type[Glide.settings.type]);\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(slide.active);\n });\n }\n };\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimensions\n * - on updating settings via API\n */\n\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n\n Events.on('move.after', function () {\n Build.activeClass();\n });\n return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n /**\n * Collect clones with pattern.\n *\n * @return {[]}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes,\n cloningRatio = _Glide$settings.cloningRatio;\n\n if (slides.length > 0) {\n var peekIncrementer = +!!Glide.settings.peek;\n var cloneCount = perView + peekIncrementer + Math.round(perView / 2);\n var append = slides.slice(0, cloneCount).reverse();\n var prepend = slides.slice(cloneCount * -1);\n\n for (var r = 0; r < Math.max(cloningRatio, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < append.length; i++) {\n var clone = append[i].cloneNode(true);\n clone.classList.add(classes.slide.clone);\n items.push(clone);\n }\n\n for (var _i = 0; _i < prepend.length; _i++) {\n var _clone = prepend[_i].cloneNode(true);\n\n _clone.classList.add(classes.slide.clone);\n\n items.unshift(_clone);\n }\n }\n }\n\n return items;\n },\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half * -1).reverse();\n var width = \"\".concat(Components.Sizes.slideWidth, \"px\");\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n define(Clones, 'grow', {\n /**\n * Gets additional dimensions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n\n Events.on('destroy', function () {\n Clones.remove();\n });\n return Clones;\n}\n\nvar EventsBinder = /*#__PURE__*/function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\n }\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n _createClass(EventsBinder, [{\n key: \"on\",\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: \"off\",\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n\n return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\nfunction Direction (Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n\n Events.on('update', function () {\n Direction.mount();\n });\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var multiplier = Math.floor(translate / Components.Sizes.slideWidth);\n return translate + Components.Gaps.value * multiplier;\n }\n };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction Peeking (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\n\nfunction mutator (Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate (Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n var translate3d = \"translate3d(\".concat(-1 * transform, \"px, 0px, 0px)\");\n Components.Html.wrapper.style.mozTransform = translate3d; // needed for supported Firefox 10-15\n\n Components.Html.wrapper.style.webkitTransform = translate3d; // needed for supported Chrome 10-35, Safari 5.1-8, and Opera 15-22\n\n Components.Html.wrapper.style.transform = translate3d;\n },\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n },\n\n /**\n * @return {number}\n */\n getStartIndex: function getStartIndex() {\n var length = Components.Sizes.length;\n var index = Glide.index;\n var perView = Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n return length + (index - perView);\n } // \"modulo length\" converts an index that equals length to zero\n\n\n return (index + perView) % length;\n },\n\n /**\n * @return {number}\n */\n getTravelDistance: function getTravelDistance() {\n var travelDistance = Components.Sizes.slideWidth * Glide.settings.perView;\n\n if (Components.Run.isOffset('>') || Components.Run.isOffset('|>')) {\n // reverse travel distance so that we don't have to change subtract operations\n return travelDistance * -1;\n }\n\n return travelDistance;\n }\n };\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n\n Events.on('move', function (context) {\n if (!Glide.isType('carousel') || !Components.Run.isOffset()) {\n return Translate.set(context.movement);\n }\n\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n Translate.set(Components.Sizes.slideWidth * Glide.index);\n });\n var startWidth = Components.Sizes.slideWidth * Components.Translate.getStartIndex();\n return Translate.set(startWidth - Components.Translate.getTravelDistance());\n });\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Translate.remove();\n });\n return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (disabled) {\n return \"\".concat(property, \" 0ms \").concat(settings.animationTimingFunc);\n }\n\n return \"\".concat(property, \" \").concat(this.duration, \"ms \").concat(settings.animationTimingFunc);\n },\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n this.set();\n },\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n this.set();\n }\n };\n define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n\n Events.on('move', function () {\n Transition.set();\n });\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimensions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n\n Events.on('run', function () {\n Transition.enable();\n });\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n\n Events.on('destroy', function () {\n Transition.remove();\n });\n return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\nfunction Swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n var swipe = this.touches(event);\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n this.bindSwipeMove();\n this.bindSwipeEnd();\n Events.emit('swipe.start');\n }\n },\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n var swipe = this.touches(event);\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n Components.Move.make(subExSx * toFloat(touchRatio));\n Components.Html.root.classList.add(classes.dragging);\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var _Glide$settings2 = Glide.settings,\n perSwipe = _Glide$settings2.perSwipe,\n touchAngle = _Glide$settings2.touchAngle,\n classes = _Glide$settings2.classes;\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \"<\")));\n } else if (swipeDistance < -threshold && swipeDeg < touchAngle) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe, \">\")));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(classes.dragging);\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n Events.emit('swipe.end');\n }\n },\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var _Glide$settings3 = Glide.settings,\n swipeThreshold = _Glide$settings3.swipeThreshold,\n dragThreshold = _Glide$settings3.dragThreshold;\n\n if (swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n Components.Transition.enable();\n return this;\n },\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n Components.Transition.disable();\n return this;\n }\n };\n /**\n * Add component class:\n * - after initial building\n */\n\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n return Swipe;\n}\n\nfunction Images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n return Images;\n}\n\nfunction Anchors (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n\n var detached = false;\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n\n var prevented = false;\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n this.bind();\n },\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n }\n\n detached = true;\n }\n\n return this;\n },\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\nvar PREVIOUS_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\"<\\\"]\");\nvar NEXT_CONTROLS_SELECTOR = \"\".concat(CONTROLS_SELECTOR, \" [data-glide-dir*=\\\">\\\"]\");\nfunction Controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var capture = supportsPassive$1 ? {\n passive: true\n } : false;\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n /**\n * Collection of arrow control HTML elements.\n *\n * @private\n * @type {Object}\n */\n\n this._arrowControls = {\n previous: Components.Html.root.querySelectorAll(PREVIOUS_CONTROLS_SELECTOR),\n next: Components.Html.root.querySelectorAll(NEXT_CONTROLS_SELECTOR)\n };\n this.addBindings();\n },\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (!item) {\n return;\n }\n\n item.classList.add(settings.classes.nav.active);\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.nav.active);\n });\n },\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n item === null || item === void 0 ? void 0 : item.classList.remove(Glide.settings.classes.nav.active);\n },\n\n /**\n * Calculates, removes or adds `Glide.settings.classes.disabledArrow` class on the control arrows\n */\n setArrowState: function setArrowState() {\n if (Glide.settings.rewind) {\n return;\n }\n\n var next = Controls._arrowControls.next;\n var previous = Controls._arrowControls.previous;\n this.resetArrowState(next, previous);\n\n if (Glide.index === 0) {\n this.disableArrow(previous);\n }\n\n if (Glide.index === Components.Run.length) {\n this.disableArrow(next);\n }\n },\n\n /**\n * Removes `Glide.settings.classes.disabledArrow` from given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n resetArrowState: function resetArrowState() {\n var settings = Glide.settings;\n\n for (var _len = arguments.length, lists = new Array(_len), _key = 0; _key < _len; _key++) {\n lists[_key] = arguments[_key];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.remove(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds `Glide.settings.classes.disabledArrow` to given NodeList elements\n *\n * @param {NodeList[]} lists\n */\n disableArrow: function disableArrow() {\n var settings = Glide.settings;\n\n for (var _len2 = arguments.length, lists = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n lists[_key2] = arguments[_key2];\n }\n\n lists.forEach(function (list) {\n toArray(list).forEach(function (element) {\n element.classList.add(settings.classes.arrow.disabled);\n });\n });\n },\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in direction given via the\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {void}\n */\n click: function click(event) {\n if (!supportsPassive$1 && event.type === 'touchstart') {\n event.preventDefault();\n }\n\n var direction = event.currentTarget.getAttribute('data-glide-dir');\n Components.Run.make(Components.Direction.resolve(direction));\n }\n };\n define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n /**\n * Add or remove disabled class of arrow elements\n */\n\n Events.on(['mount.after', 'run'], function () {\n Controls.setArrowState();\n });\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n return Controls;\n}\n\nfunction Keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n var perSwipe = Glide.settings.perSwipe;\n var arrowSymbols = {\n ArrowRight: '>',\n ArrowLeft: '<'\n };\n\n if (['ArrowRight', 'ArrowLeft'].includes(event.code)) {\n Components.Run.make(Components.Direction.resolve(\"\".concat(perSwipe).concat(arrowSymbols[event.code])));\n }\n }\n };\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n\n Events.on('update', function () {\n Keyboard.mount();\n });\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Keyboard;\n}\n\nfunction Autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.enable();\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n /**\n * Enables autoplaying\n *\n * @returns {Void}\n */\n enable: function enable() {\n this._e = true;\n },\n\n /**\n * Disables autoplaying.\n *\n * @returns {Void}\n */\n disable: function disable() {\n this._e = false;\n },\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (!this._e) {\n return;\n }\n\n this.enable();\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n\n Events.emit('autoplay');\n }, this.time);\n }\n }\n },\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n if (_this2._e) {\n _this2.stop();\n }\n });\n Binder.on('mouseout', Components.Html.root, function () {\n if (_this2._e) {\n _this2.start();\n }\n });\n },\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n\n Events.on(['run.before', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n Events.on(['pause', 'destroy'], function () {\n Autoplay.disable();\n Autoplay.stop();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['run.after', 'swipe.end'], function () {\n Autoplay.start();\n });\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n\n Events.on(['play'], function () {\n Autoplay.enable();\n Autoplay.start();\n });\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n\n Events.on('update', function () {\n Autoplay.mount();\n });\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n\n Events.on('destroy', function () {\n Binder.destroy();\n });\n return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\n\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn(\"Breakpoints option must be an object\");\n }\n\n return {};\n}\n\nfunction Breakpoints (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n\n var settings = Glide.settings;\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n\n var points = sortBreakpoints(settings.breakpoints);\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n\n var defaults = Object.assign({}, settings);\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia(\"(max-width: \".concat(point, \"px)\")).matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n\n Object.assign(settings, Breakpoints.match(points));\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n\n Events.on('update', function () {\n points = sortBreakpoints(points);\n defaults = Object.assign({}, settings);\n });\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n // Required\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run,\n // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n};\n\nvar Glide = /*#__PURE__*/function (_Core) {\n _inherits(Glide, _Core);\n\n var _super = _createSuper(Glide);\n\n function Glide() {\n _classCallCheck(this, Glide);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Glide, [{\n key: \"mount\",\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return _get(_getPrototypeOf(Glide.prototype), \"mount\", this).call(this, Object.assign({}, COMPONENTS, extensions));\n }\n }]);\n\n return Glide;\n}(Glide$1);\n\nexport { Glide as default };\n","import root from './_root.js';\nimport toString from './toString.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeParseInt = root.parseInt;\n\n/**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\nfunction parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n}\n\nexport default parseInt;\n","typeof navigator === \"object\" && (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('Plyr', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Plyr = factory());\n})(this, (function () { 'use strict';\n\n function _defineProperty$1(obj, key, value) {\n key = _toPropertyKey(key);\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 return obj;\n }\n function _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n }\n function _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n }\n\n function _classCallCheck(e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n }\n function _defineProperties(e, t) {\n for (var n = 0; n < t.length; n++) {\n var r = t[n];\n r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r);\n }\n }\n function _createClass(e, t, n) {\n return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e;\n }\n function _defineProperty(e, t, n) {\n return t in e ? Object.defineProperty(e, t, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[t] = n, e;\n }\n function ownKeys(e, t) {\n var n = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var r = Object.getOwnPropertySymbols(e);\n t && (r = r.filter(function (t) {\n return Object.getOwnPropertyDescriptor(e, t).enumerable;\n })), n.push.apply(n, r);\n }\n return n;\n }\n function _objectSpread2(e) {\n for (var t = 1; t < arguments.length; t++) {\n var n = null != arguments[t] ? arguments[t] : {};\n t % 2 ? ownKeys(Object(n), !0).forEach(function (t) {\n _defineProperty(e, t, n[t]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : ownKeys(Object(n)).forEach(function (t) {\n Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));\n });\n }\n return e;\n }\n var defaults$1 = {\n addCSS: !0,\n thumbWidth: 15,\n watch: !0\n };\n function matches$1(e, t) {\n return function () {\n return Array.from(document.querySelectorAll(t)).includes(this);\n }.call(e, t);\n }\n function trigger(e, t) {\n if (e && t) {\n var n = new Event(t, {\n bubbles: !0\n });\n e.dispatchEvent(n);\n }\n }\n var getConstructor$1 = function (e) {\n return null != e ? e.constructor : null;\n },\n instanceOf$1 = function (e, t) {\n return !!(e && t && e instanceof t);\n },\n isNullOrUndefined$1 = function (e) {\n return null == e;\n },\n isObject$1 = function (e) {\n return getConstructor$1(e) === Object;\n },\n isNumber$1 = function (e) {\n return getConstructor$1(e) === Number && !Number.isNaN(e);\n },\n isString$1 = function (e) {\n return getConstructor$1(e) === String;\n },\n isBoolean$1 = function (e) {\n return getConstructor$1(e) === Boolean;\n },\n isFunction$1 = function (e) {\n return getConstructor$1(e) === Function;\n },\n isArray$1 = function (e) {\n return Array.isArray(e);\n },\n isNodeList$1 = function (e) {\n return instanceOf$1(e, NodeList);\n },\n isElement$1 = function (e) {\n return instanceOf$1(e, Element);\n },\n isEvent$1 = function (e) {\n return instanceOf$1(e, Event);\n },\n isEmpty$1 = function (e) {\n return isNullOrUndefined$1(e) || (isString$1(e) || isArray$1(e) || isNodeList$1(e)) && !e.length || isObject$1(e) && !Object.keys(e).length;\n },\n is$1 = {\n nullOrUndefined: isNullOrUndefined$1,\n object: isObject$1,\n number: isNumber$1,\n string: isString$1,\n boolean: isBoolean$1,\n function: isFunction$1,\n array: isArray$1,\n nodeList: isNodeList$1,\n element: isElement$1,\n event: isEvent$1,\n empty: isEmpty$1\n };\n function getDecimalPlaces(e) {\n var t = \"\".concat(e).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n return t ? Math.max(0, (t[1] ? t[1].length : 0) - (t[2] ? +t[2] : 0)) : 0;\n }\n function round(e, t) {\n if (1 > t) {\n var n = getDecimalPlaces(t);\n return parseFloat(e.toFixed(n));\n }\n return Math.round(e / t) * t;\n }\n var RangeTouch = function () {\n function e(t, n) {\n _classCallCheck(this, e), is$1.element(t) ? this.element = t : is$1.string(t) && (this.element = document.querySelector(t)), is$1.element(this.element) && is$1.empty(this.element.rangeTouch) && (this.config = _objectSpread2({}, defaults$1, {}, n), this.init());\n }\n return _createClass(e, [{\n key: \"init\",\n value: function () {\n e.enabled && (this.config.addCSS && (this.element.style.userSelect = \"none\", this.element.style.webKitUserSelect = \"none\", this.element.style.touchAction = \"manipulation\"), this.listeners(!0), this.element.rangeTouch = this);\n }\n }, {\n key: \"destroy\",\n value: function () {\n e.enabled && (this.config.addCSS && (this.element.style.userSelect = \"\", this.element.style.webKitUserSelect = \"\", this.element.style.touchAction = \"\"), this.listeners(!1), this.element.rangeTouch = null);\n }\n }, {\n key: \"listeners\",\n value: function (e) {\n var t = this,\n n = e ? \"addEventListener\" : \"removeEventListener\";\n [\"touchstart\", \"touchmove\", \"touchend\"].forEach(function (e) {\n t.element[n](e, function (e) {\n return t.set(e);\n }, !1);\n });\n }\n }, {\n key: \"get\",\n value: function (t) {\n if (!e.enabled || !is$1.event(t)) return null;\n var n,\n r = t.target,\n i = t.changedTouches[0],\n o = parseFloat(r.getAttribute(\"min\")) || 0,\n s = parseFloat(r.getAttribute(\"max\")) || 100,\n u = parseFloat(r.getAttribute(\"step\")) || 1,\n c = r.getBoundingClientRect(),\n a = 100 / c.width * (this.config.thumbWidth / 2) / 100;\n return 0 > (n = 100 / c.width * (i.clientX - c.left)) ? n = 0 : 100 < n && (n = 100), 50 > n ? n -= (100 - 2 * n) * a : 50 < n && (n += 2 * (n - 50) * a), o + round(n / 100 * (s - o), u);\n }\n }, {\n key: \"set\",\n value: function (t) {\n e.enabled && is$1.event(t) && !t.target.disabled && (t.preventDefault(), t.target.value = this.get(t), trigger(t.target, \"touchend\" === t.type ? \"change\" : \"input\"));\n }\n }], [{\n key: \"setup\",\n value: function (t) {\n var n = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {},\n r = null;\n if (is$1.empty(t) || is$1.string(t) ? r = Array.from(document.querySelectorAll(is$1.string(t) ? t : 'input[type=\"range\"]')) : is$1.element(t) ? r = [t] : is$1.nodeList(t) ? r = Array.from(t) : is$1.array(t) && (r = t.filter(is$1.element)), is$1.empty(r)) return null;\n var i = _objectSpread2({}, defaults$1, {}, n);\n if (is$1.string(t) && i.watch) {\n var o = new MutationObserver(function (n) {\n Array.from(n).forEach(function (n) {\n Array.from(n.addedNodes).forEach(function (n) {\n is$1.element(n) && matches$1(n, t) && new e(n, i);\n });\n });\n });\n o.observe(document.body, {\n childList: !0,\n subtree: !0\n });\n }\n return r.map(function (t) {\n return new e(t, n);\n });\n }\n }, {\n key: \"enabled\",\n get: function () {\n return \"ontouchstart\" in document.documentElement;\n }\n }]), e;\n }();\n\n // ==========================================================================\n // Type checking utils\n // ==========================================================================\n\n const getConstructor = input => input !== null && typeof input !== 'undefined' ? input.constructor : null;\n const instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\n const isNullOrUndefined = input => input === null || typeof input === 'undefined';\n const isObject = input => getConstructor(input) === Object;\n const isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\n const isString = input => getConstructor(input) === String;\n const isBoolean = input => getConstructor(input) === Boolean;\n const isFunction = input => typeof input === 'function';\n const isArray = input => Array.isArray(input);\n const isWeakMap = input => instanceOf(input, WeakMap);\n const isNodeList = input => instanceOf(input, NodeList);\n const isTextNode = input => getConstructor(input) === Text;\n const isEvent = input => instanceOf(input, Event);\n const isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\n const isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\n const isTrack = input => instanceOf(input, TextTrack) || !isNullOrUndefined(input) && isString(input.kind);\n const isPromise = input => instanceOf(input, Promise) && isFunction(input.then);\n const isElement = input => input !== null && typeof input === 'object' && input.nodeType === 1 && typeof input.style === 'object' && typeof input.ownerDocument === 'object';\n const isEmpty = input => isNullOrUndefined(input) || (isString(input) || isArray(input) || isNodeList(input)) && !input.length || isObject(input) && !Object.keys(input).length;\n const isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (_) {\n return false;\n }\n };\n var is = {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n promise: isPromise,\n url: isUrl,\n empty: isEmpty\n };\n\n // ==========================================================================\n const transitionEndEvent = (() => {\n const element = document.createElement('span');\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n return is.string(type) ? events[type] : false;\n })();\n\n // Force repaint of element\n function repaint(element, delay) {\n setTimeout(() => {\n try {\n // eslint-disable-next-line no-param-reassign\n element.hidden = true;\n\n // eslint-disable-next-line no-unused-expressions\n element.offsetHeight;\n\n // eslint-disable-next-line no-param-reassign\n element.hidden = false;\n } catch (_) {\n // Do nothing\n }\n }, delay);\n }\n\n // ==========================================================================\n // Browser sniffing\n // Unfortunately, due to mixed support, UA sniffing is required\n // ==========================================================================\n\n const isIE = Boolean(window.document.documentMode);\n const isEdge = /Edge/g.test(navigator.userAgent);\n const isWebKit = 'WebkitAppearance' in document.documentElement.style && !/Edge/g.test(navigator.userAgent);\n const isIPhone = /iPhone|iPod/gi.test(navigator.userAgent) && navigator.maxTouchPoints > 1;\n // navigator.platform may be deprecated but this check is still required\n const isIPadOS = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\n const isIos = /iPad|iPhone|iPod/gi.test(navigator.userAgent) && navigator.maxTouchPoints > 1;\n var browser = {\n isIE,\n isEdge,\n isWebKit,\n isIPhone,\n isIPadOS,\n isIos\n };\n\n // ==========================================================================\n\n // Clone nested objects\n function cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n }\n\n // Get a nested value in an object\n function getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n }\n\n // Deep extend destination object with N more objects\n function extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n const source = sources.shift();\n if (!is.object(source)) {\n return target;\n }\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, {\n [key]: {}\n });\n }\n extend(target[key], source[key]);\n } else {\n Object.assign(target, {\n [key]: source[key]\n });\n }\n });\n return extend(target, ...sources);\n }\n\n // ==========================================================================\n\n // Wrap an element\n function wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets).reverse().forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n }\n\n // Set attributes\n function setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) return;\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes).filter(([, value]) => !is.nullOrUndefined(value)).forEach(([key, value]) => element.setAttribute(key, value));\n }\n\n // Create a DocumentFragment\n function createElement(type, attributes, text) {\n // Create a new \n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n }\n\n // Insert an element after another\n function insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) return;\n target.parentNode.insertBefore(element, target.nextSibling);\n }\n\n // Insert a DocumentFragment\n function insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) return;\n parent.appendChild(createElement(type, attributes, text));\n }\n\n // Remove element(s)\n function removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n element.parentNode.removeChild(element);\n }\n\n // Remove all child elements\n function emptyElement(element) {\n if (!is.element(element)) return;\n let {\n length\n } = element.childNodes;\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n }\n\n // Replace element\n function replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) return null;\n oldChild.parentNode.replaceChild(newChild, oldChild);\n return newChild;\n }\n\n // Get an attribute object from a string selector\n function getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!is.string(sel) || is.empty(sel)) return {};\n const attributes = {};\n const existing = extend({}, existingAttributes);\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n // Get the parts and value\n const parts = stripped.split('=');\n const [key] = parts;\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n // Get the first character\n const start = selector.charAt(0);\n switch (start) {\n case '.':\n // Add to existing classname\n if (is.string(existing.class)) {\n attributes.class = `${existing.class} ${className}`;\n } else {\n attributes.class = className;\n }\n break;\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n case '[':\n // Attribute selector\n attributes[key] = value;\n break;\n }\n });\n return extend(existing, attributes);\n }\n\n // Toggle hidden\n function toggleHidden(element, hidden) {\n if (!is.element(element)) return;\n let hide = hidden;\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n // eslint-disable-next-line no-param-reassign\n element.hidden = hide;\n }\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n function toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n element.classList[method](className);\n return element.classList.contains(className);\n }\n return false;\n }\n\n // Has class name\n function hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n }\n\n // Element matches selector\n function matches(element, selector) {\n const {\n prototype\n } = Element;\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n const method = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n return method.call(element, selector);\n }\n\n // Closest ancestor element matching selector (also tests element itself)\n function closest$1(element, selector) {\n const {\n prototype\n } = Element;\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n function closestElement() {\n let el = this;\n do {\n if (matches.matches(el, selector)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n }\n const method = prototype.closest || closestElement;\n return method.call(element, selector);\n }\n\n // Find all elements\n function getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n }\n\n // Find a single element\n function getElement(selector) {\n return this.elements.container.querySelector(selector);\n }\n\n // Set focus and tab focus class\n function setFocus(element = null, focusVisible = false) {\n if (!is.element(element)) return;\n\n // Set regular focus\n element.focus({\n preventScroll: true,\n focusVisible\n });\n }\n\n // ==========================================================================\n\n // Default codecs for checking mimetype support\n const defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora'\n };\n\n // Check for feature support\n const support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n // Check for support\n // Basic functionality vs full UI\n check(type, provider) {\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput;\n return {\n api,\n ui\n };\n },\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n // While iPhone's support picture-in-picture for some apps, seemingly Safari isn't one of them\n // It will throw the following error when trying to enter picture-in-picture\n // `NotSupportedError: The Picture-in-Picture mode is not supported.`\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n return false;\n })(),\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(input) {\n if (is.empty(input)) {\n return false;\n }\n const [mediaType] = input.split('/');\n let type = input;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[input]}\"`;\n }\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (_) {\n return false;\n }\n },\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n // Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n // Detect transitions support\n transitions: transitionEndEvent !== false,\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches\n };\n\n // ==========================================================================\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n const supportsPassiveListeners = (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n }\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (_) {\n // Do nothing\n }\n return supported;\n })();\n\n // Toggle event listener\n function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({\n element,\n type,\n callback,\n options\n });\n }\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n }\n\n // Bind event handler\n function on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n }\n\n // Unbind event handler\n function off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n }\n\n // Bind once-only event handler\n function once(element, events = '', callback, passive = true, capture = false) {\n const onceCallback = (...args) => {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n };\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n }\n\n // Trigger event\n function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: {\n ...detail,\n plyr: this\n }\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n }\n\n // Unbind all cached event listeners\n function unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const {\n element,\n type,\n callback,\n options\n } = item;\n element.removeEventListener(type, callback, options);\n });\n this.eventListeners = [];\n }\n }\n\n // Run method when / if player is ready\n function ready() {\n return new Promise(resolve => this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)).then(() => {});\n }\n\n /**\n * Silence a Promise-like object.\n * This is useful for avoiding non-harmful, but potentially confusing \"uncaught\n * play promise\" rejection error messages.\n * @param {Object} value An object that may or may not be `Promise`-like.\n */\n function silencePromise(value) {\n if (is.promise(value)) {\n value.then(null, () => {});\n }\n }\n\n // ==========================================================================\n\n // Remove duplicates in an array\n function dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n return array.filter((item, index) => array.indexOf(item) === index);\n }\n\n // Get the closest value in an array\n function closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n return array.reduce((prev, curr) => Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev);\n }\n\n // ==========================================================================\n\n // Check support for a CSS declaration\n function supportsCSS(declaration) {\n if (!window || !window.CSS) {\n return false;\n }\n return window.CSS.supports(declaration);\n }\n\n // Standard/common aspect ratios\n const standardRatios = [[1, 1], [4, 3], [3, 4], [5, 4], [4, 5], [3, 2], [2, 3], [16, 10], [10, 16], [16, 9], [9, 16], [21, 9], [9, 21], [32, 9], [9, 32]].reduce((out, [x, y]) => ({\n ...out,\n [x / y]: [x, y]\n }), {});\n\n // Validate an aspect ratio\n function validateAspectRatio(input) {\n if (!is.array(input) && (!is.string(input) || !input.includes(':'))) {\n return false;\n }\n const ratio = is.array(input) ? input : input.split(':');\n return ratio.map(Number).every(is.number);\n }\n\n // Reduce an aspect ratio to it's lowest form\n function reduceAspectRatio(ratio) {\n if (!is.array(ratio) || !ratio.every(is.number)) {\n return null;\n }\n const [width, height] = ratio;\n const getDivider = (w, h) => h === 0 ? w : getDivider(h, w % h);\n const divider = getDivider(width, height);\n return [width / divider, height / divider];\n }\n\n // Calculate an aspect ratio\n function getAspectRatio(input) {\n const parse = ratio => validateAspectRatio(ratio) ? ratio.split(':').map(Number) : null;\n // Try provided ratio\n let ratio = parse(input);\n\n // Get from config\n if (ratio === null) {\n ratio = parse(this.config.ratio);\n }\n\n // Get from embed\n if (ratio === null && !is.empty(this.embed) && is.array(this.embed.ratio)) {\n ({\n ratio\n } = this.embed);\n }\n\n // Get from HTML5 video\n if (ratio === null && this.isHTML5) {\n const {\n videoWidth,\n videoHeight\n } = this.media;\n ratio = [videoWidth, videoHeight];\n }\n return reduceAspectRatio(ratio);\n }\n\n // Set aspect ratio for responsive container\n function setAspectRatio(input) {\n if (!this.isVideo) {\n return {};\n }\n const {\n wrapper\n } = this.elements;\n const ratio = getAspectRatio.call(this, input);\n if (!is.array(ratio)) {\n return {};\n }\n const [x, y] = reduceAspectRatio(ratio);\n const useNative = supportsCSS(`aspect-ratio: ${x}/${y}`);\n const padding = 100 / x * y;\n if (useNative) {\n wrapper.style.aspectRatio = `${x}/${y}`;\n } else {\n wrapper.style.paddingBottom = `${padding}%`;\n }\n\n // For Vimeo we have an extra
to hide the standard controls and UI\n if (this.isVimeo && !this.config.vimeo.premium && this.supported.ui) {\n const height = 100 / this.media.offsetWidth * parseInt(window.getComputedStyle(this.media).paddingBottom, 10);\n const offset = (height - padding) / (height / 50);\n if (this.fullscreen.active) {\n wrapper.style.paddingBottom = null;\n } else {\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n } else if (this.isHTML5) {\n wrapper.classList.add(this.config.classNames.videoFixedRatio);\n }\n return {\n padding,\n ratio\n };\n }\n\n // Round an aspect ratio to closest standard ratio\n function roundAspectRatio(x, y, tolerance = 0.05) {\n const ratio = x / y;\n const closestRatio = closest(Object.keys(standardRatios), ratio);\n\n // Check match is within tolerance\n if (Math.abs(closestRatio - ratio) <= tolerance) {\n return standardRatios[closestRatio];\n }\n\n // No match\n return [x, y];\n }\n\n // Get the size of the viewport\n // https://stackoverflow.com/questions/1248081/how-to-get-the-browser-viewport-dimensions\n function getViewportSize() {\n const width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n const height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n return [width, height];\n }\n\n // ==========================================================================\n const html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources (if type is specified)\n return sources.filter(source => {\n const type = source.getAttribute('type');\n if (is.empty(type)) {\n return true;\n }\n return support.mime.call(this, type);\n });\n },\n // Get quality levels\n getQualityOptions() {\n // Whether we're forcing all options (e.g. for streaming)\n if (this.config.quality.forced) {\n return this.config.quality.options;\n }\n\n // Get sizes from elements\n return html5.getSources.call(this).map(source => Number(source.getAttribute('size'))).filter(Boolean);\n },\n setup() {\n if (!this.isHTML5) {\n return;\n }\n const player = this;\n\n // Set speed options from config\n player.options.speed = player.config.speed.options;\n\n // Set aspect ratio if fixed\n if (!is.empty(this.config.ratio)) {\n setAspectRatio.call(player);\n }\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(s => s.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('size'));\n },\n set(input) {\n if (player.quality === input) {\n return;\n }\n\n // If we're using an external handler...\n if (player.config.quality.forced && is.function(player.config.quality.onChange)) {\n player.config.quality.onChange(input);\n } else {\n // Get sources\n const sources = html5.getSources.call(player);\n // Get first match for requested size\n const source = sources.find(s => Number(s.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const {\n currentTime,\n paused,\n preload,\n readyState,\n playbackRate\n } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.speed = playbackRate;\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n silencePromise(player.play());\n }\n });\n\n // Load new source\n player.media.load();\n }\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input\n });\n }\n });\n },\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n removeElement(html5.getSources.call(this));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n }\n };\n\n // ==========================================================================\n\n // Generate a random ID\n function generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n }\n\n // Format string\n function format(input, ...args) {\n if (is.empty(input)) return input;\n return input.toString().replace(/{(\\d+)}/g, (_, i) => args[i].toString());\n }\n\n // Get percentage\n function getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n }\n\n // Replace all occurrences of a string in a string\n const replaceAll = (input = '', find = '', replace = '') => input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n\n // Convert to title case\n const toTitleCase = (input = '') => input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.slice(1).toLowerCase());\n\n // Convert string to pascalCase\n function toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n }\n\n // Convert string to pascalCase\n function toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n }\n\n // Remove HTML from a string\n function stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n }\n\n // Like outerHTML, but also works for DocumentFragment\n function getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n }\n\n // ==========================================================================\n\n // Skip i18n for abbreviations and brand names\n const resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube'\n };\n const i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n let string = getDeep(config.i18n, key);\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n return '';\n }\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title\n };\n Object.entries(replace).forEach(([k, v]) => {\n string = replaceAll(string, k, v);\n });\n return string;\n }\n };\n\n class Storage {\n constructor(player) {\n _defineProperty$1(this, \"get\", key => {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n const store = window.localStorage.getItem(this.key);\n if (is.empty(store)) {\n return null;\n }\n const json = JSON.parse(store);\n return is.string(key) && key.length ? json[key] : json;\n });\n _defineProperty$1(this, \"set\", object => {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n try {\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n } catch (_) {\n // Do nothing\n }\n });\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (_) {\n return false;\n }\n }\n }\n\n // ==========================================================================\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n // ==========================================================================\n\n function fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (_) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n request.addEventListener('error', () => {\n throw new Error(request.status);\n });\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n request.send();\n } catch (error) {\n reject(error);\n }\n });\n }\n\n // ==========================================================================\n\n // Load an external SVG sprite\n function loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n const exists = () => document.getElementById(id) !== null;\n const update = (container, data) => {\n // eslint-disable-next-line no-param-reassign\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url).then(result => {\n if (is.empty(result)) {\n return;\n }\n if (useStorage) {\n try {\n window.localStorage.setItem(`${prefix}-${id}`, JSON.stringify({\n content: result\n }));\n } catch (_) {\n // Do nothing\n }\n }\n update(container, result);\n }).catch(() => {});\n }\n }\n\n // ==========================================================================\n\n // Time helpers\n const getHours = value => Math.trunc(value / 60 / 60 % 60, 10);\n const getMinutes = value => Math.trunc(value / 60 % 60, 10);\n const getSeconds = value => Math.trunc(value % 60, 10);\n\n // Format time to UI friendly string\n function formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return formatTime(undefined, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n // Breakdown to hours, mins, secs\n let hours = getHours(time);\n const mins = getMinutes(time);\n const secs = getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n }\n\n // ==========================================================================\n\n // TODO: Don't export a massive object - break down and create class\n const controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const host = window.location.host ? window.location.host : window.top.location.host;\n const cors = url.host !== host || browser.isIE && !window.svg4everybody;\n return {\n url: this.config.iconUrl,\n cors\n };\n },\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen)\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume)\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration)\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n return false;\n }\n },\n // Create icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n // Create \n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(icon, extend(attributes, {\n 'aria-hidden': 'true',\n focusable: 'false'\n }));\n\n // Create the to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add to \n icon.appendChild(use);\n return icon;\n },\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n const attributes = {\n ...attr,\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' ')\n };\n return createElement('span', attributes, text);\n },\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n const badge = createElement('span', {\n class: this.config.classNames.menu.value\n });\n badge.appendChild(createElement('span', {\n class: this.config.classNames.menu.badge\n }, text));\n return badge;\n },\n // Create a
`);\n }\n\n // Set position\n tipElement.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || !this.config.invertTime && this.currentTime) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n if (this.config.markers.enabled) {\n controls.setMarkers.call(this);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n }\n\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n if (is.element(target)) {\n target.checked = true;\n }\n },\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n if (!label.length) {\n return `${value}p`;\n }\n return label;\n }\n return toTitleCase(value);\n case 'captions':\n return captions.getLabel.call(this);\n default:\n return null;\n }\n },\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n if (!label.length) {\n return null;\n }\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality.sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n }).forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality)\n });\n });\n controls.updateSetting.call(this, type, list);\n },\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n // Empty the menu\n emptyElement(list);\n options.forEach(option => {\n const item = createElement('li');\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language'\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language'\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n controls.updateSetting.call(this, type, list);\n },\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Filter out invalid speeds\n this.options.speed = this.options.speed.filter(o => o >= this.minimumSpeed && o <= this.maximumSpeed);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed)\n });\n });\n controls.updateSetting.call(this, type, list);\n },\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const {\n buttons\n } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n toggleHidden(this.elements.settings.menu, !visible);\n },\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, focusVisible = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n let target = pane;\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(p => !p.hidden);\n }\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, focusVisible);\n },\n // Show/hide menu\n toggleMenu(input) {\n const {\n popup\n } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const {\n hidden\n } = popup;\n let show = hidden;\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.key === 'Escape') {\n show = false;\n } else if (is.event(input)) {\n // If Plyr is in a shadowDOM, the event target is set to the component, instead of the\n // Element in the shadowDOM. The path, if available, is complete.\n const target = is.function(input.composedPath) ? input.composedPath()[0] : input.target;\n const isMenuItem = popup.contains(target);\n\n // If the click was inside the menu or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || !isMenuItem && input.target !== button && show) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n removeElement(clone);\n return {\n width,\n height\n };\n },\n // Show a panel in the menu\n showMenuPanel(type = '', focusVisible = false) {\n const target = this.elements.container.querySelector(`#plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, focusVisible);\n },\n // Set the download URL\n setDownloadUrl() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set attribute\n button.setAttribute('href', this.download);\n },\n // Build the default HTML\n create(data) {\n const {\n bindMenuItemShortcuts,\n createButton,\n createProgress,\n createRange,\n createTime,\n setQualityMenu,\n setSpeedMenu,\n showMenuPanel\n } = controls;\n this.elements.controls = null;\n\n // Larger overlaid play button\n if (is.array(this.config.controls) && this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(createButton.call(this, 'play-large'));\n }\n\n // Create the container\n const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n this.elements.controls = container;\n\n // Default item attributes\n const defaultAttributes = {\n class: 'plyr__controls__item'\n };\n\n // Loop through controls in order\n dedupe(is.array(this.config.controls) ? this.config.controls : []).forEach(control => {\n // Restart button\n if (control === 'restart') {\n container.appendChild(createButton.call(this, 'restart', defaultAttributes));\n }\n\n // Rewind button\n if (control === 'rewind') {\n container.appendChild(createButton.call(this, 'rewind', defaultAttributes));\n }\n\n // Play/Pause button\n if (control === 'play') {\n container.appendChild(createButton.call(this, 'play', defaultAttributes));\n }\n\n // Fast forward button\n if (control === 'fast-forward') {\n container.appendChild(createButton.call(this, 'fast-forward', defaultAttributes));\n }\n\n // Progress\n if (control === 'progress') {\n const progressContainer = createElement('div', {\n class: `${defaultAttributes.class} plyr__progress__container`\n });\n const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`\n }));\n\n // Buffer progress\n progress.appendChild(createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = createElement('span', {\n class: this.config.classNames.tooltip\n }, '00:00');\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n this.elements.progress = progress;\n progressContainer.appendChild(this.elements.progress);\n container.appendChild(progressContainer);\n }\n\n // Media current time display\n if (control === 'current-time') {\n container.appendChild(createTime.call(this, 'currentTime', defaultAttributes));\n }\n\n // Media duration display\n if (control === 'duration') {\n container.appendChild(createTime.call(this, 'duration', defaultAttributes));\n }\n\n // Volume controls\n if (control === 'mute' || control === 'volume') {\n let {\n volume\n } = this.elements;\n\n // Create the volume container if needed\n if (!is.element(volume) || !container.contains(volume)) {\n volume = createElement('div', extend({}, defaultAttributes, {\n class: `${defaultAttributes.class} plyr__volume`.trim()\n }));\n this.elements.volume = volume;\n container.appendChild(volume);\n }\n\n // Toggle mute button\n if (control === 'mute') {\n volume.appendChild(createButton.call(this, 'mute'));\n }\n\n // Volume range control\n // Ignored on iOS as it's handled globally\n // https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html\n if (control === 'volume' && !browser.isIos && !browser.isIPadOS) {\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume\n };\n\n // Create the volume range slider\n volume.appendChild(createRange.call(this, 'volume', extend(attributes, {\n id: `plyr-volume-${data.id}`\n })));\n }\n }\n\n // Toggle captions button\n if (control === 'captions') {\n container.appendChild(createButton.call(this, 'captions', defaultAttributes));\n }\n\n // Settings button / menu\n if (control === 'settings' && !is.empty(this.config.settings)) {\n const wrapper = createElement('div', extend({}, defaultAttributes, {\n class: `${defaultAttributes.class} plyr__menu`.trim(),\n hidden: ''\n }));\n wrapper.appendChild(createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false\n }));\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: ''\n });\n const inner = createElement('div');\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu'\n });\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement('button', extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: ''\n }));\n\n // Bind menu shortcuts for keyboard users\n bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on.call(this, menuItem, 'click', () => {\n showMenuPanel.call(this, type, false);\n });\n const flex = createElement('span', null, i18n.get(type, this.config));\n const value = createElement('span', {\n class: this.config.classNames.menu.value\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: ''\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`\n });\n\n // Visible label\n backButton.appendChild(createElement('span', {\n 'aria-hidden': true\n }, i18n.get(type, this.config)));\n\n // Screen reader label\n backButton.appendChild(createElement('span', {\n class: this.config.classNames.hidden\n }, i18n.get('menuBack', this.config)));\n\n // Go back via keyboard\n on.call(this, pane, 'keydown', event => {\n if (event.key !== 'ArrowLeft') return;\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n showMenuPanel.call(this, 'home', true);\n }, false);\n\n // Go back via button click\n on.call(this, backButton, 'click', () => {\n showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(createElement('div', {\n role: 'menu'\n }));\n inner.appendChild(pane);\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n popup.appendChild(inner);\n wrapper.appendChild(popup);\n container.appendChild(wrapper);\n this.elements.settings.popup = popup;\n this.elements.settings.menu = wrapper;\n }\n\n // Picture in picture button\n if (control === 'pip' && support.pip) {\n container.appendChild(createButton.call(this, 'pip', defaultAttributes));\n }\n\n // Airplay button\n if (control === 'airplay' && support.airplay) {\n container.appendChild(createButton.call(this, 'airplay', defaultAttributes));\n }\n\n // Download button\n if (control === 'download') {\n const attributes = extend({}, defaultAttributes, {\n element: 'a',\n href: this.download,\n target: '_blank'\n });\n\n // Set download attribute for HTML5 only\n if (this.isHTML5) {\n attributes.download = '';\n }\n const {\n download\n } = this.config.urls;\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider\n });\n }\n container.appendChild(createButton.call(this, 'download', attributes));\n }\n\n // Toggle fullscreen button\n if (control === 'fullscreen') {\n container.appendChild(createButton.call(this, 'fullscreen', defaultAttributes));\n }\n });\n\n // Set available quality levels\n if (this.isHTML5) {\n setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n setSpeedMenu.call(this);\n return container;\n },\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this, props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this)\n // TODO: Looping\n // loop: 'None',\n });\n\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n button.setAttribute('aria-pressed', 'false');\n Object.defineProperty(button, 'pressed', {\n configurable: true,\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n button.setAttribute('aria-pressed', pressed ? 'true' : 'false');\n }\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons).filter(Boolean).forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a repaint\n if (browser.isEdge) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const {\n classNames,\n selectors\n } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n // Set media metadata\n setMediaMetadata() {\n try {\n if ('mediaSession' in navigator) {\n navigator.mediaSession.metadata = new window.MediaMetadata({\n title: this.config.mediaMetadata.title,\n artist: this.config.mediaMetadata.artist,\n album: this.config.mediaMetadata.album,\n artwork: this.config.mediaMetadata.artwork\n });\n }\n } catch (_) {\n // Do nothing\n }\n },\n // Add markers\n setMarkers() {\n var _this$config$markers2, _this$config$markers3;\n if (!this.duration || this.elements.markers) return;\n\n // Get valid points\n const points = (_this$config$markers2 = this.config.markers) === null || _this$config$markers2 === void 0 ? void 0 : (_this$config$markers3 = _this$config$markers2.points) === null || _this$config$markers3 === void 0 ? void 0 : _this$config$markers3.filter(({\n time\n }) => time > 0 && time < this.duration);\n if (!(points !== null && points !== void 0 && points.length)) return;\n const containerFragment = document.createDocumentFragment();\n const pointsFragment = document.createDocumentFragment();\n let tipElement = null;\n const tipVisible = `${this.config.classNames.tooltip}--visible`;\n const toggleTip = show => toggleClass(tipElement, tipVisible, show);\n\n // Inject markers to progress container\n points.forEach(point => {\n const markerElement = createElement('span', {\n class: this.config.classNames.marker\n }, '');\n const left = `${point.time / this.duration * 100}%`;\n if (tipElement) {\n // Show on hover\n markerElement.addEventListener('mouseenter', () => {\n if (point.label) return;\n tipElement.style.left = left;\n tipElement.innerHTML = point.label;\n toggleTip(true);\n });\n\n // Hide on leave\n markerElement.addEventListener('mouseleave', () => {\n toggleTip(false);\n });\n }\n markerElement.addEventListener('click', () => {\n this.currentTime = point.time;\n });\n markerElement.style.left = left;\n pointsFragment.appendChild(markerElement);\n });\n containerFragment.appendChild(pointsFragment);\n\n // Inject a tooltip if needed\n if (!this.config.tooltips.seek) {\n tipElement = createElement('span', {\n class: this.config.classNames.tooltip\n }, '');\n containerFragment.appendChild(tipElement);\n }\n this.elements.markers = {\n points: pointsFragment,\n tip: tipElement\n };\n this.elements.progress.appendChild(containerFragment);\n }\n };\n\n // ==========================================================================\n\n /**\n * Parse a string to a URL object\n * @param {String} input - the URL to be parsed\n * @param {Boolean} safe - failsafe parsing\n */\n function parseUrl(input, safe = true) {\n let url = input;\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n try {\n return new URL(url);\n } catch (_) {\n return null;\n }\n }\n\n // Convert object to URLSearchParams\n function buildUrlParams(input) {\n const params = new URLSearchParams();\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n return params;\n }\n\n // ==========================================================================\n const captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) {\n // Clear menu and hide\n if (is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n this.elements.captions.setAttribute('dir', 'auto');\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const url = parseUrl(src);\n if (url !== null && url.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(url.protocol)) {\n fetch(src, 'blob').then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n }).catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({\n active\n } = this.config.captions);\n }\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const {\n active,\n language,\n meta,\n currentTrackNode\n } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing'\n });\n\n // Turn off native caption rendering to avoid double captions\n // Note: mode='hidden' forces a track to download. To ensure every track\n // isn't downloaded at once, only 'showing' tracks should be reassigned\n // eslint-disable-next-line no-param-reassign\n if (track.mode === 'showing') {\n // eslint-disable-next-line no-param-reassign\n track.mode = 'hidden';\n }\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if (languageExists && this.language !== language || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n if (this.elements) {\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n }\n\n // Update available languages in list\n if (is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n const {\n toggled\n } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({\n captions: active\n });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n // Wait for the call stack to clear before setting mode='hidden'\n // on the active track - forcing the browser to download it\n setTimeout(() => {\n if (active && this.captions.toggled) {\n this.captions.currentTrackNode.mode = 'hidden';\n }\n });\n },\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const {\n language\n } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({\n language\n });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks.filter(track => !this.isHTML5 || update || this.captions.meta.has(track)).filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(t => t.language === language);\n return !track; // Break iteration if there is a match\n });\n\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n return i18n.get('enabled', this.config);\n }\n return i18n.get('disabled', this.config);\n },\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || []).map(cue => cue.getCueAsHTML()).map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n }\n };\n\n // ==========================================================================\n // Plyr default config\n // ==========================================================================\n\n const defaults = {\n // Disable\n enabled: true,\n // Custom media title\n title: '',\n // Logging to console\n debug: false,\n // Auto play (if supported)\n autoplay: false,\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n // Allow inline playback on iOS\n playsinline: true,\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n // Default volume\n volume: 1,\n muted: false,\n // Pass a custom duration\n duration: null,\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n // Invert the current time to be a countdown\n invertTime: true,\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n // Force an aspect ratio\n // The format must be `'w:h'` (e.g. `'16:9'`)\n ratio: null,\n // Click video container to play/pause\n clickToPlay: true,\n // Auto hide the controls\n hideControls: true,\n // Reset to start when playback ended\n resetOnEnd: false,\n // Disable the standard context menu\n disableContextMenu: true,\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.7.8/plyr.svg',\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n // Quality default\n quality: {\n default: 576,\n // The options to display in the UI, if available for the source media\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n forced: false,\n onChange: null\n },\n // Set loops\n loop: {\n active: false\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n // The options to display in the UI, if available for the source media (e.g. Vimeo and YouTube only support 0.5x-4x)\n options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 4]\n },\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false\n },\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true\n },\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false\n },\n // Fullscreen settings\n fullscreen: {\n enabled: true,\n // Allow fullscreen?\n fallback: true,\n // Fallback using full viewport/window\n iosNative: false // Use the native fullscreen in iOS (disables custom controls)\n // Selector for the fullscreen container so contextual / non-player content can remain visible in fullscreen mode\n // Non-ancestors of the player element will be ignored\n // container: null, // defaults to the player element\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr'\n },\n // Default controls\n controls: ['play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress', 'current-time',\n // 'duration',\n 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay',\n // 'download',\n 'fullscreen'],\n settings: ['captions', 'quality', 'speed'],\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n pip: 'PIP',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD'\n }\n },\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/oembed.json?url={0}'\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://noembed.com/embed?url=https://www.youtube.com/watch?v={0}'\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'\n }\n },\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null\n },\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied', 'ratechange', 'cuechange',\n // Custom events\n 'download', 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready',\n // YouTube\n 'statechange',\n // Quality\n 'qualitychange',\n // Ads\n 'adsloaded', 'adscontentpause', 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', 'adsallcomplete', 'adsimpression', 'adsclick'],\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls'\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]'\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]'\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop',\n // Used later\n volume: '.plyr__volume--display'\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption'\n },\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n videoFixedRatio: 'plyr__video-wrapper--fixed-ratio',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n marker: 'plyr__progress__marker',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n display: {\n time: 'plyr__time'\n },\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open'\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active'\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback'\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active'\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active'\n },\n previewThumbnails: {\n // Tooltip thumbs\n thumbContainer: 'plyr__preview-thumb',\n thumbContainerShown: 'plyr__preview-thumb--is-shown',\n imageContainer: 'plyr__preview-thumb__image-container',\n timeContainer: 'plyr__preview-thumb__time-container',\n // Scrubbing\n scrubbingContainer: 'plyr__preview-scrubbing',\n scrubbingContainerShown: 'plyr__preview-scrubbing--is-shown'\n }\n },\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n hash: 'data-plyr-embed-hash'\n }\n },\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n tagUrl: ''\n },\n // Preview Thumbnails plugin\n previewThumbnails: {\n enabled: false,\n src: ''\n },\n // Vimeo plugin\n vimeo: {\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: false,\n // Custom settings from Plyr\n customControls: true,\n referrerPolicy: null,\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy\n // Whether the owner of the video has a Pro or Business account\n // (which allows us to properly hide controls without CSS hacks, etc)\n premium: false\n },\n // YouTube plugin\n youtube: {\n rel: 0,\n // No related vids\n showinfo: 0,\n // Hide info\n iv_load_policy: 3,\n // Hide annotations\n modestbranding: 1,\n // Hide logos as much as possible (they still show one in the corner when paused)\n // Custom settings from Plyr\n customControls: true,\n noCookie: false // Whether to use an alternative version of YouTube without cookies\n },\n\n // Media Metadata\n mediaMetadata: {\n title: '',\n artist: '',\n album: '',\n artwork: []\n },\n // Markers\n markers: {\n enabled: false,\n points: []\n }\n };\n\n // ==========================================================================\n // Plyr states\n // ==========================================================================\n\n const pip = {\n active: 'picture-in-picture',\n inactive: 'inline'\n };\n\n // ==========================================================================\n // Plyr supported types and providers\n // ==========================================================================\n\n const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo'\n };\n const types = {\n audio: 'audio',\n video: 'video'\n };\n\n /**\n * Get provider by URL\n * @param {String} url\n */\n function getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n return null;\n }\n\n // ==========================================================================\n // Console wrapper\n // ==========================================================================\n\n const noop = () => {};\n class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n }\n\n class Fullscreen {\n constructor(player) {\n _defineProperty$1(this, \"onChange\", () => {\n if (!this.supported) return;\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Always trigger events on the plyr / media element (not a fullscreen container) and let them bubble up\n const target = this.target === this.player.media ? this.target : this.player.elements.container;\n // Trigger an event\n triggerEvent.call(this.player, target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n });\n _defineProperty$1(this, \"toggleFallback\", (toggle = false) => {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX ?? 0,\n y: window.scrollY ?? 0\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n if (!hasProperty) viewport.content += `,${property}`;\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content.split(',').filter(part => part.trim() !== property).join(',');\n }\n }\n\n // Toggle button and fire events\n this.onChange();\n });\n // Trap focus inside container\n _defineProperty$1(this, \"trapFocus\", event => {\n // Bail if iOS/iPadOS, not active, not the tab key\n if (browser.isIos || browser.isIPadOS || !this.active || event.key !== 'Tab') return;\n\n // Get the current focused element\n const focused = document.activeElement;\n const focusable = getElements.call(this.player, 'a[href], button:not(:disabled), input:not(:disabled), [tabindex]');\n const [first] = focusable;\n const last = focusable[focusable.length - 1];\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n });\n // Update UI\n _defineProperty$1(this, \"update\", () => {\n if (this.supported) {\n let mode;\n if (this.forceFallback) mode = 'Fallback (forced)';else if (Fullscreen.nativeSupported) mode = 'Native';else mode = 'Fallback';\n this.player.debug.log(`${mode} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.supported);\n });\n // Make an element fullscreen\n _defineProperty$1(this, \"enter\", () => {\n if (!this.supported) return;\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.isVimeo) {\n this.player.embed.requestFullscreen();\n } else {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.nativeSupported || this.forceFallback) {\n this.toggleFallback(true);\n } else if (!this.prefix) {\n this.target.requestFullscreen({\n navigationUI: 'hide'\n });\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n });\n // Bail from fullscreen\n _defineProperty$1(this, \"exit\", () => {\n if (!this.supported) return;\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.isVimeo) {\n this.player.embed.exitFullscreen();\n } else {\n this.target.webkitEnterFullscreen();\n }\n silencePromise(this.player.play());\n } else if (!Fullscreen.nativeSupported || this.forceFallback) {\n this.toggleFallback(false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n });\n // Toggle state\n _defineProperty$1(this, \"toggle\", () => {\n if (!this.active) this.enter();else this.exit();\n });\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = {\n x: 0,\n y: 0\n };\n\n // Force the use of 'full window/browser' rather than fullscreen\n this.forceFallback = player.config.fullscreen.fallback === 'force';\n\n // Get the fullscreen element\n // Checks container is an ancestor, defaults to null\n this.player.elements.fullscreen = player.config.fullscreen.container && closest$1(this.player.elements.container, player.config.fullscreen.container);\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n on.call(this.player, document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n this.onChange();\n });\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n this.player.listeners.proxy(event, this.toggle, 'fullscreen');\n });\n\n // Tap focus when in fullscreen\n on.call(this, this.player.elements.container, 'keydown', event => this.trapFocus(event));\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get nativeSupported() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // If we're actually using native\n get useNative() {\n return Fullscreen.nativeSupported && !this.forceFallback;\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) return '';\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n return false;\n });\n return value;\n }\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is supported\n get supported() {\n return [\n // Fullscreen is enabled in config\n this.player.config.fullscreen.enabled,\n // Must be a video\n this.player.isVideo,\n // Either native is supported or fallback enabled\n Fullscreen.nativeSupported || this.player.config.fullscreen.fallback,\n // YouTube has no way to trigger fullscreen, so on devices with no native support, playsinline\n // must be enabled and iosNative fullscreen must be disabled to offer the fullscreen fallback\n !this.player.isYouTube || Fullscreen.nativeSupported || !browser.isIos || this.player.config.playsinline && !this.player.config.fullscreen.iosNative].every(Boolean);\n }\n\n // Get active state\n get active() {\n if (!this.supported) return false;\n\n // Fallback using classname\n if (!Fullscreen.nativeSupported || this.forceFallback) {\n return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n const element = !this.prefix ? this.target.getRootNode().fullscreenElement : this.target.getRootNode()[`${this.prefix}${this.property}Element`];\n return element && element.shadowRoot ? element === this.target.getRootNode().host : element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.fullscreen ?? this.player.elements.container;\n }\n }\n\n // ==========================================================================\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n // By default it checks if it is at least 1px, but you can add a second argument to change this\n // ==========================================================================\n\n function loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {\n onload: handler,\n onerror: handler,\n src\n });\n });\n }\n\n // ==========================================================================\n const ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Reset duration display\n controls.durationUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n\n // Media metadata\n if (this.config.mediaMetadata) {\n controls.setMediaMetadata.call(this);\n }\n },\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('data-poster', poster);\n\n // Show the poster\n this.elements.poster.removeAttribute('hidden');\n\n // Wait until ui is ready\n return ready.call(this)\n // Load image\n .then(() => loadImage(poster)).catch(error => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw error;\n }).then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n }).then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: ''\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n },\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n Object.assign(target, {\n pressed: this.playing\n });\n target.setAttribute('aria-label', i18n.get(this.playing ? 'pause' : 'play', this.config));\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const {\n controls: controlsElement\n } = this.elements;\n if (controlsElement && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = this.touch && this.lastSeekTime + 2000 > Date.now();\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controlsElement.pressed || controlsElement.hover || recentTouchSeek));\n }\n },\n // Migrate any custom properties from the media to the parent\n migrateStyles() {\n // Loop through values (as they are the keys when the object is spread 🤔)\n Object.values({\n ...this.media.style\n })\n // We're only fussed about Plyr specific properties\n .filter(key => !is.empty(key) && is.string(key) && key.startsWith('--plyr')).forEach(key => {\n // Set on the container\n this.elements.container.style.setProperty(key, this.media.style.getPropertyValue(key));\n\n // Clean up from media element\n this.media.style.removeProperty(key);\n });\n\n // Remove attribute if empty\n if (is.empty(this.media.style)) {\n this.media.removeAttribute('style');\n }\n }\n };\n\n class Listeners {\n constructor(_player) {\n // Device is touch enabled\n _defineProperty$1(this, \"firstTouch\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n });\n // Global window & document listeners\n _defineProperty$1(this, \"global\", (toggle = true) => {\n const {\n player\n } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n });\n // Container listeners\n _defineProperty$1(this, \"container\", () => {\n const {\n player\n } = this;\n const {\n config,\n elements,\n timers\n } = player;\n\n // Keyboard shortcuts\n if (!config.keyboard.global && config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(player, elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const {\n controls: controlsElement\n } = elements;\n\n // Remove button states for fullscreen\n if (controlsElement && event.type === 'enterfullscreen') {\n controlsElement.pressed = false;\n controlsElement.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n let delay = 0;\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Set new timer to prevent flicker when seeking\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Set a gutter for Vimeo\n const setGutter = () => {\n if (!player.isVimeo || player.config.vimeo.premium) {\n return;\n }\n const target = elements.wrapper;\n const {\n active\n } = player.fullscreen;\n const [videoWidth, videoHeight] = getAspectRatio.call(player);\n const useNativeAspectRatio = supportsCSS(`aspect-ratio: ${videoWidth} / ${videoHeight}`);\n\n // If not active, remove styles\n if (!active) {\n if (useNativeAspectRatio) {\n target.style.width = null;\n target.style.height = null;\n } else {\n target.style.maxWidth = null;\n target.style.margin = null;\n }\n return;\n }\n\n // Determine which dimension will overflow and constrain view\n const [viewportWidth, viewportHeight] = getViewportSize();\n const overflow = viewportWidth / viewportHeight > videoWidth / videoHeight;\n if (useNativeAspectRatio) {\n target.style.width = overflow ? 'auto' : '100%';\n target.style.height = overflow ? '100%' : 'auto';\n } else {\n target.style.maxWidth = overflow ? `${viewportHeight / videoHeight * videoWidth}px` : null;\n target.style.margin = overflow ? '0 auto' : null;\n }\n };\n\n // Handle resizing\n const resized = () => {\n clearTimeout(timers.resized);\n timers.resized = setTimeout(setGutter, 50);\n };\n on.call(player, elements.container, 'enterfullscreen exitfullscreen', event => {\n const {\n target\n } = player.fullscreen;\n\n // Ignore events not from target\n if (target !== elements.container) {\n return;\n }\n\n // If it's not an embed and no ratio specified\n if (!player.isEmbed && is.empty(player.config.ratio)) {\n return;\n }\n\n // Set Vimeo gutter\n setGutter();\n\n // Watch for resizes\n const method = event.type === 'enterfullscreen' ? on : off;\n method.call(player, window, 'resize', resized);\n });\n });\n // Listen for media events\n _defineProperty$1(this, \"media\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(player, event));\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n\n // Call pause otherwise IE11 will start playing the video again\n player.pause();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(player, event));\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(player, event));\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n if (player.ended) {\n this.proxy(event, player.restart, 'restart');\n this.proxy(event, () => {\n silencePromise(player.play());\n }, 'play');\n } else {\n this.proxy(event, () => {\n silencePromise(player.togglePlay());\n }, 'play');\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(player, elements.wrapper, 'contextmenu', event => {\n event.preventDefault();\n }, false);\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({\n speed: player.speed\n });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadUrl.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(player, player.media, proxyEvents, event => {\n let {\n detail = {}\n } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n });\n // Run default and custom handlers\n _defineProperty$1(this, \"proxy\", (event, defaultHandler, customHandlerKey) => {\n const {\n player\n } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned !== false && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n });\n // Trigger custom and default handlers\n _defineProperty$1(this, \"bind\", (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const {\n player\n } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n on.call(player, element, type, event => this.proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n });\n // Listen for control events\n _defineProperty$1(this, \"controls\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', () => {\n silencePromise(player.togglePlay());\n }, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', () => {\n // Record seek time so we can prevent hiding controls for a few seconds after rewind\n player.lastSeekTime = Date.now();\n player.rewind();\n }, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', () => {\n // Record seek time so we can prevent hiding controls for a few seconds after fast forward\n player.lastSeekTime = Date.now();\n player.forward();\n }, 'fastForward');\n\n // Mute toggle\n this.bind(elements.buttons.mute, 'click', () => {\n player.muted = !player.muted;\n }, 'mute');\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(elements.buttons.download, 'click', () => {\n triggerEvent.call(player, player.media, 'download');\n }, 'download');\n\n // Fullscreen toggle\n this.bind(elements.buttons.fullscreen, 'click', () => {\n player.fullscreen.toggle();\n }, 'fullscreen');\n\n // Picture-in-Picture\n this.bind(elements.buttons.pip, 'click', () => {\n player.pip = 'toggle';\n }, 'pip');\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n event.preventDefault();\n controls.toggleMenu.call(player, event);\n }, null, false); // Can't be passive as we're preventing default\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(elements.buttons.settings, 'keyup', event => {\n if (![' ', 'Enter'].includes(event.key)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (event.key === 'Enter') {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n }, null, false // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.key === 'Escape') {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = 100 / rect.width * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const attribute = 'play-on-seeked';\n if (is.keyboardEvent(event) && !['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n silencePromise(player.play());\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an ,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(elements.inputs.seek, inputEvent, event => {\n const seek = event.currentTarget;\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n seek.removeAttribute('seek-value');\n player.currentTime = seekTo / seek.max * player.duration;\n }, 'seek');\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(player, event));\n\n // Preview thumbnails plugin\n // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n this.bind(elements.progress, 'mousemove touchmove', event => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startMove(event);\n }\n });\n\n // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n this.bind(elements.progress, 'mouseleave touchend click', () => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endMove(false, true);\n }\n });\n\n // Show scrubbing preview\n this.bind(elements.progress, 'mousedown touchstart', event => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startScrubbing(event);\n }\n });\n this.bind(elements.progress, 'mouseup touchend', event => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endScrubbing(event);\n }\n });\n\n // Polyfill for lower fill in for webkit\n if (browser.isWebKit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n player.config.invertTime = !player.config.invertTime;\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(elements.inputs.volume, inputEvent, event => {\n player.volume = event.target.value;\n }, 'volume');\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Also update controls.hover state for any non-player children of fullscreen element (as above)\n if (elements.fullscreen) {\n Array.from(elements.fullscreen.children).filter(c => !c.contains(elements.container)).forEach(child => {\n this.bind(child, 'mouseenter mouseleave', event => {\n if (elements.controls) {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n }\n });\n });\n }\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const {\n config,\n timers\n } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(elements.inputs.volume, 'wheel', event => {\n // Detect \"natural\" scroll - supported on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => inverted ? -value : value);\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const {\n volume\n } = player.media;\n if (direction === 1 && volume < 1 || direction === -1 && volume > 0) {\n event.preventDefault();\n }\n }, 'volume', false);\n });\n this.player = _player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n const {\n key,\n type,\n altKey,\n ctrlKey,\n metaKey,\n shiftKey\n } = event;\n const pressed = type === 'keydown';\n const repeat = pressed && key === this.lastKey;\n\n // Bail if a modifier key is set\n if (altKey || ctrlKey || metaKey || shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the key for whatever reason\n if (!key) {\n return;\n }\n\n // Seek by increment\n const seekByIncrement = increment => {\n // Divide the max duration into 10th's and times by the number value\n player.currentTime = player.duration / 10 * increment;\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = document.activeElement;\n if (is.element(focused)) {\n const {\n editable\n } = player.config.selectors;\n const {\n seek\n } = elements.inputs;\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n if (event.key === ' ' && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keys should we prevent default\n const preventDefault = [' ', 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'c', 'f', 'k', 'l', 'm'];\n\n // If the key is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(key)) {\n event.preventDefault();\n event.stopPropagation();\n }\n switch (key) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n if (!repeat) {\n seekByIncrement(parseInt(key, 10));\n }\n break;\n case ' ':\n case 'k':\n if (!repeat) {\n silencePromise(player.togglePlay());\n }\n break;\n case 'ArrowUp':\n player.increaseVolume(0.1);\n break;\n case 'ArrowDown':\n player.decreaseVolume(0.1);\n break;\n case 'm':\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n case 'ArrowRight':\n player.forward();\n break;\n case 'ArrowLeft':\n player.rewind();\n break;\n case 'f':\n player.fullscreen.toggle();\n break;\n case 'c':\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n case 'l':\n player.loop = !player.loop;\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (key === 'Escape' && !player.fullscreen.usingNative && player.fullscreen.active) {\n player.fullscreen.toggle();\n }\n\n // Store last key for next cycle\n this.lastKey = key;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n }\n\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n function createCommonjsModule(fn, module) {\n \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n }\n\n var loadjs_umd = createCommonjsModule(function (module, exports) {\n (function (root, factory) {\n {\n module.exports = factory();\n }\n })(commonjsGlobal, function () {\n /**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\n var devnull = function () {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n /**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\n function subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n }\n\n /**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\n function publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n }\n\n /**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\n function executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {\n success: args\n };\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);else (args.success || devnull)(args);\n }\n\n /**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\n function loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathname = path.replace(/[\\?|#].*$/, ''),\n pathStripped = path.replace(/^(css|img)!/, ''),\n isLegacyIECss,\n e;\n numTries = numTries || 0;\n if (/(^css!|\\.css$)/.test(pathname)) {\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped;\n\n // tag IE9+\n isLegacyIECss = 'hideFocus' in e;\n\n // use preload in IE Edge (to detect load errors)\n if (isLegacyIECss && e.relList) {\n isLegacyIECss = 0;\n e.rel = 'preload';\n e.as = 'style';\n }\n } else if (/(^img!|\\.(png|gif|jpg|svg|webp)$)/.test(pathname)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped;\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // treat empty stylesheets as failures to get around lack of onerror\n // support in IE9-11\n if (isLegacyIECss) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText` (unless error is Code:18 SecurityError)\n if (x.code != 18) result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n } else if (e.rel == 'preload' && e.as == 'style') {\n // activate preloaded stylesheets\n return e.rel = 'stylesheet'; // jshint ignore:line\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n }\n\n /**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\n function loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function (path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);else return;\n }\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i = 0; i < x; i++) loadFile(paths[i], fn, args);\n }\n\n /**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function|Object)} [arg1] - The (1) bundleId or (2) success\n * callback or (3) object literal with success/error arguments, numRetries,\n * etc.\n * @param {(Function|Object)} [arg2] - The (1) success callback or (2) object\n * literal with success/error arguments, numRetries, etc.\n */\n function loadjs(paths, arg1, arg2) {\n var bundleId, args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n function loadFn(resolve, reject) {\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // resolve Promise\n if (resolve) {\n executeCallbacks({\n success: resolve,\n error: reject\n }, pathsNotFound);\n }\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n }\n if (args.returnPromise) return new Promise(loadFn);else loadFn();\n }\n\n /**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\n loadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n return loadjs;\n };\n\n /**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\n loadjs.done = function done(bundleId) {\n publish(bundleId, []);\n };\n\n /**\n * Reset loadjs dependencies statuses\n */\n loadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n };\n\n /**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\n loadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n };\n\n // export\n return loadjs;\n });\n });\n\n // ==========================================================================\n function loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs_umd(url, {\n success: resolve,\n error: reject\n });\n });\n }\n\n // ==========================================================================\n\n // Parse Vimeo ID from URL\n function parseId$1(url) {\n if (is.empty(url)) {\n return null;\n }\n if (is.number(Number(url))) {\n return url;\n }\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n }\n\n // Try to extract a hash for private videos from the URL\n function parseHash(url) {\n /* This regex matches a hexadecimal hash if given in any of these forms:\n * - [https://player.]vimeo.com/video/{id}/{hash}[?params]\n * - [https://player.]vimeo.com/video/{id}?h={hash}[¶ms]\n * - [https://player.]vimeo.com/video/{id}?[params]&h={hash}\n * - video/{id}/{hash}\n * If matched, the hash is available in capture group 4\n */\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+)(\\?.*&*h=|\\/)+([\\d,a-f]+)/;\n const found = url.match(regex);\n return found && found.length === 5 ? found[4] : null;\n }\n\n // Set playback state and trigger change (only on actual change)\n function assurePlaybackState$1(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n }\n const vimeo = {\n setup() {\n const player = this;\n\n // Add embed class for responsive\n toggleClass(player.elements.wrapper, player.config.classNames.embed, true);\n\n // Set speed options from config\n player.options.speed = player.config.speed.options;\n\n // Set intial ratio\n setAspectRatio.call(player);\n\n // Load the SDK if not already\n if (!is.object(window.Vimeo)) {\n loadScript(player.config.urls.vimeo.sdk).then(() => {\n vimeo.ready.call(player);\n }).catch(error => {\n player.debug.warn('Vimeo SDK (player.js) failed to load', error);\n });\n } else {\n vimeo.ready.call(player);\n }\n },\n // API Ready\n ready() {\n const player = this;\n const config = player.config.vimeo;\n const {\n premium,\n referrerPolicy,\n ...frameParams\n } = config;\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n let hash = '';\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n // hash can also be set as attribute on the
\n hash = player.media.getAttribute(player.config.attributes.embed.hash);\n } else {\n hash = parseHash(source);\n }\n const hashParam = hash ? {\n h: hash\n } : {};\n\n // If the owner has a pro or premium account then we can hide controls etc\n if (premium) {\n Object.assign(frameParams, {\n controls: false,\n sidedock: false\n });\n }\n\n // Get Vimeo params for the iframe\n const params = buildUrlParams({\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n muted: player.muted,\n gesture: 'media',\n playsinline: player.config.playsinline,\n // hash has to be added to iframe-URL\n ...hashParam,\n ...frameParams\n });\n const id = parseId$1(source);\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allow', ['autoplay', 'fullscreen', 'picture-in-picture', 'encrypted-media', 'accelerometer', 'gyroscope'].join('; '));\n\n // Set the referrer policy if required\n if (!is.empty(referrerPolicy)) {\n iframe.setAttribute('referrerPolicy', referrerPolicy);\n }\n\n // Inject the package\n if (premium || !config.customControls) {\n iframe.setAttribute('data-poster', player.poster);\n player.media = replaceElement(iframe, player.media);\n } else {\n const wrapper = createElement('div', {\n class: player.config.classNames.embedContainer,\n 'data-poster': player.poster\n });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n }\n\n // Get poster image\n if (!config.customControls) {\n fetch(format(player.config.urls.vimeo.api, src)).then(response => {\n if (is.empty(response) || !response.thumbnail_url) {\n return;\n }\n\n // Set and show poster\n ui.setPoster.call(player, response.thumbnail_url).catch(() => {});\n });\n }\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted\n });\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState$1.call(player, true);\n return player.embed.play();\n };\n player.media.pause = () => {\n assurePlaybackState$1.call(player, false);\n return player.embed.pause();\n };\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let {\n currentTime\n } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const {\n embed,\n media,\n paused,\n volume\n } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume)).catch(() => {\n // Do nothing\n });\n }\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n }).catch(() => {\n // Cannot set Playback Rate, Video is probably not on Pro account\n player.options.speed = [1];\n });\n }\n });\n\n // Volume\n let {\n volume\n } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n }\n });\n\n // Muted\n let {\n muted\n } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : false;\n player.embed.setMuted(toggle ? true : player.config.muted).then(() => {\n muted = toggle;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n }\n });\n\n // Loop\n let {\n loop\n } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : player.config.loop.active;\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n }\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n controls.setDownloadUrl.call(player);\n }).catch(error => {\n this.debug.warn(error);\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n }\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n }\n });\n\n // Set aspect ratio based on video size\n Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n const [width, height] = dimensions;\n player.embed.ratio = roundAspectRatio(width, height);\n setAspectRatio.call(this);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n player.embed.on('cuechange', ({\n cues = []\n }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState$1.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n if (is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n player.embed.on('bufferstart', () => {\n triggerEvent.call(player, player.media, 'waiting');\n });\n player.embed.on('bufferend', () => {\n triggerEvent.call(player, player.media, 'playing');\n });\n player.embed.on('play', () => {\n assurePlaybackState$1.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n player.embed.on('pause', () => {\n assurePlaybackState$1.call(player, false);\n });\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n if (config.customControls) {\n setTimeout(() => ui.build.call(player), 0);\n }\n }\n };\n\n // ==========================================================================\n\n // Parse YouTube ID from URL\n function parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n }\n\n // Set playback state and trigger change (only on actual change)\n function assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n }\n function getHost(config) {\n if (config.noCookie) {\n return 'https://www.youtube-nocookie.com';\n }\n if (window.location.protocol === 'http:') {\n return 'http://www.youtube.com';\n }\n\n // Use YouTube's default\n return undefined;\n }\n const youtube = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Setup API\n if (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Reference current global callback\n const callback = window.onYouTubeIframeAPIReady;\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n // Call global callback if set\n if (is.function(callback)) {\n callback();\n }\n youtube.ready.call(this);\n };\n\n // Load the SDK\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n }\n },\n // Get the media title\n getTitle(videoId) {\n const url = format(this.config.urls.youtube.api, videoId);\n fetch(url).then(data => {\n if (is.object(data)) {\n const {\n title,\n height,\n width\n } = data;\n\n // Set title\n this.config.title = title;\n ui.setTitle.call(this);\n\n // Set aspect ratio\n this.embed.ratio = roundAspectRatio(width, height);\n }\n setAspectRatio.call(this);\n }).catch(() => {\n // Set aspect ratio\n setAspectRatio.call(this);\n });\n },\n // API ready\n ready() {\n const player = this;\n const config = player.config.youtube;\n // Ignore already setup (race condition)\n const currentId = player.media && player.media.getAttribute('id');\n if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the