{"version":3,"file":"js/main.js","mappings":"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AG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,GAAIivB,EAAG,KACZ,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,GAAIivB,EAAG,KACZ,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,GAAIivB,EAAG,KACZ,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,GAAIivB,EAAG,KACZ,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,GAAIivB,EAAG,KACZ,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,GAAIivB,EAAG,KACZ,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,CAAEjvB,EAAG,KAAMivB,EAAG,MACd,C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","sources":["webpack://clienti-baseline-webpack/./node_modules/core-js/internals/a-callable.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/a-constructor.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/a-possible-prototype.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/add-to-unscopables.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/advance-string-index.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/an-object.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/array-for-each.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/array-from.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/array-includes.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/array-iteration.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/array-method-has-species-support.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/array-method-is-strict.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/array-slice.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/array-species-constructor.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/array-species-create.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/classof-raw.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/classof.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/correct-prototype-getter.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/create-iterator-constructor.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/create-property-descriptor.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/create-property.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/define-iterator.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/define-well-known-symbol.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/descriptors.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/document-create-element.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/dom-iterables.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/dom-token-list-prototype.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/engine-user-agent.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/engine-v8-version.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/enum-bug-keys.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/export.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/fails.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/function-apply.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/function-bind-context.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/function-call.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/function-name.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/function-uncurry-this.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/get-built-in.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/get-iterator-method.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/get-iterator.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/get-method.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/get-substitution.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/global.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/has-own-property.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/hidden-keys.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/html.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/ie8-dom-define.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/indexed-object.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/inspect-source.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/internal-state.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/is-array-iterator-method.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/is-array.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/is-callable.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/is-constructor.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/is-forced.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/is-object.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/is-pure.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/is-regexp.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/is-symbol.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/iterator-close.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/iterators-core.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/iterators.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/length-of-array-like.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/native-symbol.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/native-weak-map.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/not-a-regexp.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-create.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-define-properties.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-define-property.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-get-prototype-of.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-is-prototype-of.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-keys-internal.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-keys.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-set-prototype-of.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/object-to-string.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/ordinary-to-primitive.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/own-keys.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/path.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/redefine.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/regexp-exec-abstract.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/regexp-exec.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/regexp-flags.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/regexp-unsupported-dot-all.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/regexp-unsupported-ncg.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/require-object-coercible.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/set-global.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/set-to-string-tag.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/shared-key.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/shared-store.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/shared.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/species-constructor.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/string-multibyte.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/string-repeat.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/this-number-value.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/to-absolute-index.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/to-indexed-object.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/to-integer-or-infinity.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/to-length.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/to-object.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/to-primitive.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/to-property-key.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/to-string-tag-support.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/to-string.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/try-to-string.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/uid.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack://clienti-baseline-webpack/./node_modules/core-js/internals/well-known-symbol.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.array.filter.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.array.find-index.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.array.from.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.array.includes.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.array.iterator.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.array.join.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.array.map.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.array.slice.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.function.name.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.number.to-fixed.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.object.keys.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.object.to-string.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.regexp.exec.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.string.includes.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.string.iterator.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.string.replace.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.string.split.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.symbol.description.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.symbol.iterator.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/es.symbol.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack://clienti-baseline-webpack/./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack://clienti-baseline-webpack/./node_modules/lottie-web/build/player/lottie.js","webpack://clienti-baseline-webpack/webpack/bootstrap","webpack://clienti-baseline-webpack/webpack/runtime/amd options","webpack://clienti-baseline-webpack/webpack/runtime/compat get default export","webpack://clienti-baseline-webpack/webpack/runtime/define property getters","webpack://clienti-baseline-webpack/webpack/runtime/global","webpack://clienti-baseline-webpack/webpack/runtime/hasOwnProperty shorthand","webpack://clienti-baseline-webpack/./node_modules/velocity-animate/velocity.es5.js","webpack://clienti-baseline-webpack/./src/scripts/partials/counter.js","webpack://clienti-baseline-webpack/./src/scripts/customEventsNames.js","webpack://clienti-baseline-webpack/./src/scripts/partials/video.js","webpack://clienti-baseline-webpack/./src/scripts/partials/modal.js","webpack://clienti-baseline-webpack/./src/scripts/partials/cookies.js","webpack://clienti-baseline-webpack/./node_modules/@kurkle/color/dist/color.esm.js","webpack://clienti-baseline-webpack/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://clienti-baseline-webpack/./node_modules/chart.js/dist/chart.js","webpack://clienti-baseline-webpack/./node_modules/chart.js/auto/auto.js","webpack://clienti-baseline-webpack/./node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js","webpack://clienti-baseline-webpack/./node_modules/swiper/shared/ssr-window.esm.mjs","webpack://clienti-baseline-webpack/./node_modules/swiper/shared/utils.mjs","webpack://clienti-baseline-webpack/./node_modules/swiper/shared/swiper-core.mjs","webpack://clienti-baseline-webpack/./node_modules/swiper/shared/create-element-if-not-defined.mjs","webpack://clienti-baseline-webpack/./node_modules/swiper/shared/classes-to-selector.mjs","webpack://clienti-baseline-webpack/./src/scripts/partials/slider.js","webpack://clienti-baseline-webpack/./node_modules/swiper/modules/navigation.mjs","webpack://clienti-baseline-webpack/./node_modules/swiper/modules/pagination.mjs","webpack://clienti-baseline-webpack/./src/scripts/partials/panel.js","webpack://clienti-baseline-webpack/./src/scripts/partials/pageScroll.js","webpack://clienti-baseline-webpack/./node_modules/swiper/modules/mousewheel.mjs","webpack://clienti-baseline-webpack/./node_modules/swiper/modules/keyboard.mjs","webpack://clienti-baseline-webpack/./src/scripts/main.js","webpack://clienti-baseline-webpack/./src/scripts/partials/intersectionObservation.js","webpack://clienti-baseline-webpack/./src/scripts/partials/menu.js","webpack://clienti-baseline-webpack/./src/scripts/partials/header.js","webpack://clienti-baseline-webpack/./src/scripts/partials/chart.js","webpack://clienti-baseline-webpack/./src/scripts/partials/lottieAnimations.js","webpack://clienti-baseline-webpack/./src/scripts/partials/hoverEffects.js"],"sourcesContent":["var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\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","'use strict';\nvar charAt = require('../internals/string-multibyte').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","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\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// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\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 IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, 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 = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(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","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\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 = lengthOfArrayLike(O);\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","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` 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_REJECT = 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);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? 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(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\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.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\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","'use strict';\nvar fails = require('../internals/fails');\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","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (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 C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\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 } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\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 es/no-array-from, 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","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\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' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\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 (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\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","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\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","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\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 (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(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.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\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 // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\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","// 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","// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && 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;\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","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\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 options.name - the .name of the function if it does not match the key\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","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, 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 FORCED\n ) {\n var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var uncurriedNativeMethod = uncurryThis(nativeMethod);\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\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: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n }\n return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","var FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\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(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 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 ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","var 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 // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.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(it, '') : Object(it);\n} : Object;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\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 || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\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","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\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 : isCallable(detection) ? 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","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\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","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\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 = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var global = require('../internals/global');\nvar isRegExp = require('../internals/is-regexp');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\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 activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\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","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\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++], props[key]);\n return O;\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(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","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\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 var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\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) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.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} : $propertyIsEnumerable;\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\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.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(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(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\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","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\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 ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\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 name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\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 isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, 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.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n // eslint-disable-next-line max-statements -- TODO\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(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 = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], 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 call(nativeReplace, 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 if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar anObject = require('../internals/an-object');\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","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nexports.UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('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 = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$c') !== 'bc';\n});\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\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","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\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 : aConstructor(S);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (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","'use strict';\nvar global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toIntegerOrInfinity(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\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 = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\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(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\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","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\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","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\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","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar un$Slice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\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 = lengthOfArrayLike(O);\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 (isConstructor(Constructor) && (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 un$Slice(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","var DESCRIPTORS = require('../internals/descriptors');\nvar FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return regExpExec(nameRE, functionToString(this))[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = fails(function () {\n return un$ToFixed(0.00008, 3) !== '0.000' ||\n un$ToFixed(0.9, 0) !== '1' ||\n un$ToFixed(1.255, 2) !== '1.25' ||\n un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toIntegerOrInfinity(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat('0', fractDigits - k) + result\n : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\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","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\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","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\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: toString(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","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\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 // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\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\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\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 : getMethod(searchValue, REPLACE);\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(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 push(results, result);\n if (!global) break;\n\n var matchStr = toString(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 = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(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++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\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\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 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-empty-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 = toString(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 call(nativeSplit, 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 = call(regexpExec, separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n push(output, stringSlice(string, lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 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 || !exec(separatorCopy, '')) push(output, '');\n } else push(output, stringSlice(string, lastLastIndex));\n return output.length > lim ? arraySlice(output, 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 ? [] : call(nativeSplit, 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 : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(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 (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\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 (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, 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 = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar toString = require('../internals/to-string');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n var result = isPrototypeOf(SymbolPrototype, this)\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n SymbolWrapper.prototype = SymbolPrototype;\n SymbolPrototype.constructor = SymbolWrapper;\n\n var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n var symbolToString = uncurryThis(SymbolPrototype.toString);\n var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n var replace = uncurryThis(''.replace);\n var stringSlice = uncurryThis(''.slice);\n\n defineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = symbolValueOf(this);\n var string = symbolToString(symbol);\n if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar arraySlice = require('../internals/array-slice');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n redefine(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (isCallable($replacer)) value = call($replacer, this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return apply($stringify, null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n var valueOf = SymbolPrototype.valueOf;\n // eslint-disable-next-line no-unused-vars -- required for .length\n redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n // TODO: improve hint logic\n return call(valueOf, this);\n });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\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\nfor (var COLLECTION_NAME in DOMIterables) {\n if (DOMIterables[COLLECTION_NAME]) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\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\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n var svgNS = 'http://www.w3.org/2000/svg';\n var locationHref = '';\n var _useWebWorker = false;\n var initialDefaultFrame = -999999;\n\n var setWebWorker = function setWebWorker(flag) {\n _useWebWorker = !!flag;\n };\n\n var getWebWorker = function getWebWorker() {\n return _useWebWorker;\n };\n\n var setLocationHref = function setLocationHref(value) {\n locationHref = value;\n };\n\n var getLocationHref = function getLocationHref() {\n return locationHref;\n };\n\n function createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n\n // import Howl from '../../3rd_party/howler';\n var audioControllerFactory = function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function createAudio(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n }\n\n if (window.Howl) {\n return new window.Howl({\n src: [assetPath]\n });\n }\n\n return {\n isPlaying: false,\n play: function play() {\n this.isPlaying = true;\n },\n seek: function seek() {\n this.isPlaying = false;\n },\n playing: function playing() {},\n rate: function rate() {},\n setVolume: function setVolume() {}\n };\n },\n setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n\n this._updateVolume();\n },\n getVolume: function getVolume() {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i;\n var len = this.audios.length;\n\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function () {\n return new AudioController();\n };\n }();\n\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n\n default:\n value = 1.1;\n break;\n }\n\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n\n return arr;\n }\n\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n }\n\n if (type === 'int16') {\n return new Int16Array(len);\n }\n\n if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n\n return createRegularArray(type, len);\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n\n return createRegularArray;\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n var subframeEnabled = true;\n var expressionsPlugin = null;\n var expressionsInterfaces = null;\n var idPrefix$1 = '';\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var _shouldRoundValues = false;\n var bmPow = Math.pow;\n var bmSqrt = Math.sqrt;\n var bmFloor = Math.floor;\n var bmMax = Math.max;\n var bmMin = Math.min;\n var BMMath = {};\n\n (function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n\n function ProjectInterface$1() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = _typeof$6(val);\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n\n return absArr;\n }\n\n return Math.abs(val);\n };\n\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n\n function roundValues(flag) {\n _shouldRoundValues = !!flag;\n }\n\n function bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n\n return value;\n }\n\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n }\n\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n\n default:\n break;\n }\n\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n\n switch (max) {\n case min:\n h = 0;\n break;\n\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n\n default:\n break;\n }\n\n return [h, s, v];\n }\n\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n\n if (g < 0) {\n g = 0;\n }\n\n if (b < 0) {\n b = 0;\n }\n\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n\n var setSubframeEnabled = function setSubframeEnabled(flag) {\n subframeEnabled = !!flag;\n };\n\n var getSubframeEnabled = function getSubframeEnabled() {\n return subframeEnabled;\n };\n\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\n expressionsPlugin = value;\n };\n\n var getExpressionsPlugin = function getExpressionsPlugin() {\n return expressionsPlugin;\n };\n\n var setExpressionInterfaces = function setExpressionInterfaces(value) {\n expressionsInterfaces = value;\n };\n\n var getExpressionInterfaces = function getExpressionInterfaces() {\n return expressionsInterfaces;\n };\n\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n defaultCurveSegments = value;\n };\n\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\n return defaultCurveSegments;\n };\n\n var setIdPrefix = function setIdPrefix(value) {\n idPrefix$1 = value;\n };\n\n var getIdPrefix = function getIdPrefix() {\n return idPrefix$1;\n };\n\n function createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n var dataManager = function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function onmessage() {},\n postMessage: function postMessage(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function postMessage(data) {\n workerProxy.onmessage({\n data: data\n });\n }\n };\n\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n type: 'text/javascript'\n }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n\n workerFn = fn;\n return workerProxy;\n }\n\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n\n return JSON.parse(JSON.stringify(comp.layers));\n }\n\n return null;\n }\n\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n\n return null;\n }\n\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n }\n };\n\n if (!animationData.chars[i].t) {\n charData.data.shapes.push({\n ty: 'no'\n });\n charData.data.shapes[0].it.push({\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n },\n sk: {\n k: 0,\n a: 0\n },\n sa: {\n k: 0,\n a: 0\n },\n ty: 'tr'\n });\n }\n }\n }\n }\n };\n }();\n\n var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\n return xhr.response;\n }\n\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n\n try {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), path, true);\n } catch (error) {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n }\n\n xhr.send();\n }\n\n return {\n load: loadAsset\n };\n }();\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.dataManager.completeData(data);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n\n _workerSelf.dataManager.completeData(animation);\n\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success'\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n }\n });\n\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError\n };\n return id;\n }\n\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId\n });\n }\n\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation\n };\n }();\n\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n\n function imageLoaded() {\n this.loadedAssets += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n\n if (box.width || _count > 500) {\n this._imageLoaded();\n\n clearInterval(intervalId);\n }\n\n _count += 1;\n }.bind(this), 50);\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n\n function setPath(path) {\n this.path = path || '';\n }\n\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloaderFactory;\n }();\n\n function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n\n i -= 1;\n len -= 1;\n }\n\n i += 1;\n }\n\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n\n var markerParser = function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n\n if (keysCount === 0) {\n throw new Error();\n }\n\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\n\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm\n };\n }\n }\n\n markers.push(markerData);\n }\n\n return markers;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n\n return this.compositions[i].compInterface;\n }\n\n i += 1;\n }\n\n return null;\n }\n\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var renderers = {};\n\n var registerRenderer = function registerRenderer(key, value) {\n renderers[key] = value;\n };\n\n function getRenderer(key) {\n return renderers[key];\n }\n\n function getRegisteredRenderer() {\n // Returns canvas by default for compatibility\n if (renderers.canvas) {\n return 'canvas';\n } // Returns any renderer that is registered\n\n\n for (var key in renderers) {\n if (renderers[key]) {\n return key;\n }\n }\n\n return '';\n }\n\n function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n this.expressionsPlugin = getExpressionsPlugin();\n };\n\n extendPrototype([BaseEvent], AnimationItem);\n\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n\n var animType = 'svg';\n\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n\n var RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n\n AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (_typeof$4(animationData) !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n\n var params = {\n wrapper: wrapper,\n animationData: animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== 'false';\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n if (prerender === 'false') {\n params.prerender = false;\n }\n\n if (!params.path) {\n this.trigger('destroy');\n } else {\n this.setParams(params);\n }\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n\n i += 1;\n }\n }\n\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n\n if (data.assets) {\n len = data.assets.length;\n\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n\n this.loadNextSegment();\n };\n\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n\n try {\n this.animationData = animData;\n\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n\n this.renderer.configAnimation(animData);\n\n if (!animData.assets) {\n animData.assets = [];\n }\n\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n\n if (this.autoplay) {\n this.play();\n }\n }\n };\n\n AnimationItem.prototype.resize = function (width, height) {\n // Adding this validation for backwards compatibility in case an event object was being passed down\n var _width = typeof width === 'number' ? width : undefined;\n\n var _height = typeof height === 'number' ? height : undefined;\n\n this.renderer.updateContainerSize(_width, _height);\n };\n\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n\n try {\n if (this.expressionsPlugin) {\n this.expressionsPlugin.resetFrame();\n }\n\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_play');\n this.audioController.resume();\n\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_pause');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n\n return null;\n };\n\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n\n this.pause();\n };\n\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n\n var numValue = Number(value);\n\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n\n this.play();\n };\n\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n\n this.trigger('segmentStart');\n };\n\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n\n if (_typeof$4(arr[0]) === 'object') {\n var i;\n var len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n\n if (this.isPaused) {\n this.play();\n }\n };\n\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n\n return false;\n };\n\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.expressionsPlugin = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n\n AnimationItem.prototype.setLoop = function (isLooping) {\n this.loop = isLooping;\n };\n\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.setVolume(val);\n };\n\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.mute();\n };\n\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n\n this.audioController.unmute();\n };\n\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n };\n\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n\n AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {// TODO: decide how to handle catch case\n }\n };\n\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n\n default:\n this.triggerEvent(name);\n }\n }\n\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n\n i += 1;\n }\n }\n\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n\n var i = 0;\n\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n\n i += 1;\n }\n\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n\n return animations;\n }\n\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n\n function setSpeed(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n\n function setDirection(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n\n function play(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n\n initTime = nowTime;\n\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n\n function pause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n\n function goToAndStop(value, isFrame, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n\n function stop(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n\n function togglePause(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n\n function destroy(animation) {\n var i;\n\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n\n registerAnimation(animElements[i], animationData);\n }\n\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n\n function resize() {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n\n function freeze() {\n _isFrozen = true;\n }\n\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n\n function setVolume(val, animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n\n function mute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n\n function unmute(animation) {\n var i;\n\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize; // moduleOb.start = start;\n\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n\n /* eslint-disable */\n var BezierFactory = function () {\n /**\r\n * BezierEasing - use bezier curve for transition easing function\r\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n *\r\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n * Usage:\r\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n *\r\n */\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n if (beziers[str]) {\n return beziers[str];\n }\n\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === 'function';\n\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n\n function C(aA1) {\n return 3.0 * aA1;\n } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n\n return aGuessT;\n }\n /**\r\n * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n */\n\n\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n\n /**\r\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample; // Interpolate to provide an initial guess for t\n\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n\n if (initialSlope === 0.0) {\n return guessForT;\n }\n\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n\n var pooling = function () {\n function _double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n\n return {\n \"double\": _double\n };\n }();\n\n var poolFactory = function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n\n function newElement() {\n var element;\n\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n\n return element;\n }\n\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n return ob;\n };\n }();\n\n var bezierLengthPool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments())\n };\n }\n\n return poolFactory(8, create);\n }();\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i;\n var len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return poolFactory(8, create, release);\n }();\n\n function bezFunction() {\n var math = Math;\n\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n\n return storedData[bezierName];\n };\n }();\n\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n\n flag = false;\n }\n }\n\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n\n var bezierSegmentPoints = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n var t0t0t0 = t0 * t0 * t0; //\n\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n var t0t0t1 = t0 * t0 * t1; //\n\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n var t0t1t1 = t0 * t1 * t1; //\n\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n\n return bezierSegmentPoints;\n }\n\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n\n var bez = bezFunction();\n\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n\n iterationIndex = 0;\n break;\n }\n\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyframeMetadata.bezierData;\n\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n } // caching._lastKeyframeIndex = -1;\n\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n\n break;\n }\n\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n\n caching.lastIndex = iterationIndex;\n return newValue;\n } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function setVValue(val) {\n var multipliedValue;\n\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n\n i += 1;\n }\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n\n var PropertyFactory = function () {\n function getProp(elem, data, type, mult, container) {\n if (data.sid) {\n data = elem.globalData.slotManager.getProp(data);\n }\n\n var p;\n\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n\n default:\n break;\n }\n }\n\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n\n return p;\n }\n\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n function DynamicPropertyContainer() {}\n\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n\n var pointPool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return poolFactory(8, create);\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n\n this._length = len;\n };\n\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n\n case 'i':\n arr = this.i;\n break;\n\n case 'o':\n arr = this.o;\n break;\n\n default:\n arr = [];\n break;\n }\n\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n\n return newPath;\n };\n\n ShapePath.prototype.length = function () {\n return this._length;\n };\n\n var shapePool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n\n shapePath._length = 0;\n shapePath.c = false;\n }\n\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n\n return cloned;\n }\n\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n\n this._length = 0;\n };\n\n var shapeCollectionPool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n\n function newShapeCollection() {\n var shapeCollection;\n\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n\n return shapeCollection;\n }\n\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\r\n keyPropS = kf[kf.length - 1].s[0];\r\n }else{\r\n keyPropS = kf[kf.length - 2].e[0];\r\n } */\n\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n\n keyPropS = keyData.s[0];\n }\n\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching); /// /\n }\n\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n\n var i;\n var len = shape1._length;\n\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n\n return true;\n }\n\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var finalValue;\n\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n\n var i;\n var len = this.effectsSequence.length;\n\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n\n var _cw = this.d !== 3;\n\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n\n var StarShapeProperty = function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /* this.v.v.length = numPts;\r\n this.v.i.length = numPts;\r\n this.v.o.length = numPts; */\n\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n /* this.v.v[i] = [x,y];\r\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n this.v._length = numPts; */\n\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n\n var RectShapeProperty = function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n\n function getShapeProp(elem, data, type) {\n var prop;\n\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n }\n\n function getConstructorFunction() {\n return ShapeProperty;\n }\n\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n /*!\r\n Transformation Matrix v2.0\r\n (c) Epistemex 2014-2015\r\n www.epistemex.com\r\n By Ken Fyrstenberg\r\n Contributions by leeoniya.\r\n License: MIT, header required.\r\n */\n\n /**\r\n * 2D transformation matrix object initialized with identity matrix.\r\n *\r\n * The matrix can synchronize a canvas context by supplying the context\r\n * as an argument, or later apply current absolute transform to an\r\n * existing context.\r\n *\r\n * All values are handled as floating point values.\r\n *\r\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n * @prop {number} a - scale x\r\n * @prop {number} b - shear y\r\n * @prop {number} c - shear x\r\n * @prop {number} d - scale y\r\n * @prop {number} e - translate x\r\n * @prop {number} f - translate y\r\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n * @constructor\r\n */\n\n var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n\n var mSin = _sin(angle);\n\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n\n function translate(tx, ty, tz) {\n tz = tz || 0;\n\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n\n return this;\n }\n\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2; // }\n\n this._identityCalculated = false;\n return this;\n }\n\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n /* matrix order (canvas compatible):\r\n * ace\r\n * bdf\r\n * 001\r\n */\n\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n\n function multiply(matrix) {\n var matrixProps = matrix.props;\n return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n }\n\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n\n return this._identity;\n }\n\n function equals(matr) {\n var i = 0;\n\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n }\n\n function clone(matr) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n\n return matr;\n }\n\n function cloneFromProps(props) {\n var i;\n\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /* return {\r\n x: x * me.a + y * me.c + me.e,\r\n y: x * me.b + y * me.d + me.f\r\n }; */\n }\n\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n\n return retPts;\n }\n\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n\n return arr;\n }\n\n function applyToPointArray(x, y, z) {\n var arr;\n\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n\n return arr;\n }\n\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n\n return cssValue;\n }\n\n function roundMatrixProperty(val) {\n var v = 10000;\n\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n\n return val;\n }\n\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n /* if(this.isIdentity()) {\r\n return '';\r\n } */\n var props = this.props;\n\n var _a = roundMatrixProperty(props[0]);\n\n var _b = roundMatrixProperty(props[1]);\n\n var _c = roundMatrixProperty(props[4]);\n\n var _d = roundMatrixProperty(props[5]);\n\n var _e = roundMatrixProperty(props[12]);\n\n var _f = roundMatrixProperty(props[13]);\n\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.multiply = multiply;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n\n function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n var lottie = {};\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n\n function setLocation(href) {\n setLocationHref(href);\n }\n\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n\n return animationManager.loadAnimation(params);\n }\n\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n }\n\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n\n case 'matrix':\n return Matrix;\n\n default:\n return null;\n }\n }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocation;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize; // lottie.start = start;\n\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.useWebWorker = setWebWorker;\n lottie.setIDPrefix = setPrefix;\n lottie.__getFactory = getFactory;\n lottie.version = '5.12.2';\n\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n\n return null;\n }\n\n var queryString = '';\n\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n try {\n if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n } catch (err) {//\n }\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n\n return ob;\n }();\n\n function ShapeModifier() {}\n\n ShapeModifier.prototype.initModifierProperties = function () {};\n\n ShapeModifier.prototype.addShapeToModifier = function () {};\n\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollectionPool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n\n extendPrototype([ShapeModifier], TrimModifier);\n\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n\n return shapeSegments;\n };\n\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n\n if (o < 0) {\n o += 1;\n }\n\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n\n jLen = edges.length;\n\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n\n var newShapesData = this.addShapes(shapeData, segments[0]);\n\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n\n shapes.push(shapePath);\n\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n\n if (addedLength > shapeSegment.e) {\n break;\n }\n\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n function PuckerAndBloatModifier() {}\n\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return clonedPath;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n\n this.iterateDynamicProperties();\n\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n\n this.frameId = this.elem.globalData.frameId;\n }\n\n function precalculateMatrix() {\n this.appliedTransformations = 0;\n this.pre.reset();\n\n if (!this.a.effectsSequence.length) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n\n function autoOrient() {//\n // var prevP = this.getValueAtTime();\n }\n\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n\n this._isDirty = true;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function RepeaterModifier() {}\n\n extendPrototype([ShapeModifier], RepeaterModifier);\n\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n\n while (pos > 0) {\n pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n this._elements.unshift(arr[pos]);\n }\n\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n a: {\n a: 0,\n ix: 1,\n k: [0, 0]\n },\n nm: 'Transform',\n o: {\n a: 0,\n ix: 7,\n k: 100\n },\n p: {\n a: 0,\n ix: 2,\n k: [0, 0]\n },\n r: {\n a: 1,\n ix: 6,\n k: [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\n },\n s: {\n a: 0,\n ix: 3,\n k: [100, 100]\n },\n sa: {\n a: 0,\n ix: 5,\n k: 0\n },\n sk: {\n a: 0,\n ix: 4,\n k: 0\n },\n ty: 'tr'\n });\n this.arr.splice(0, 0, group);\n\n this._groups.splice(0, 0, group);\n\n this._currentCopies += 1;\n }\n\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n\n cont = 0;\n var renderFlag;\n\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n\n cont += 1;\n }\n\n this._currentCopies = copies; /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n\n this.matrix.reset();\n } else {\n this.matrix.reset();\n\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n\n return hasReloaded;\n };\n\n RepeaterModifier.prototype.addShape = function () {};\n\n function RoundCornersModifier() {}\n\n extendPrototype([ShapeModifier], RoundCornersModifier);\n\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\r\n clonedPath.o[index] = currentO;\r\n clonedPath.i[index] = currentI; */\n\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n\n return clonedPath;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function floatEqual(a, b) {\n return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n }\n\n function floatZero(f) {\n return Math.abs(f) <= 0.00001;\n }\n\n function lerp(p0, p1, amount) {\n return p0 * (1 - amount) + p1 * amount;\n }\n\n function lerpPoint(p0, p1, amount) {\n return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n }\n\n function quadRoots(a, b, c) {\n // no root\n if (a === 0) return [];\n var s = b * b - 4 * a * c; // Complex roots\n\n if (s < 0) return [];\n var singleRoot = -b / (2 * a); // 1 root\n\n if (s === 0) return [singleRoot];\n var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n return [singleRoot - delta, singleRoot + delta];\n }\n\n function polynomialCoefficients(p0, p1, p2, p3) {\n return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n }\n\n function singlePoint(p) {\n return new PolynomialBezier(p, p, p, p, false);\n }\n\n function PolynomialBezier(p0, p1, p2, p3, linearize) {\n if (linearize && pointEqual(p0, p1)) {\n p1 = lerpPoint(p0, p3, 1 / 3);\n }\n\n if (linearize && pointEqual(p2, p3)) {\n p2 = lerpPoint(p0, p3, 2 / 3);\n }\n\n var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n this.a = [coeffx[0], coeffy[0]];\n this.b = [coeffx[1], coeffy[1]];\n this.c = [coeffx[2], coeffy[2]];\n this.d = [coeffx[3], coeffy[3]];\n this.points = [p0, p1, p2, p3];\n }\n\n PolynomialBezier.prototype.point = function (t) {\n return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n };\n\n PolynomialBezier.prototype.derivative = function (t) {\n return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n };\n\n PolynomialBezier.prototype.tangentAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[1], p[0]);\n };\n\n PolynomialBezier.prototype.normalAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[0], p[1]);\n };\n\n PolynomialBezier.prototype.inflectionPoints = function () {\n var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n if (floatZero(denom)) return [];\n var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n if (square < 0) return [];\n var root = Math.sqrt(square);\n\n if (floatZero(root)) {\n if (root > 0 && root < 1) return [tcusp];\n return [];\n }\n\n return [tcusp - root, tcusp + root].filter(function (r) {\n return r > 0 && r < 1;\n });\n };\n\n PolynomialBezier.prototype.split = function (t) {\n if (t <= 0) return [singlePoint(this.points[0]), this];\n if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n var p10 = lerpPoint(this.points[0], this.points[1], t);\n var p11 = lerpPoint(this.points[1], this.points[2], t);\n var p12 = lerpPoint(this.points[2], this.points[3], t);\n var p20 = lerpPoint(p10, p11, t);\n var p21 = lerpPoint(p11, p12, t);\n var p3 = lerpPoint(p20, p21, t);\n return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n };\n\n function extrema(bez, comp) {\n var min = bez.points[0][comp];\n var max = bez.points[bez.points.length - 1][comp];\n\n if (min > max) {\n var e = max;\n max = min;\n min = e;\n } // Derivative roots to find min/max\n\n\n var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n for (var i = 0; i < f.length; i += 1) {\n if (f[i] > 0 && f[i] < 1) {\n var val = bez.point(f[i])[comp];\n if (val < min) min = val;else if (val > max) max = val;\n }\n }\n\n return {\n min: min,\n max: max\n };\n }\n\n PolynomialBezier.prototype.bounds = function () {\n return {\n x: extrema(this, 0),\n y: extrema(this, 1)\n };\n };\n\n PolynomialBezier.prototype.boundingBox = function () {\n var bounds = this.bounds();\n return {\n left: bounds.x.min,\n right: bounds.x.max,\n top: bounds.y.min,\n bottom: bounds.y.max,\n width: bounds.x.max - bounds.x.min,\n height: bounds.y.max - bounds.y.min,\n cx: (bounds.x.max + bounds.x.min) / 2,\n cy: (bounds.y.max + bounds.y.min) / 2\n };\n };\n\n function intersectData(bez, t1, t2) {\n var box = bez.boundingBox();\n return {\n cx: box.cx,\n cy: box.cy,\n width: box.width,\n height: box.height,\n bez: bez,\n t: (t1 + t2) / 2,\n t1: t1,\n t2: t2\n };\n }\n\n function splitData(data) {\n var split = data.bez.split(0.5);\n return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n }\n\n function boxIntersect(b1, b2) {\n return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n }\n\n function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n if (!boxIntersect(d1, d2)) return;\n\n if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n intersections.push([d1.t, d2.t]);\n return;\n }\n\n var d1s = splitData(d1);\n var d2s = splitData(d2);\n intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n }\n\n PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n if (tolerance === undefined) tolerance = 2;\n if (maxRecursion === undefined) maxRecursion = 7;\n var intersections = [];\n intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n return intersections;\n };\n\n PolynomialBezier.shapeSegment = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n };\n\n PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n };\n\n function crossProduct(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n }\n\n function lineIntersection(start1, end1, start2, end2) {\n var v1 = [start1[0], start1[1], 1];\n var v2 = [end1[0], end1[1], 1];\n var v3 = [start2[0], start2[1], 1];\n var v4 = [end2[0], end2[1], 1];\n var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n if (floatZero(r[2])) return null;\n return [r[0] / r[2], r[1] / r[2]];\n }\n\n function polarOffset(p, angle, length) {\n return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n }\n\n function pointDistance(p1, p2) {\n return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n }\n\n function pointEqual(p1, p2) {\n return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n }\n\n function ZigZagModifier() {}\n\n extendPrototype([ShapeModifier], ZigZagModifier);\n\n ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n };\n\n function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n var angO = angle - Math.PI / 2;\n var angI = angle + Math.PI / 2;\n var px = point[0] + Math.cos(angle) * direction * amplitude;\n var py = point[1] - Math.sin(angle) * direction * amplitude;\n outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n }\n\n function getPerpendicularVector(pt1, pt2) {\n var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n var rot = -Math.PI * 0.5;\n var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n return rotatedVector;\n }\n\n function getProjectingAngle(path, cur) {\n var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n var nextIndex = (cur + 1) % path.length();\n var prevPoint = path.v[prevIndex];\n var nextPoint = path.v[nextIndex];\n var pVector = getPerpendicularVector(prevPoint, nextPoint);\n return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n }\n\n function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n var angle = getProjectingAngle(path, cur);\n var point = path.v[cur % path._length];\n var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n var nextPoint = path.v[(cur + 1) % path._length];\n var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n }\n\n function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n for (var i = 0; i < frequency; i += 1) {\n var t = (i + 1) / (frequency + 1);\n var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n var angle = segment.normalAngle(t);\n var point = segment.point(t);\n setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n direction = -direction;\n }\n\n return direction;\n }\n\n ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n var count = path._length;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n\n if (!path.c) {\n count -= 1;\n }\n\n if (count === 0) return clonedPath;\n var direction = -1;\n var segment = PolynomialBezier.shapeSegment(path, 0);\n zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n for (var i = 0; i < count; i += 1) {\n direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n if (i === count - 1 && !path.c) {\n segment = null;\n } else {\n segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n }\n\n zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n }\n\n return clonedPath;\n };\n\n ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amplitude = this.amplitude.v;\n var frequency = Math.max(0, Math.round(this.frequency.v));\n var pointType = this.pointsType.v;\n\n if (amplitude !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function linearOffset(p1, p2, amount) {\n var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n }\n\n function offsetSegment(segment, amount) {\n var p0;\n var p1a;\n var p1b;\n var p2b;\n var p2a;\n var p3;\n var e;\n e = linearOffset(segment.points[0], segment.points[1], amount);\n p0 = e[0];\n p1a = e[1];\n e = linearOffset(segment.points[1], segment.points[2], amount);\n p1b = e[0];\n p2b = e[1];\n e = linearOffset(segment.points[2], segment.points[3], amount);\n p2a = e[0];\n p3 = e[1];\n var p1 = lineIntersection(p0, p1a, p1b, p2b);\n if (p1 === null) p1 = p1a;\n var p2 = lineIntersection(p2a, p3, p1b, p2b);\n if (p2 === null) p2 = p2a;\n return new PolynomialBezier(p0, p1, p2, p3);\n }\n\n function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n var p0 = seg1.points[3];\n var p1 = seg2.points[0]; // Bevel\n\n if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n if (pointEqual(p0, p1)) return p0; // Round\n\n if (lineJoin === 2) {\n var angleOut = -seg1.tangentAngle(1);\n var angleIn = -seg2.tangentAngle(0) + Math.PI;\n var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n return p1;\n } // Miter\n\n\n var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n var intersection = lineIntersection(t0, p0, p1, t1);\n\n if (intersection && pointDistance(intersection, p0) < miterLimit) {\n outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n return intersection;\n }\n\n return p0;\n }\n\n function getIntersection(a, b) {\n var intersect = a.intersections(b);\n if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n if (intersect.length) return intersect[0];\n return null;\n }\n\n function pruneSegmentIntersection(a, b) {\n var outa = a.slice();\n var outb = b.slice();\n var intersect = getIntersection(a[a.length - 1], b[0]);\n\n if (intersect) {\n outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n outb[0] = b[0].split(intersect[1])[1];\n }\n\n if (a.length > 1 && b.length > 1) {\n intersect = getIntersection(a[0], b[b.length - 1]);\n\n if (intersect) {\n return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n }\n }\n\n return [outa, outb];\n }\n\n function pruneIntersections(segments) {\n var e;\n\n for (var i = 1; i < segments.length; i += 1) {\n e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n segments[i - 1] = e[0];\n segments[i] = e[1];\n }\n\n if (segments.length > 1) {\n e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n segments[segments.length - 1] = e[0];\n segments[0] = e[1];\n }\n\n return segments;\n }\n\n function offsetSegmentSplit(segment, amount) {\n /*\r\n We split each bezier segment into smaller pieces based\r\n on inflection points, this ensures the control point\r\n polygon is convex.\r\n (A cubic bezier can have none, one, or two inflection points)\r\n */\n var flex = segment.inflectionPoints();\n var left;\n var right;\n var split;\n var mid;\n\n if (flex.length === 0) {\n return [offsetSegment(segment, amount)];\n }\n\n if (flex.length === 1 || floatEqual(flex[1], 1)) {\n split = segment.split(flex[0]);\n left = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(right, amount)];\n }\n\n split = segment.split(flex[0]);\n left = split[0];\n var t = (flex[1] - flex[0]) / (1 - flex[0]);\n split = split[1].split(t);\n mid = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n }\n\n function OffsetPathModifier() {}\n\n extendPrototype([ShapeModifier], OffsetPathModifier);\n\n OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n this.lineJoin = data.lj;\n this._isAnimated = this.amount.effectsSequence.length !== 0;\n };\n\n OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n var outputBezier = shapePool.newElement();\n outputBezier.c = inputBezier.c;\n var count = inputBezier.length();\n\n if (!inputBezier.c) {\n count -= 1;\n }\n\n var i;\n var j;\n var segment;\n var multiSegments = [];\n\n for (i = 0; i < count; i += 1) {\n segment = PolynomialBezier.shapeSegment(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n\n if (!inputBezier.c) {\n for (i = count - 1; i >= 0; i -= 1) {\n segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n }\n\n multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n var lastPoint = null;\n var lastSeg = null;\n\n for (i = 0; i < multiSegments.length; i += 1) {\n var multiSegment = multiSegments[i];\n if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n lastSeg = multiSegment[multiSegment.length - 1];\n\n for (j = 0; j < multiSegment.length; j += 1) {\n segment = multiSegment[j];\n\n if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n } else {\n outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n }\n\n outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n lastPoint = segment.points[3];\n }\n }\n\n if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n return outputBezier;\n };\n\n OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n var miterLimit = this.miterLimit.v;\n var lineJoin = this.lineJoin;\n\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n }\n }\n\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal';\n var fStyle = 'normal';\n var len = styles.length;\n var styleName;\n\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n\n case 'bold':\n fWeight = '700';\n break;\n\n case 'black':\n fWeight = '900';\n break;\n\n case 'medium':\n fWeight = '500';\n break;\n\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n\n default:\n break;\n }\n }\n\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: []\n }\n };\n var combinedCharacters = []; // Hindi characters\n\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n var BLACK_FLAG_CODE_POINT = 127988;\n var CANCEL_TAG_CODE_POINT = 917631;\n var A_TAG_CODE_POINT = 917601;\n var Z_TAG_CODE_POINT = 917626;\n var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n\n return enabledFamilies.join(',');\n }\n\n function setUpNode(font, family) {\n var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span'); // Characters that vary significantly among different fonts\n\n node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n parentNode.style.fontSize = '300px'; // Reset any font properties\n\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode); // Remember width with no applied web font\n\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n\n function createHelper(fontData, def) {\n var engine = document.body && def ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n\n return helper.measureText(text).width;\n }\n\n return {\n measureText: measure\n };\n }\n\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach(function (data) {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n\n function addChars(chars) {\n if (!chars) {\n return;\n }\n\n if (!this.chars) {\n this.chars = [];\n }\n\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n\n j += 1;\n }\n\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n\n function getCharData(_char, style, font) {\n var i = 0;\n var len = this.chars.length;\n\n while (i < len) {\n if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n\n i += 1;\n }\n\n if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n }\n\n return emptyChar;\n }\n\n function measureText(_char2, fontName, size) {\n var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0)\n // to avoid collisions between equal chars\n\n var index = _char2;\n\n if (!fontData.cache[index]) {\n var tHelper = fontData.helper;\n\n if (_char2 === ' ') {\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index] = tHelper.measureText(_char2) / 100;\n }\n }\n\n return fontData.cache[index] * size;\n }\n\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n\n i += 1;\n }\n\n return this.fonts[0];\n }\n\n function getCodePoint(string) {\n var codePoint = 0;\n var first = string.charCodeAt(0);\n\n if (first >= 0xD800 && first <= 0xDBFF) {\n var second = string.charCodeAt(1);\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return codePoint;\n } // Skin tone modifiers\n\n\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n\n function isZeroWidthJoiner(charCode) {\n return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n } // This codepoint may change the appearance of the preceding character.\n // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n // as a colorful image as compared to a monochrome text variant.\n\n\n function isVariationSelector(charCode) {\n return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n } // The regional indicator symbols are a set of 26 alphabetic Unicode\n /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n // two-letter country codes in a way that allows optional special treatment.\n\n\n function isRegionalCode(string) {\n var codePoint = getCodePoint(string);\n\n if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n return true;\n }\n\n return false;\n } // Some Emoji implementations represent combinations of\n // two “regional indicator” letters as a single flag symbol.\n\n\n function isFlagEmoji(string) {\n return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n }\n\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n } // Regional flags start with a BLACK_FLAG_CODE_POINT\n // folowed by 5 chars in the TAG range\n // and end with a CANCEL_TAG_CODE_POINT\n\n\n function isRegionalFlag(text, index) {\n var codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint !== BLACK_FLAG_CODE_POINT) {\n return false;\n }\n\n var count = 0;\n index += 2;\n\n while (count < 5) {\n codePoint = getCodePoint(text.substr(index, 2));\n\n if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n return false;\n }\n\n count += 1;\n index += 2;\n }\n\n return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n }\n\n function setIsLoaded() {\n this.isLoaded = true;\n }\n\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isFlagEmoji = isFlagEmoji;\n Font.isRegionalCode = isRegionalCode;\n Font.isCombinedCharacter = isCombinedCharacter;\n Font.isRegionalFlag = isRegionalFlag;\n Font.isVariationSelector = isVariationSelector;\n Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n\n function SlotManager(animationData) {\n this.animationData = animationData;\n }\n\n SlotManager.prototype.getProp = function (data) {\n if (this.animationData.slots && this.animationData.slots[data.sid]) {\n return Object.assign(data, this.animationData.slots[data.sid].p);\n }\n\n return data;\n };\n\n function slotFactory(animationData) {\n return new SlotManager(animationData);\n }\n\n function RenderableElement() {}\n\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false; // layer's display state\n\n this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n this.isTransparent = false; // list of animated components\n\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n *\r\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function renderRenderable() {\n var i;\n var len = this.renderableComponents.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n },\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n }\n\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n }();\n\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n\n for (i = 0; i < len; i += 1) {\n eff = null;\n\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n function BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0;\n var len = this.data.masksProperties.length;\n\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n\n i += 1;\n }\n\n return false;\n },\n initExpressions: function initExpressions() {\n var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var LayerExpressionInterface = expressionsInterfaces('layer');\n var EffectsExpressionInterface = expressionsInterfaces('effects');\n var ShapeExpressionInterface = expressionsInterfaces('shape');\n var TextExpressionInterface = expressionsInterfaces('text');\n var CompExpressionInterface = expressionsInterfaces('comp');\n this.layerInterface = LayerExpressionInterface(this);\n\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n if (!this.data.sr) {\n this.data.sr = 1;\n } // effects manager\n\n\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n\n /**\r\n * @file\r\n * Handles element's layer frame update.\r\n * Checks layer in point and out point\r\n *\r\n */\n function FrameElement() {}\n\n FrameElement.prototype = {\n /**\r\n * @function\r\n * Initializes frame related properties.\r\n *\r\n */\n initFrame: function initFrame() {\n // set to true when inpoint is rendered\n this._isFirstFrame = false; // list of animated properties\n\n this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n this._mdf = false;\n },\n\n /**\r\n * @function\r\n * Calculates all dynamic values\r\n *\r\n * @param {number} num\r\n * current frame number in Layer's time\r\n * @param {boolean} isVisible\r\n * if layers is currently in range\r\n *\r\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n\n function FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n }\n\n FootageElement.prototype.prepareFrame = function () {};\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n FootageElement.prototype.getBaseElement = function () {\n return null;\n };\n\n FootageElement.prototype.renderFrame = function () {};\n\n FootageElement.prototype.destroy = function () {};\n\n FootageElement.prototype.initExpressions = function () {\n var expressionsInterfaces = getExpressionInterfaces();\n\n if (!expressionsInterfaces) {\n return;\n }\n\n var FootageInterface = expressionsInterfaces('footage');\n this.layerInterface = FootageInterface(this);\n };\n\n FootageElement.prototype.getFootageData = function () {\n return this.footageData;\n };\n\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n k: [100]\n }, 1, 0.01, this);\n }\n\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n\n AudioElement.prototype.show = function () {// this.audio.play()\n };\n\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n\n AudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n };\n\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n\n AudioElement.prototype.destroy = function () {};\n\n AudioElement.prototype.sourceRectAtTime = function () {};\n\n AudioElement.prototype.initExpressions = function () {};\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n\n case 0:\n return this.createComp(layer);\n\n case 1:\n return this.createSolid(layer);\n\n case 3:\n return this.createNull(layer);\n\n case 4:\n return this.createShape(layer);\n\n case 5:\n return this.createText(layer);\n\n case 6:\n return this.createAudio(layer);\n\n case 13:\n return this.createCamera(layer);\n\n case 15:\n return this.createFootage(layer);\n\n default:\n return this.createNull(layer);\n }\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n\n this.checkPendingElements();\n };\n\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n j = 0;\n\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n\n j += 1;\n }\n }\n };\n\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\n // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n\n i += 1;\n }\n };\n\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n BaseRenderer.prototype.getElementById = function (ind) {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.ind === ind) {\n return this.elements[i];\n }\n }\n\n return null;\n };\n\n BaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n\n if (path.length === 0) {\n return element;\n }\n\n return element.getElementByPath(path);\n };\n\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.slotManager = slotFactory(animData);\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n\n var effectTypes = {\n TRANSFORM_EFFECT: 'transformEFfect'\n };\n\n function TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n var mat = new Matrix();\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _localMatMdf: false,\n _opMdf: false,\n mat: mat,\n localMat: mat,\n localOpacity: 1\n };\n\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n } // TODO: check TYPE 11: Guided elements\n\n\n if (this.data.ty !== 11) {// this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n\n for (i = 0; i < len; i += 1) {\n finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n }\n }\n }\n\n if (this.finalTransform._matMdf) {\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n }\n\n if (this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n }\n },\n renderLocalTransform: function renderLocalTransform() {\n if (this.localTransforms) {\n var i = 0;\n var len = this.localTransforms.length;\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n while (i < len) {\n if (this.localTransforms[i]._mdf) {\n this.finalTransform._localMatMdf = true;\n }\n\n if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n this.finalTransform._opMdf = true;\n }\n\n i += 1;\n }\n }\n\n if (this.finalTransform._localMatMdf) {\n var localMat = this.finalTransform.localMat;\n this.localTransforms[0].matrix.clone(localMat);\n\n for (i = 1; i < len; i += 1) {\n var lmat = this.localTransforms[i].matrix;\n localMat.multiply(lmat);\n }\n\n localMat.multiply(this.finalTransform.mat);\n }\n\n if (this.finalTransform._opMdf) {\n var localOp = this.finalTransform.localOpacity;\n\n for (i = 0; i < len; i += 1) {\n localOp *= this.localTransforms[i].opacity * 0.01;\n }\n\n this.finalTransform.localOpacity = localOp;\n }\n }\n },\n searchEffectTransforms: function searchEffectTransforms() {\n if (this.renderableEffectsManager) {\n var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n if (transformEffects.length) {\n this.localTransforms = [];\n this.finalTransform.localMat = new Matrix();\n var i = 0;\n var len = transformEffects.length;\n\n for (i = 0; i < len; i += 1) {\n this.localTransforms.push(transformEffects[i]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n\n var i;\n var len = transforms.length;\n var ptNew;\n\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n\n for (i = 0; i < len; i += 1) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n\n path = createNS('path');\n\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n } else {\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n } // TODO move this to a factory or to a constructor\n\n\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n } // TODO move this to a factory or to a constructor\n\n\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n } // pathNodes.__renderedString = pathString;\n\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n\n viewData.lastPath = pathString;\n }\n };\n\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n\n return fil;\n }\n\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n\n return ob;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true,\n svgLumaHidden: true,\n offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\n };\n\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n\n if (/firefox/i.test(navigator.userAgent)) {\n ob.svgLumaHidden = false;\n }\n\n return ob;\n }();\n\n var registeredEffects$1 = {};\n var idPrefix = 'filter_result_';\n\n function SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects$1[type]) {\n var Effect = registeredEffects$1[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n\n if (registeredEffects$1[type].countsAsEffect) {\n count += 1;\n }\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n SVGEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect$1(id, effect, countsAsEffect) {\n registeredEffects$1[id] = {\n effect: effect,\n countsAsEffect: countsAsEffect\n };\n }\n\n function SVGBaseElement() {}\n\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n if (this.data.td) {\n this.matteMasks = {};\n var gg = createNS('g');\n gg.setAttribute('id', this.layerId);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n this.globalData.defs.appendChild(gg);\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._localMatMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n this.searchEffectTransforms();\n },\n getMatte: function getMatte(matteType) {\n // This should not be a common case. But for backward compatibility, we'll create the matte object.\n // It solves animations that have two consecutive layers marked as matte masks.\n // Which is an undefined behavior in AE.\n if (!this.matteMasks) {\n this.matteMasks = {};\n }\n\n if (!this.matteMasks[matteType]) {\n var id = this.layerId + '_' + matteType;\n var filId;\n var fil;\n var useElement;\n var gg;\n\n if (matteType === 1 || matteType === 3) {\n var masker = createNS('mask');\n masker.setAttribute('id', id);\n masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n masker.appendChild(useElement);\n this.globalData.defs.appendChild(masker);\n\n if (!featureSupport.maskType && matteType === 1) {\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(useElement);\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (matteType === 2) {\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', id);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); /// /\n\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc); /// /\n\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n maskGrouper.appendChild(useElement);\n\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\n\n this.matteMasks[matteType] = id;\n }\n\n return this.matteMasks[matteType];\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n }\n };\n\n /**\r\n * @file\r\n * Handles AE's layer parenting property.\r\n *\r\n */\n function HierarchyElement() {}\n\n HierarchyElement.prototype = {\n /**\r\n * @function\r\n * Initializes hierarchy properties\r\n *\r\n */\n initHierarchy: function initHierarchy() {\n // element's parent list\n this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n this._isParent = false;\n this.checkParenting();\n },\n\n /**\r\n * @function\r\n * Sets layer's hierarchy.\r\n * @param {array} hierarch\r\n * layer's parent list\r\n *\r\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n\n /**\r\n * @function\r\n * Sets layer as parent.\r\n *\r\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n\n /**\r\n * @function\r\n * Searches layer's parenting chain\r\n *\r\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n\n function RenderableDOMElement() {}\n\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n\n if (this.assetData && this.assetData.sid) {\n this.assetData = globalData.slotManager.getProp(this.assetData);\n }\n\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n\n var i;\n var len = this.shapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n\n i += 1;\n }\n\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n\n while (i) {\n i -= 1;\n\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n\n var lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square'\n };\n var lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel'\n };\n\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n var i = 0;\n var len = transformers.length;\n\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n\n i += 1;\n }\n }\n\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n\n if (!this.k) {\n this.getValue(true);\n }\n\n this._isAnimated = this.k;\n }\n\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n\n extendPrototype([DynamicPropertyContainer], DashProperty);\n\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n function SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n }\n\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n if (diff > 0.01) {\n return false;\n }\n\n i += 1;\n }\n\n return true;\n };\n\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n\n return true;\n };\n\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n\n if (this.o.length) {\n len = this.prop.v.length;\n\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n\n this._mdf = !forceRender;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n\n return shapeString;\n };\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n\n var _matrixHelper = new Matrix();\n\n var ob = {\n createRenderFunction: createRenderFunction\n };\n\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n\n case 'gf':\n return renderGradient;\n\n case 'gs':\n return renderGradientStroke;\n\n case 'st':\n return renderStroke;\n\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n\n case 'tr':\n return renderContentTransform;\n\n case 'no':\n return renderNoop;\n\n default:\n return null;\n }\n }\n\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n\n function renderNoop() {}\n\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var iterations;\n var k;\n\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n mat.multiply(itemData.transformers[k].mProps.v);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n\n paths = itemData.sh.paths;\n jLen = paths._length;\n\n if (redraw) {\n pathStringTransformed = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n\n var stops;\n var i;\n var len;\n var stop;\n\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n\n len = stops.length;\n\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n } // gfill.setAttribute('fy','200');\n\n }\n }\n\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n\n return ob;\n }();\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n /*\r\n This method searches for multiple shapes that affect a single element and one of them is animated\r\n */\n\n\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n\n return elementData;\n };\n\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n\n i += 1;\n }\n\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n };\n\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n len = ownStyles.length;\n\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n\n this.renderShape();\n\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n\n return updated;\n };\n\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n\n if (data.d && data.d.sid) {\n data.d = elem.globalData.slotManager.getProp(data.d);\n }\n\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n\n return obj;\n };\n\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n\n return this.kf;\n };\n\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n\n i += 1;\n }\n\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n\n return this.data.d.k[this.keysIndex].s;\n };\n\n TextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n var shouldCombineNext = false;\n var currentChars = '';\n\n while (i < len) {\n shouldCombine = shouldCombineNext;\n shouldCombineNext = false;\n charCode = text.charCodeAt(i);\n currentChars = text.charAt(i);\n\n if (FontManager.isCombinedCharacter(charCode)) {\n shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n if (FontManager.isRegionalFlag(text, i)) {\n currentChars = text.substr(i, 14);\n } else {\n secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (FontManager.isModifier(charCode, secondCharCode)) {\n currentChars = text.substr(i, 2);\n shouldCombine = true;\n } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n currentChars = text.substr(i, 4);\n } else {\n currentChars = text.substr(i, 2);\n }\n }\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n\n if (FontManager.isVariationSelector(charCode)) {\n shouldCombine = true;\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n shouldCombine = true;\n shouldCombineNext = true;\n }\n\n if (shouldCombine) {\n charactersArray[charactersArray.length - 1] += currentChars;\n shouldCombine = false;\n } else {\n charactersArray.push(currentChars);\n }\n\n i += currentChars.length;\n }\n\n return charactersArray;\n };\n\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n } //\n\n\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n\n if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n\n default:\n documentData.justifyOffset = 0;\n }\n }\n\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n\n ind = 0;\n based = animatorData.s.b;\n\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n\n ind += 1;\n }\n }\n\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n\n if (currentInd != letterData.anIndexes[j]) {\n // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.setCurrentData(dData);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || {\n k: 100\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorPropFactory.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\r\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n }\n\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n\n mult = easer(mult);\n } // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n\n var threshold = 0.5 - smoothness * 0.5;\n\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n\n if (this._pathData.r.v) {\n paths = paths.reverse();\n } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n i = len;\n\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n\n this._pathData.pi = pathInfo;\n }\n\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO; //\n\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n\n isNewLine = false;\n }\n }\n\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n } //\n\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n\n default:\n break;\n }\n\n currentLine = letters[i].line;\n }\n\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n\n flag = true; // Force alignment only works with a single line for now\n\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n }\n\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n\n letterO = elemOpacity;\n }\n\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function ITextElement() {}\n\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n\n return shapeStr;\n };\n\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n\n matrixHelper.translate(0, -documentData.ls, 0);\n\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n\n default:\n break;\n }\n\n matrixHelper.translate(xPos, yPos, 0);\n };\n\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n\n ITextElement.prototype.emptyProp = new LetterProps();\n\n ITextElement.prototype.destroy = function () {};\n\n ITextElement.prototype.validateText = function () {\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n var emptyShapeData = {\n shapes: []\n };\n\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n\n i += 1;\n }\n\n textContents.push(currentTextContent);\n return textContents;\n };\n\n SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n\n return data;\n };\n\n SVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n\n this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n\n case 2:\n justify = 'middle';\n break;\n\n default:\n justify = 'start';\n break;\n }\n\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null\n };\n }\n\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n xPos += trackingOffset;\n }\n\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n } //\n\n }\n\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n\n return this.bbox;\n };\n\n SVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n this.validateText();\n\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([IImageElement], ISolidElement);\n\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n NullElement.prototype.renderFrame = function () {};\n\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n\n NullElement.prototype.destroy = function () {};\n\n NullElement.prototype.sourceRectAtTime = function () {};\n\n NullElement.prototype.hide = function () {};\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGRendererBase() {}\n\n extendPrototype([BaseRenderer], SVGRendererBase);\n\n SVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRendererBase.prototype.updateContainerSize = function () {};\n\n SVGRendererBase.prototype.findIndexByInd = function (ind) {\n var i = 0;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ind === ind) {\n return i;\n }\n }\n\n return -1;\n };\n\n SVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n\n element.initExpressions();\n }\n\n this.appendElementInPos(element, pos);\n\n if (this.layers[pos].tt) {\n var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n if (elementIndex === -1) {\n return;\n }\n\n if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n this.buildItem(elementIndex);\n this.addPendingElement(element);\n } else {\n var matteElement = elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[pos].tt);\n element.setMatte(matteMask);\n }\n }\n };\n\n SVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n var matteElement = this.elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[i].tt);\n element.setMatte(matteMask);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n } // console.log('-------');\n // console.log('FRAME ',num);\n\n\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n\n SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n\n if (!newElement) {\n return;\n }\n\n var i = 0;\n var nextElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n\n i += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n\n SVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function ICompElement() {}\n\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n\n this.hide();\n };\n /* ICompElement.prototype.hide = function(){\r\n if(!this.hidden){\r\n this.hideElement();\r\n var i,len = this.elements.length;\r\n for( i = 0; i < len; i+=1 ){\r\n if(this.elements[i]){\r\n this.elements[i].hide();\r\n }\r\n }\r\n }\r\n }; */\n\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n\n var i;\n var len = this.elements.length;\n\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n SVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n },\n width: config && config.width,\n height: config && config.height,\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n\n extendPrototype([SVGRendererBase], SVGRenderer);\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n\n var sequence = this.sequences[key];\n\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n\n i += 1;\n }\n\n if (_mdf) {\n sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n }\n }\n\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n }\n };\n\n var lumaLoader = function lumaLoader() {\n var id = '__lottie_element_luma_buffer';\n var lumaBuffer = null;\n var lumaBufferCtx = null;\n var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n // Naming it solution 2 to mark the extra comment lines.\n\n /*\r\n var svgString = [\r\n '',\r\n ].join('');\r\n var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n var url = URL.createObjectURL(blob);\r\n */\n\n function createLumaSvgFilter() {\n var _svg = createNS('svg');\n\n var fil = createNS('filter');\n var matrix = createNS('feColorMatrix');\n fil.setAttribute('id', id);\n matrix.setAttribute('type', 'matrix');\n matrix.setAttribute('color-interpolation-filters', 'sRGB');\n matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n fil.appendChild(matrix);\n\n _svg.appendChild(fil);\n\n _svg.setAttribute('id', id + '_svg');\n\n if (featureSupport.svgLumaHidden) {\n _svg.style.display = 'none';\n }\n\n return _svg;\n }\n\n function loadLuma() {\n if (!lumaBuffer) {\n svg = createLumaSvgFilter();\n document.body.appendChild(svg);\n lumaBuffer = createTag('canvas');\n lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n lumaBufferCtx.fillRect(0, 0, 1, 1);\n }\n }\n\n function getLuma(canvas) {\n if (!lumaBuffer) {\n loadLuma();\n }\n\n lumaBuffer.width = canvas.width;\n lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n lumaBufferCtx.filter = 'url(#' + id + ')';\n return lumaBuffer;\n }\n\n return {\n load: loadLuma,\n get: getLuma\n };\n };\n\n function createCanvas(width, height) {\n if (featureSupport.offscreenCanvas) {\n return new OffscreenCanvas(width, height);\n }\n\n var canvas = createTag('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n var assetLoader = function () {\n return {\n loadLumaCanvas: lumaLoader.load,\n getLumaCanvas: lumaLoader.get,\n createCanvas: createCanvas\n };\n }();\n\n var registeredEffects = {};\n\n function CVEffects(elem) {\n var i;\n var len = elem.data.ef ? elem.data.ef.length : 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n }\n\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n\n CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n CVEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n\n return effects;\n };\n\n function registerEffect(id, effect) {\n registeredEffects[id] = {\n effect: effect\n };\n }\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n\n this.hasMasks = hasMasks;\n\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVBaseElement() {}\n\n var operationsMap = {\n 1: 'source-in',\n 2: 'source-out',\n 3: 'source-in',\n 4: 'source-out'\n };\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n // If the layer is masked we will use two buffers to store each different states of the drawing\n // This solution is not ideal for several reason. But unfortunately, because of the recursive\n // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n // It might be challenging because the layer most likely is transformed in some way\n if (this.data.tt >= 1) {\n this.buffers = [];\n var canvasContext = this.globalData.canvasContext;\n var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas);\n var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas2);\n\n if (this.data.tt >= 3 && !document._isProxy) {\n assetLoader.loadLumaCanvas();\n }\n }\n\n this.canvasContext = this.globalData.canvasContext;\n this.transformCanvas = this.globalData.transformCanvas;\n this.renderableEffectsManager = new CVEffects(this);\n this.searchEffectTransforms();\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n clearCanvas: function clearCanvas(canvasContext) {\n canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n },\n prepareLayer: function prepareLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[0];\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n this.currentTransform = this.canvasContext.getTransform();\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform);\n }\n },\n exitLayer: function exitLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n // that only contains the content of this layer\n // (if it is a composition, it also includes the nested layers)\n\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx);\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n if (this.data.tt >= 3 && !document._isProxy) {\n // We copy the painted mask to a buffer that has a color matrix filter applied to it\n // that applies the rgb values to the alpha channel\n var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n var lumaBufferCtx = lumaBuffer.getContext('2d');\n lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n this.canvasContext.drawImage(lumaBuffer, 0, 0);\n }\n\n this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n // We use destination-over to draw the global drawing below the current layer\n\n this.canvasContext.globalCompositeOperation = 'destination-over';\n this.canvasContext.drawImage(this.buffers[0], 0, 0);\n this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n this.canvasContext.globalCompositeOperation = 'source-over';\n }\n },\n renderFrame: function renderFrame(forceRender) {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n if (this.data.td === 1 && !forceRender) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.prepareLayer();\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n this.exitLayer();\n\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n\n if (data.lj == 1) {\n // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem[\"do\"] = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n\n CVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n\n ownModifiers.push(modifier);\n }\n\n this.addProcessedElement(arr[i], i + 1);\n }\n\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n\n CVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type; // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n\n if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n\n if (type === 'st' || type === 'gs') {\n renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n } else {\n renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n\n renderer.ctxOpacity(currentStyle.coOp);\n\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle[\"do\"];\n }\n }\n\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n\n if (type === 'st' || type === 'gs') {\n // ctx.stroke();\n renderer.ctxStroke();\n\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n\n if (type !== 'st' && type !== 'gs') {\n // ctx.fill(currentStyle.r);\n this.globalData.renderer.ctxFill(currentStyle.r);\n }\n\n renderer.restore();\n }\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {//\n }\n }\n\n if (isMain) {\n this.drawLayer();\n }\n };\n\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n\n styledShape.trNodes = shapeNodes;\n }\n };\n\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n\n styleElem.grd = grd;\n }\n\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem[\"do\"] = d.dashoffset[0];\n }\n\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n\n this.fill = hasFill;\n var hasStroke = false;\n\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n\n cnt += 1;\n }\n };\n\n CVTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n var renderer = this.globalData.renderer;\n\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n renderer.save();\n renderer.ctxTransform(renderedLetter.p);\n renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n renderer.ctxFillStyle(renderedLetter.fc);\n lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n renderer.ctxFillStyle(this.values.fill); // ctx.fillStyle = this.values.fill;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n renderer.ctxFill(); // this.globalData.canvasContext.fill();\n /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n renderer.ctxStrokeStyle(this.values.stroke); // ctx.strokeStyle = this.values.stroke;\n }\n\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n\n this.globalData.canvasContext.closePath();\n renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n /// ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n };\n\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n };\n\n CVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n CVSolidElement.prototype.renderInnerContent = function () {\n // var ctx = this.canvasContext;\n this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n };\n\n function CanvasRendererBase() {}\n\n extendPrototype([BaseRenderer], CanvasRendererBase);\n\n CanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n };\n\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n };\n\n CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n this.canvasContext.fillStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n this.canvasContext.strokeStyle = value;\n };\n\n CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n this.canvasContext.lineWidth = value;\n };\n\n CanvasRendererBase.prototype.ctxLineCap = function (value) {\n this.canvasContext.lineCap = value;\n };\n\n CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n this.canvasContext.lineJoin = value;\n };\n\n CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n this.canvasContext.miterLimit = value;\n };\n\n CanvasRendererBase.prototype.ctxFill = function (rule) {\n this.canvasContext.fill(rule);\n };\n\n CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n this.canvasContext.fillRect(x, y, w, h);\n };\n\n CanvasRendererBase.prototype.ctxStroke = function () {\n this.canvasContext.stroke();\n };\n\n CanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRendererBase.prototype.save = function () {\n this.canvasContext.save();\n };\n\n CanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.globalData.blendMode = 'source-over';\n }\n\n this.contextData.restore(actionFlag);\n };\n\n CanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n\n this.contextData.setContext(this.canvasContext);\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n\n CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n this.reset();\n var elementWidth;\n var elementHeight;\n\n if (width) {\n elementWidth = width;\n elementHeight = height;\n this.canvasContext.canvas.width = elementWidth;\n this.canvasContext.canvas.height = elementHeight;\n } else {\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n } else {\n elementWidth = this.canvasContext.canvas.width;\n elementHeight = this.canvasContext.canvas.height;\n }\n\n this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n }\n\n var elementRel;\n var animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n\n CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n // console.log('NEW: ',num);\n\n var i;\n var len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n\n CanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\r\n element.resize(this.globalData.transformCanvas);\r\n } */\n };\n\n CanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n function CanvasContext() {\n this.opacity = -1;\n this.transform = createTypedArray('float32', 16);\n this.fillStyle = '';\n this.strokeStyle = '';\n this.lineWidth = '';\n this.lineCap = '';\n this.lineJoin = '';\n this.miterLimit = '';\n this.id = Math.random();\n }\n\n function CVContextData() {\n this.stack = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n var i;\n var len = 15;\n\n for (i = 0; i < len; i += 1) {\n var canvasContext = new CanvasContext();\n this.stack[i] = canvasContext;\n }\n\n this._length = len;\n this.nativeContext = null;\n this.transformMat = new Matrix();\n this.currentOpacity = 1; //\n\n this.currentFillStyle = '';\n this.appliedFillStyle = ''; //\n\n this.currentStrokeStyle = '';\n this.appliedStrokeStyle = ''; //\n\n this.currentLineWidth = '';\n this.appliedLineWidth = ''; //\n\n this.currentLineCap = '';\n this.appliedLineCap = ''; //\n\n this.currentLineJoin = '';\n this.appliedLineJoin = ''; //\n\n this.appliedMiterLimit = '';\n this.currentMiterLimit = '';\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.stack[i] = new CanvasContext();\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.stack[this.cArrPos].opacity = 1;\n };\n\n CVContextData.prototype.restore = function (forceRestore) {\n this.cArrPos -= 1;\n var currentContext = this.stack[this.cArrPos];\n var transform = currentContext.transform;\n var i;\n var arr = this.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = transform[i];\n }\n\n if (forceRestore) {\n this.nativeContext.restore();\n var prevStack = this.stack[this.cArrPos + 1];\n this.appliedFillStyle = prevStack.fillStyle;\n this.appliedStrokeStyle = prevStack.strokeStyle;\n this.appliedLineWidth = prevStack.lineWidth;\n this.appliedLineCap = prevStack.lineCap;\n this.appliedLineJoin = prevStack.lineJoin;\n this.appliedMiterLimit = prevStack.miterLimit;\n }\n\n this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n this.nativeContext.globalAlpha = currentContext.opacity;\n this.currentOpacity = currentContext.opacity;\n }\n\n this.currentFillStyle = currentContext.fillStyle;\n this.currentStrokeStyle = currentContext.strokeStyle;\n this.currentLineWidth = currentContext.lineWidth;\n this.currentLineCap = currentContext.lineCap;\n this.currentLineJoin = currentContext.lineJoin;\n this.currentMiterLimit = currentContext.miterLimit;\n };\n\n CVContextData.prototype.save = function (saveOnNativeFlag) {\n if (saveOnNativeFlag) {\n this.nativeContext.save();\n }\n\n var props = this.cTr.props;\n\n if (this._length <= this.cArrPos) {\n this.duplicate();\n }\n\n var currentStack = this.stack[this.cArrPos];\n var i;\n\n for (i = 0; i < 16; i += 1) {\n currentStack.transform[i] = props[i];\n }\n\n this.cArrPos += 1;\n var newStack = this.stack[this.cArrPos];\n newStack.opacity = currentStack.opacity;\n newStack.fillStyle = currentStack.fillStyle;\n newStack.strokeStyle = currentStack.strokeStyle;\n newStack.lineWidth = currentStack.lineWidth;\n newStack.lineCap = currentStack.lineCap;\n newStack.lineJoin = currentStack.lineJoin;\n newStack.miterLimit = currentStack.miterLimit;\n };\n\n CVContextData.prototype.setOpacity = function (value) {\n this.stack[this.cArrPos].opacity = value;\n };\n\n CVContextData.prototype.setContext = function (value) {\n this.nativeContext = value;\n };\n\n CVContextData.prototype.fillStyle = function (value) {\n if (this.stack[this.cArrPos].fillStyle !== value) {\n this.currentFillStyle = value;\n this.stack[this.cArrPos].fillStyle = value;\n }\n };\n\n CVContextData.prototype.strokeStyle = function (value) {\n if (this.stack[this.cArrPos].strokeStyle !== value) {\n this.currentStrokeStyle = value;\n this.stack[this.cArrPos].strokeStyle = value;\n }\n };\n\n CVContextData.prototype.lineWidth = function (value) {\n if (this.stack[this.cArrPos].lineWidth !== value) {\n this.currentLineWidth = value;\n this.stack[this.cArrPos].lineWidth = value;\n }\n };\n\n CVContextData.prototype.lineCap = function (value) {\n if (this.stack[this.cArrPos].lineCap !== value) {\n this.currentLineCap = value;\n this.stack[this.cArrPos].lineCap = value;\n }\n };\n\n CVContextData.prototype.lineJoin = function (value) {\n if (this.stack[this.cArrPos].lineJoin !== value) {\n this.currentLineJoin = value;\n this.stack[this.cArrPos].lineJoin = value;\n }\n };\n\n CVContextData.prototype.miterLimit = function (value) {\n if (this.stack[this.cArrPos].miterLimit !== value) {\n this.currentMiterLimit = value;\n this.stack[this.cArrPos].miterLimit = value;\n }\n };\n\n CVContextData.prototype.transform = function (props) {\n this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n currentTransform.cloneFromProps(this.transformMat.props);\n var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CVContextData.prototype.opacity = function (op) {\n var currentOpacity = this.stack[this.cArrPos].opacity;\n currentOpacity *= op < 0 ? 0 : op;\n\n if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n if (this.currentOpacity !== op) {\n this.nativeContext.globalAlpha = op;\n this.currentOpacity = op;\n }\n\n this.stack[this.cArrPos].opacity = currentOpacity;\n }\n };\n\n CVContextData.prototype.fill = function (rule) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fill(rule);\n };\n\n CVContextData.prototype.fillRect = function (x, y, w, h) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n\n this.nativeContext.fillRect(x, y, w, h);\n };\n\n CVContextData.prototype.stroke = function () {\n if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n this.appliedStrokeStyle = this.currentStrokeStyle;\n this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n }\n\n if (this.appliedLineWidth !== this.currentLineWidth) {\n this.appliedLineWidth = this.currentLineWidth;\n this.nativeContext.lineWidth = this.appliedLineWidth;\n }\n\n if (this.appliedLineCap !== this.currentLineCap) {\n this.appliedLineCap = this.currentLineCap;\n this.nativeContext.lineCap = this.appliedLineCap;\n }\n\n if (this.appliedLineJoin !== this.currentLineJoin) {\n this.appliedLineJoin = this.currentLineJoin;\n this.nativeContext.lineJoin = this.appliedLineJoin;\n }\n\n if (this.appliedMiterLimit !== this.currentMiterLimit) {\n this.appliedMiterLimit = this.currentMiterLimit;\n this.nativeContext.miterLimit = this.appliedMiterLimit;\n }\n\n this.nativeContext.stroke();\n };\n\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n\n CVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.layers = null;\n this.elements = null;\n };\n\n CVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || '',\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n\n if (this.renderConfig.clearCanvas) {\n this.ctxTransform = this.contextData.transform.bind(this.contextData);\n this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n this.ctxFill = this.contextData.fill.bind(this.contextData);\n this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n this.save = this.contextData.save.bind(this.contextData);\n }\n }\n\n extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function HBaseElement() {}\n\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n if (this.finalTransform._matMdf) {\n var matrixValue = this.finalTransform.mat.toCSS();\n transformedElementStyle.transform = matrixValue;\n transformedElementStyle.webkitTransform = matrixValue;\n }\n\n if (this.finalTransform._opMdf) {\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n\n if (this.matteElement) {\n this.matteElement = null;\n }\n\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n HSolidElement.prototype.createContent = function () {\n var rect;\n\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n\n this.layerElement.appendChild(rect);\n };\n\n function HShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = []; // Full shape data\n\n this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n this.stylesList = []; // List of modifiers that will be applied to shapes\n\n this.shapeModifiers = []; // List of items in shape tree\n\n this.itemsData = []; // List of items in previous shape tree\n\n this.processedElements = []; // List of animated components\n\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i;\n var len = transformers.length;\n\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n\n return point;\n };\n\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i;\n var len = shape._length;\n var vPoint;\n var oPoint;\n var nextIPoint;\n var nextVPoint;\n\n if (len <= 1) {\n return;\n }\n\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n };\n\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n // eslint-disable-line no-plusplus\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b |= 0; // eslint-disable-line no-bitwise\n\n a |= 0; // eslint-disable-line no-bitwise\n\n c |= 0; // eslint-disable-line no-bitwise\n\n if (a === 0 && b === 0) {//\n } else if (a === 0) {\n t = -c / b;\n\n if (t > 0 && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n } else {\n b2ac = b * b - 4 * c * a;\n\n if (b2ac >= 0) {\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n }\n }\n\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i;\n var len = itemsData.length;\n\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n }\n }\n };\n\n HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n var width = 0;\n\n if (widthProperty.keyframes) {\n for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n var kfw = widthProperty.keyframes[i].s;\n\n if (kfw > width) {\n width = kfw;\n }\n }\n\n width *= widthProperty.mult;\n } else {\n width = widthProperty.v * widthProperty.mult;\n }\n\n boundingBox.x -= width;\n boundingBox.xMax += width;\n boundingBox.y -= width;\n boundingBox.yMax += width;\n };\n\n HShapeElement.prototype.currentBoxContains = function (box) {\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n };\n\n HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\n\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n var tempBoundingBox = this.tempBoundingBox;\n var max = 999999;\n tempBoundingBox.x = max;\n tempBoundingBox.xMax = -max;\n tempBoundingBox.y = max;\n tempBoundingBox.yMax = -max;\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n\n var changed = false;\n\n if (this.currentBBox.w !== tempBoundingBox.width) {\n this.currentBBox.w = tempBoundingBox.width;\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\n changed = true;\n }\n\n if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\n }\n\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n this.currentBBox.w = tempBoundingBox.width;\n this.currentBBox.h = tempBoundingBox.height;\n this.currentBBox.x = tempBoundingBox.x;\n this.currentBBox.y = tempBoundingBox.y;\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n var shapeStyle = this.shapeCont.style;\n var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n shapeStyle.transform = shapeTransform;\n shapeStyle.webkitTransform = shapeTransform;\n }\n }\n };\n\n function HTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.textPaths = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n this.renderType = 'svg';\n this.isMasked = false;\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\n\n if (this.isMasked) {\n this.renderType = 'svg';\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n this.svgElement.setAttribute('width', this.compW);\n this.svgElement.setAttribute('height', this.compH);\n var g = createNS('g');\n this.maskedElement.appendChild(g);\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = this.layerElement;\n }\n\n this.checkParenting();\n };\n\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var innerElemStyle = this.innerElem.style;\n var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n innerElemStyle.fill = textColor;\n innerElemStyle.color = textColor;\n\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n if (fontData.fClass) {\n this.innerElem.className = fontData.fClass;\n } else {\n innerElemStyle.fontFamily = fontData.fFamily;\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i;\n var len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan;\n var tParent;\n var tCont;\n var matrixHelper = this.mHelper;\n var shapes;\n var shapeStr = '';\n var cnt = 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = createNS('path');\n tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n tSpan.setAttribute('stroke-miterlimit', '4');\n } else {\n tSpan = this.textPaths[cnt];\n }\n\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = createTag('div');\n tParent.style.lineHeight = 0;\n tCont = createNS('svg');\n tCont.appendChild(tSpan);\n styleDiv(tParent);\n }\n }\n } else if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n } // tSpan.setAttribute('visibility', 'hidden');\n\n\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n\n matrixHelper.reset();\n\n if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n\n if (shapeData && shapeData.shapes) {\n // document.body.appendChild is needed to get exact measure of shape\n document.body.appendChild(tCont);\n var boundingBox = tCont.getBBox();\n tCont.setAttribute('width', boundingBox.width + 2);\n tCont.setAttribute('height', boundingBox.height + 2);\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n var tContStyle = tCont.style;\n var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n tContStyle.transform = tContTranslation;\n tContStyle.webkitTransform = tContTranslation;\n letters[i].yOffset = boundingBox.y - 1;\n } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n\n tParent.appendChild(tCont);\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent); //\n\n var tStyle = tSpan.style;\n var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n tStyle.transform = tSpanTranslation;\n tStyle.webkitTransform = tSpanTranslation;\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } //\n\n\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n\n HTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var svgStyle;\n\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n }\n\n if (this.isMasked && this.finalTransform._matMdf) {\n // Todo Benchmark if using this is better than getBBox\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n svgStyle = this.svgElement.style;\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n svgStyle.transform = translation;\n svgStyle.webkitTransform = translation;\n }\n }\n\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n\n var i;\n var len;\n var count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n } else {\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.webkitTransform = renderedLetter.m;\n textSpan.style.transform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n textSpan.style.opacity = renderedLetter.o;\n\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n }\n\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n\n var margin = 1;\n\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n svgStyle = this.svgElement.style;\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n svgStyle.transform = svgTransform;\n svgStyle.webkitTransform = svgTransform;\n }\n }\n };\n\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\n }\n\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i;\n var len = data.ks.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n this.finalTransform = {\n mProp: this\n };\n }\n\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n HCameraElement.prototype.setup = function () {\n var i;\n var len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n // [perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n perspectiveStyle = comp.perspectiveElem.style;\n containerStyle = comp.container.style;\n var perspective = this.pe.v + 'px';\n var origin = '0px 0px 0px';\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n perspectiveStyle.perspective = perspective;\n perspectiveStyle.webkitPerspective = perspective;\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n perspectiveStyle.transform = matrix;\n perspectiveStyle.webkitTransform = matrix;\n }\n }\n };\n\n HCameraElement.prototype.createElements = function () {};\n\n HCameraElement.prototype.hide = function () {};\n\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i;\n var len;\n\n if (this.hierarchy) {\n len = this.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n this.mat.reset();\n\n if (this.hierarchy) {\n len = this.hierarchy.length - 1;\n\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\n }\n\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n\n if (this.a) {\n var diffVector;\n\n if (this.p) {\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n }\n\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n var matValue = this.mat.toCSS();\n containerStyle = comp.container.style;\n containerStyle.transform = matValue;\n containerStyle.webkitTransform = matValue;\n }\n\n if (this.pe._mdf) {\n perspectiveStyle = comp.perspectiveElem.style;\n perspectiveStyle.perspective = this.pe.v + 'px';\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n\n this.mat.clone(this._prevMat);\n }\n }\n\n this._isFirstFrame = false;\n };\n\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n\n HCameraElement.prototype.destroy = function () {};\n\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n\n if (this.data.hasMask) {\n this.imageElem = createNS('image');\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n\n img.crossOrigin = 'anonymous';\n img.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n\n function HybridRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([BaseRenderer], HybridRendererBase);\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n\n if (!newDOMElement) {\n return;\n }\n\n var layer = this.layers[pos];\n\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement;\n var nextLayer;\n var tmpDOMElement;\n\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n\n i += 1;\n }\n\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRendererBase.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n\n return new HShapeElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextLottieElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRendererBase.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n\n return new HImageElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n\n return new HSolidElement(data, this.globalData, this);\n };\n\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n\n i += 1;\n }\n\n return null;\n };\n\n HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n var style;\n var containerStyle;\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n style = perspectiveElem.style;\n style.width = this.globalData.compSize.w + 'px';\n style.height = this.globalData.compSize.h + 'px';\n var center = '50% 50%';\n style.webkitTransformOrigin = center;\n style.mozTransformOrigin = center;\n style.transformOrigin = center;\n containerStyle = container.style;\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n containerStyle.transform = matrix;\n containerStyle.webkitTransform = matrix;\n }\n\n perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos,\n type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n\n HybridRendererBase.prototype.build3dContainers = function () {\n var i;\n var len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n\n len = this.threeDElements.length;\n\n for (i = len - 1; i >= 0; i -= 1) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0;\n var len = this.threeDElements.length;\n\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n\n break;\n }\n\n i += 1;\n }\n };\n\n HybridRendererBase.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n var style = resizerElem.style;\n style.width = animData.w + 'px';\n style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n style.transformStyle = 'flat';\n style.mozTransformStyle = 'flat';\n style.webkitTransformStyle = 'flat';\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData; // Mask animation\n\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n\n HybridRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRendererBase.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx;\n var sy;\n var tx;\n var ty;\n\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n\n var style = this.resizerElem.style;\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n style.transform = style.webkitTransform;\n };\n\n HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRendererBase.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRendererBase.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRendererBase.prototype.initItems = function () {\n this.buildAllItems();\n\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i;\n var len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n var style = this.threeDElements[i].perspectiveElem.style;\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n style.perspective = style.webkitPerspective;\n }\n }\n };\n\n HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n var floatingContainer = createTag('div');\n\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n\n extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n\n j += 1;\n }\n\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n\n HCompElement.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n },\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n\n extendPrototype([HybridRendererBase], HybridRenderer);\n\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n\n return new HCompElement(data, this.globalData, this);\n };\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n\n i += 1;\n }\n\n return null; // return {active:false};\n }\n\n Object.defineProperty(_thisLayerFunction, '_name', {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n\n function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n /* eslint-disable */\n\n /*\r\n Copyright 2014 David Bau.\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining\r\n a copy of this software and associated documentation files (the\r\n \"Software\"), to deal in the Software without restriction, including\r\n without limitation the rights to use, copy, modify, merge, publish,\r\n distribute, sublicense, and/or sell copies of the Software, and to\r\n permit persons to whom the Software is furnished to do so, subject to\r\n the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be\r\n included in all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n */\n function seedRandom(pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n\n d *= width; // denominator and generating a\n\n x = arc4.g(1); // new least-significant-byte.\n }\n\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n\n d /= 2; // right using integer math until\n\n x >>>= 1; // we have exactly the desired bits.\n }\n\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n\n prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n } // Only provide the .state method if requested via options.state.\n\n\n prng.state = function () {\n return copy(arc4, {});\n };\n } // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n } // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n\n math['seed' + rngname] = seedrandom; //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = []; // The empty key [] is treated as [0].\n\n if (!keylen) {\n key = [keylen++];\n } // Set up S using the standard key scheduling algorithm.\n\n\n while (i < width) {\n s[i] = i++;\n }\n\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n } // The \"g\" method returns the next (count) outputs as one number.\n\n\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n\n me.i = i;\n me.j = j;\n return r; // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n } //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n\n\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n } //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n\n\n function flatten(obj, depth) {\n var result = [],\n typ = _typeof$2(obj),\n prop;\n\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n } //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n\n\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n\n return tostring(key);\n } //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n\n\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n } //\n // tostring()\n // Converts an array of charcodes to a string\n //\n\n\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n } //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n\n\n mixkey(math.random(), pool); //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n // End anonymous scope, and pass initial values.\n }\n\n ;\n\n function initialize$2(BMMath) {\n seedRandom([], BMMath);\n }\n\n var propTypes = {\n SHAPE: 'shape'\n };\n\n function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n var _lottieGlobal = {};\n initialize$2(BMMath);\n\n function resetFrame() {\n _lottieGlobal = {};\n }\n\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n }\n\n function $bm_neg(a) {\n var tOfA = _typeof$1(a);\n\n if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n return -a;\n }\n\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n\n return retArr;\n }\n\n if (a.propType) {\n return a.v;\n }\n\n return -a;\n }\n\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n var add = sum;\n\n function sub(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n\n i += 1;\n }\n\n return retArr;\n }\n\n return 0;\n }\n\n function mul(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function div(a, b) {\n var tOfA = _typeof$1(a);\n\n var tOfB = _typeof$1(b);\n\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i;\n var len;\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n\n return arr;\n }\n\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n\n return arr;\n }\n\n return 0;\n }\n\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n\n return a % b;\n }\n\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n\n return Math.min(Math.max(num, min), max);\n }\n\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n\n var radians_to_degrees = radiansToDegrees;\n\n function degreesToRadians(val) {\n return val * degToRads;\n }\n\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n\n return Math.sqrt(addedLength);\n }\n\n function normalize(vec) {\n return div(vec, length(vec));\n }\n\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n\n if (max === min) {\n h = 0; // achromatic\n\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n\n case g:\n h = (b - r) / d + 2;\n break;\n\n case b:\n h = (r - g) / d + 4;\n break;\n\n default:\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, l, val[3]];\n }\n\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r;\n var g;\n var b;\n\n if (s === 0) {\n r = l; // achromatic\n\n b = l; // achromatic\n\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [r, g, b, val[3]];\n }\n\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n\n if (t <= tMin) {\n return value1;\n }\n\n if (t >= tMax) {\n return value2;\n }\n\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n\n return arr;\n }\n\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n\n if (max.length) {\n var i;\n var len = max.length;\n\n if (!min) {\n min = createTypedArray('float32', len);\n }\n\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n\n return arr;\n }\n\n if (min === undefined) {\n min = 0;\n }\n\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n\n return path;\n }\n\n function initiateExpression(elem, data, property) {\n // Bail out if we don't want expressions\n function noOp(_value) {\n return _value;\n }\n\n if (!elem.globalData.renderConfig.runExpressions) {\n return noOp;\n }\n\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n var _needsRandom = val.indexOf('random') !== -1;\n\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n }\n\n iWiggle += 1;\n } // var rnd2 = BMMath.random();\n\n\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n\n return arr;\n }\n\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n\n return arr;\n }\n\n return (val2 - val1) * mult + val1;\n }\n\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n lenKey = arr.length;\n\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n\n return obKey;\n }\n\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return fr / fps;\n }\n\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return t * fps;\n }\n\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n\n return value.substring(init, end);\n }\n\n return '';\n }\n\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n\n return value.substr(init, end);\n }\n\n return '';\n }\n\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\r\n rotation = transform.rotation;\r\n scale = transform.scale; */\n }\n }\n\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n\n if (!effect) {\n effect = thisLayer(4);\n }\n\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n\n expression_function();\n this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n return scoped_bm_rt;\n } // Bundlers will see these as dead code and unless we reference them\n\n\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n ob.resetFrame = resetFrame;\n return ob;\n }();\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n ob.resetFrame = ExpressionManager.resetFrame;\n\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n\n function pushExpression() {\n stackCount += 1;\n }\n\n function popExpression() {\n stackCount -= 1;\n\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n\n function releaseInstances() {\n var i;\n var len = registers.length;\n\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n\n registers.length = 0;\n }\n\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n\n return ob;\n }();\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n\n return this._mask.op.v * 100;\n }\n });\n\n var MaskManager = function MaskManager(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i;\n var len = maskManager.viewData.length;\n\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n\n var maskFunction = function maskFunction(name) {\n i = 0;\n\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n return maskFunction;\n };\n\n return MaskManager;\n }();\n\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n\n var value = '';\n\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n val = property.v * mult;\n\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n\n return expressionValue;\n };\n }\n\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n\n return expressionValue;\n };\n } // TODO: try to avoid using this getter\n\n\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n\n return function (property) {\n if (!property) {\n return defaultGetter;\n }\n\n if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n\n return MultidimensionalPropertyInterface(property);\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s)\n });\n\n var _px;\n\n var _py;\n\n var _pz;\n\n var _transformFactory;\n\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n\n Object.defineProperty(_thisFunction, 'position', {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n }\n\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n });\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat;\n }\n\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n\n return matrix.inversePoint(arr);\n }\n\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n return toWorldMat.inversePoint(arr);\n }\n\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n\n return function (elem) {\n var transformInterface;\n\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n\n default:\n return null;\n }\n }\n\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return parentPropertyGroup(val - 1);\n };\n };\n }();\n\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n\n if (val <= 0) {\n return interfaceFunction;\n }\n\n return propertyGroup(val - 1);\n }\n\n return _propertyGroup;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n\n var effects = elem.data.ef || [];\n\n var groupInterface = function groupInterface(name) {\n i = 0;\n len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n\n return null;\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n\n return effectElements[i]();\n }\n\n i += 1;\n }\n\n throw new Error();\n }\n\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i;\n var len = data.ef.length;\n\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n\n return expressionProperty();\n }\n\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n\n return interfaceFunction;\n }\n\n return ob;\n }();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n shape: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n\n return prop;\n }\n },\n _name: {\n value: shape.nm\n },\n ix: {\n value: shape.ix\n },\n propertyIndex: {\n value: shape.ix\n },\n mn: {\n value: shape.mn\n },\n propertyGroup: {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n\n return arr;\n }\n\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n\n return null;\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n\n default:\n return interfaceFunction.transform;\n }\n };\n\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n }); // interfaceFunction.content = interfaceFunction;\n\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s)\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n type: {\n get: function get() {\n return 'a';\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n\n return interfaceFunction;\n }\n\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n\n if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n\n return null;\n }\n\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w)\n },\n dash: {\n get: function get() {\n return dashOb;\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s)\n },\n end: {\n get: ExpressionPropertyInterface(view.e)\n },\n offset: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r)\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt)\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or)\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os)\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir)\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r)\n },\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n }\n\n if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n\n return null;\n }\n\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c)\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n\n return function (shapes, view, propertyGroup) {\n var interfaces;\n\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n\n if (value === 0) {\n return propertyGroup;\n }\n\n return interfaces[value - 1];\n }\n\n var i = 0;\n var len = interfaces.length;\n\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n\n i += 1;\n }\n\n return null;\n }\n\n function parentGroupWrapper() {\n return propertyGroup;\n }\n\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _sourceText;\n\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n\n default:\n return null;\n }\n }\n\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n\n if (!_sourceText || stringValue !== _sourceText.value) {\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n\n Object.defineProperty(_sourceText, 'style', {\n get: function get() {\n return {\n fillColor: elem.textProperty.currentData.fc\n };\n }\n });\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n function _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 var FootageInterface = function () {\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n var propertyNameIndex = value.indexOf(currentPropertyName);\n\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n\n return currentProperty;\n }\n\n return '';\n }\n\n return init;\n };\n\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n\n return null;\n }\n\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n\n return null;\n }\n\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n }();\n\n var interfaces = {\n layer: LayerExpressionInterface,\n effects: EffectsExpressionInterface,\n comp: CompExpressionInterface,\n shape: ShapeExpressionInterface,\n text: TextExpressionInterface,\n footage: FootageInterface\n };\n\n function getInterface(type) {\n return interfaces[type] || null;\n }\n\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n\n return this._cachingAtTime.value;\n }\n\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n\n if (v1.length) {\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n\n return speed;\n }\n\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n\n var delta = -0.001; // frameNum += this.elem.data.st;\n\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n\n return velocity;\n }\n\n function getStaticValueAtTime() {\n return this.pv;\n }\n\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n\n function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var firstKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n\n return ret;\n }\n\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n\n return ret;\n }\n\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n\n var cycleDuration;\n var lastKeyFrame;\n\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i;\n var len;\n var ret;\n\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n\n return ret;\n }\n\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return ret;\n }\n\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n\n if (samples <= 1) {\n return this.pv;\n }\n\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n\n var sampleValue;\n\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n\n i += 1;\n }\n\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n\n return value;\n }\n\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n } /// /\n\n\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n\n return matrix; /// /\n }\n\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n\n var propertyGetProp = PropertyFactory.getProp;\n\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n\n return prop;\n };\n\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n\n return this._cachingAtTime.shapeValue;\n }\n\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n function ShapeExpressions() {}\n\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n\n return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n\n i += 1;\n }\n\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n\n return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) {\n // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) {\n // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n if (magnitude === 0) {\n return [0, 0];\n }\n\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n\n return prop;\n };\n }\n\n function initialize$1() {\n addPropertyDecorator();\n }\n\n function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n\n return null;\n }\n\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n\n return currentValue;\n };\n\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n\n TextProperty.prototype.searchExpressions = searchExpressions;\n }\n\n function initialize() {\n addDecorator();\n }\n\n function SVGComposableEffect() {}\n\n SVGComposableEffect.prototype = {\n createMergeNode: function createMergeNode(resultId, ins) {\n var feMerge = createNS('feMerge');\n feMerge.setAttribute('result', resultId);\n var feMergeNode;\n var i;\n\n for (i = 0; i < ins.length; i += 1) {\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', ins[i]);\n feMerge.appendChild(feMergeNode);\n feMerge.appendChild(feMergeNode);\n }\n\n return feMerge;\n }\n };\n\n var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';\n\n function SVGTintFilter(filter, filterManager, elem, id, source) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n this.linearFilter = feColorMatrix;\n feColorMatrix.setAttribute('result', id + '_tint_1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n filter.appendChild(feMerge);\n }\n\n extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id);\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGStrokeEffect(fil, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path;\n var groupPath;\n var i;\n var len;\n\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = createNS('g');\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n\n var i;\n var len = this.paths.length;\n var mask;\n var path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m !== -1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n var units = Math.floor(lineLength / segment);\n var j;\n\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n }\n\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n filter.appendChild(feComponentTransfer);\n }\n\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB);\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n } // Green\n\n\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n } // Blue\n\n\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n } // Alpha\n\n\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n } // RGB\n\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n }\n\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n\n while (cnt <= 256) {\n perc = cnt / 256;\n\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n\n table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n\n return table.join(' ');\n };\n\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\n\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n var filterSize = filterManager.data.fs || globalFilterSize;\n filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n feGaussianBlur.setAttribute('stdDeviation', '0');\n this.feGaussianBlur = feGaussianBlur;\n filter.appendChild(feGaussianBlur);\n var feOffset = createNS('feOffset');\n feOffset.setAttribute('dx', '25');\n feOffset.setAttribute('dy', '0');\n feOffset.setAttribute('in', id + '_drop_shadow_1');\n feOffset.setAttribute('result', id + '_drop_shadow_2');\n this.feOffset = feOffset;\n filter.appendChild(feOffset);\n var feFlood = createNS('feFlood');\n feFlood.setAttribute('flood-color', '#00ff00');\n feFlood.setAttribute('flood-opacity', '1');\n feFlood.setAttribute('result', id + '_drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', id + '_drop_shadow_3');\n feComposite.setAttribute('in2', id + '_drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', id + '_drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n filter.appendChild(feMerge); //\n }\n\n extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n }\n };\n\n var _svgMatteSymbols = [];\n\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0;\n var len = _svgMatteSymbols.length;\n\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n\n i += 1;\n }\n\n return null;\n };\n\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n\n if (!parentNode) {\n return;\n }\n\n var children = parentNode.children;\n var i = 0;\n var len = children.length;\n\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n\n i += 1;\n }\n\n var nextChild;\n\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\n };\n\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n if (!this.findSymbol(mask)) {\n var symbolId = createElementID();\n var masker = createNS('mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n\n _svgMatteSymbols.push(mask);\n\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n var symbol = createNS('symbol');\n symbol.setAttribute('id', symbolId);\n this.replaceInParent(mask, symbolId);\n symbol.appendChild(mask.layerElement);\n defs.appendChild(symbol);\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n masker.appendChild(useElem);\n mask.data.hd = false;\n mask.show();\n }\n\n elem.setMatte(mask.layerId);\n };\n\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var elements = this.elem.comp.elements;\n var i = 0;\n var len = elements.length;\n\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n\n i += 1;\n }\n\n this.initialized = true;\n };\n\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n\n function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '300%');\n filter.setAttribute('height', '300%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('result', id);\n filter.appendChild(feGaussianBlur);\n this.feGaussianBlur = feGaussianBlur;\n }\n\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n // Empirical value, matching AE's blur appearance.\n var kBlurrinessToSigma = 0.3;\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n function TransformEffect() {}\n\n TransformEffect.prototype.init = function (effectsManager) {\n this.effectsManager = effectsManager;\n this.type = effectTypes.TRANSFORM_EFFECT;\n this.matrix = new Matrix();\n this.opacity = -1;\n this._mdf = false;\n this._opMdf = false;\n };\n\n TransformEffect.prototype.renderFrame = function (forceFrame) {\n this._opMdf = false;\n this._mdf = false;\n\n if (forceFrame || this.effectsManager._mdf) {\n var effectElements = this.effectsManager.effectElements;\n var anchor = effectElements[0].p.v;\n var position = effectElements[1].p.v;\n var isUniformScale = effectElements[2].p.v === 1;\n var scaleHeight = effectElements[3].p.v;\n var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n var skew = effectElements[5].p.v;\n var skewAxis = effectElements[6].p.v;\n var rotation = effectElements[7].p.v;\n this.matrix.reset();\n this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n this.matrix.rotate(-rotation * degToRads);\n this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n this.matrix.translate(position[0], position[1], 0);\n this._mdf = true;\n\n if (this.opacity !== effectElements[8].p.v) {\n this.opacity = effectElements[8].p.v;\n this._opMdf = true;\n }\n }\n };\n\n function SVGTransformEffect(_, filterManager) {\n this.init(filterManager);\n }\n\n extendPrototype([TransformEffect], SVGTransformEffect);\n\n function CVTransformEffect(effectsManager) {\n this.init(effectsManager);\n }\n\n extendPrototype([TransformEffect], CVTransformEffect);\n\n registerRenderer('canvas', CanvasRenderer);\n registerRenderer('html', HybridRenderer);\n registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n ShapeModifiers.registerModifier('zz', ZigZagModifier);\n ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n setExpressionsPlugin(Expressions);\n setExpressionInterfaces(getInterface);\n initialize$1();\n initialize(); // Registering svg effects\n\n registerEffect$1(20, SVGTintFilter, true);\n registerEffect$1(21, SVGFillFilter, true);\n registerEffect$1(22, SVGStrokeEffect, false);\n registerEffect$1(23, SVGTritoneFilter, true);\n registerEffect$1(24, SVGProLevelsFilter, true);\n registerEffect$1(25, SVGDropShadowEffect, true);\n registerEffect$1(28, SVGMatte3Effect, false);\n registerEffect$1(29, SVGGaussianBlurEffect, true);\n registerEffect$1(35, SVGTransformEffect, false);\n registerEffect(35, CVTransformEffect);\n\n return lottie;\n\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\n * velocity-animate (C) 2014-2017 Julian Shapiro.\n *\n * Licensed under the MIT license. See LICENSE file in the project root for details.\n */\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\n/**\r\n * Check if a variable is a boolean.\r\n */\nfunction isBoolean(variable) {\n return variable === true || variable === false;\n}\n/**\r\n * Check if a variable is a function.\r\n */\nfunction isFunction(variable) {\n return Object.prototype.toString.call(variable) === \"[object Function]\";\n}\n/**\r\n * Check if a variable is an HTMLElement or SVGElement.\r\n */\nfunction isNode(variable) {\n return !!(variable && variable.nodeType);\n}\n/**\r\n * Check if a variable is a number.\r\n */\nfunction isNumber(variable) {\n return typeof variable === \"number\";\n}\n/**\r\n * Check if a variable is a plain object (and not an instance).\r\n */\nfunction isPlainObject(variable) {\n if (!variable || (typeof variable === \"undefined\" ? \"undefined\" : _typeof(variable)) !== \"object\" || variable.nodeType || Object.prototype.toString.call(variable) !== \"[object Object]\") {\n return false;\n }\n var proto = Object.getPrototypeOf(variable);\n return !proto || proto.hasOwnProperty(\"constructor\") && proto.constructor === Object;\n}\n/**\r\n * Check if a variable is a string.\r\n */\nfunction isString(variable) {\n return typeof variable === \"string\";\n}\n/**\r\n * Check if a variable is the result of calling Velocity.\r\n */\nfunction isVelocityResult(variable) {\n return variable && isNumber(variable.length) && isFunction(variable.velocity);\n}\n/**\r\n * Check if a variable is an array-like wrapped jQuery, Zepto or similar, where\r\n * each indexed value is a Node.\r\n */\nfunction isWrapped(variable) {\n return variable && variable !== window && isNumber(variable.length) && !isString(variable) && !isFunction(variable) && !isNode(variable) && (variable.length === 0 || isNode(variable[0]));\n}\n/**\r\n * Check is a property is an enumerable member of an object.\r\n */\nfunction propertyIsEnumerable(obj, property) {\n return Object.prototype.propertyIsEnumerable.call(obj, property);\n}\n\n// Project\n/**\r\n * Add a single className to an Element.\r\n */\nfunction addClass(element, className) {\n if (element instanceof Element) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n removeClass(element, className);\n element.className += (element.className.length ? \" \" : \"\") + className;\n }\n }\n}\n/**\r\n * Clone an array, works for array-like too.\r\n */\nfunction cloneArray(arrayLike) {\n return Array.prototype.slice.call(arrayLike, 0);\n}\n/**\r\n * The defineProperty()
function provides a\r\n * shortcut to defining a property that cannot be accidentally iterated across.\r\n */\nfunction defineProperty$1(proto, name, value, readonly) {\n if (proto) {\n Object.defineProperty(proto, name, {\n configurable: !readonly,\n writable: !readonly,\n value: value\n });\n }\n}\n/**\r\n * When there are multiple locations for a value pass them all in, then get the\r\n * first value that is valid.\r\n */\nfunction getValue() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = args[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arg = _step.value;\n\n if (arg !== undefined && arg === arg) {\n return arg;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n/**\r\n * Shim to get the current milliseconds - on anything except old IE it'll use\r\n * Date.now() and save creating an object. If that doesn't exist then it'll\r\n * create one that gets GC.\r\n */\nvar now = Date.now ? Date.now : function () {\n return new Date().getTime();\n};\n/**\r\n * Remove a single className from an Element.\r\n */\nfunction removeClass(element, className) {\n if (element instanceof Element) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n // TODO: Need some jsperf tests on performance - can we get rid of the regex and maybe use split / array manipulation?\n element.className = element.className.replace(new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\", \"gi\"), \" \");\n }\n }\n}\n\n// Project\n// Constants\nvar Actions = {};\n/**\r\n * Used to register an action. This should never be called by users\r\n * directly, instead it should be called via an action:
\r\n * Velocity(\"registerAction\", \"name\", VelocityActionFn);
\r\n */\nfunction registerAction(args, internal) {\n var name = args[0],\n callback = args[1];\n if (!isString(name)) {\n console.warn(\"VelocityJS: Trying to set 'registerAction' name to an invalid value:\", name);\n } else if (!isFunction(callback)) {\n console.warn(\"VelocityJS: Trying to set 'registerAction' callback to an invalid value:\", name, callback);\n } else if (Actions[name] && !propertyIsEnumerable(Actions, name)) {\n console.warn(\"VelocityJS: Trying to override internal 'registerAction' callback\", name);\n } else if (internal === true) {\n defineProperty$1(Actions, name, callback);\n } else {\n Actions[name] = callback;\n }\n}\nregisterAction([\"registerAction\", registerAction], true);\n\n/**\r\n * Without this it will only un-prefix properties that have a valid \"normal\"\r\n * version.\r\n */\nvar DURATION_FAST = 200;\nvar DURATION_NORMAL = 400;\nvar DURATION_SLOW = 600;\nvar FUZZY_MS_PER_SECOND = 980;\nvar DEFAULT_CACHE = true;\nvar DEFAULT_DELAY = 0;\nvar DEFAULT_DURATION = DURATION_NORMAL;\nvar DEFAULT_EASING = \"swing\";\nvar DEFAULT_FPSLIMIT = 60;\nvar DEFAULT_LOOP = 0;\nvar DEFAULT_PROMISE = true;\nvar DEFAULT_PROMISE_REJECT_EMPTY = true;\nvar DEFAULT_QUEUE = \"\";\nvar DEFAULT_REPEAT = 0;\nvar DEFAULT_SPEED = 1;\nvar DEFAULT_SYNC = true;\nvar CLASSNAME = \"velocity-animating\";\nvar Duration = {\n fast: DURATION_FAST,\n normal: DURATION_NORMAL,\n slow: DURATION_SLOW\n};\n\n// Project\n// Constants\nvar Easings = {};\n/**\r\n * Used to register a easing. This should never be called by users\r\n * directly, instead it should be called via an action:
\r\n * Velocity(\"registerEasing\", \"name\", VelocityEasingFn);
\r\n */\nfunction registerEasing(args) {\n var name = args[0],\n callback = args[1];\n if (!isString(name)) {\n console.warn(\"VelocityJS: Trying to set 'registerEasing' name to an invalid value:\", name);\n } else if (!isFunction(callback)) {\n console.warn(\"VelocityJS: Trying to set 'registerEasing' callback to an invalid value:\", name, callback);\n } else if (Easings[name]) {\n console.warn(\"VelocityJS: Trying to override 'registerEasing' callback\", name);\n } else {\n Easings[name] = callback;\n }\n}\nregisterAction([\"registerEasing\", registerEasing], true);\n/**\r\n * Linear easing, used for sequence parts that don't have an actual easing\r\n * function.\r\n */\nfunction linearEasing(percentComplete, startValue, endValue, property) {\n return startValue + percentComplete * (endValue - startValue);\n}\n/**\r\n * Swing is the default for jQuery and Velocity.\r\n */\nfunction swingEasing(percentComplete, startValue, endValue) {\n return startValue + (0.5 - Math.cos(percentComplete * Math.PI) / 2) * (endValue - startValue);\n}\n/**\r\n * A less exaggerated version of easeInOutElastic.\r\n */\nfunction springEasing(percentComplete, startValue, endValue) {\n return startValue + (1 - Math.cos(percentComplete * 4.5 * Math.PI) * Math.exp(-percentComplete * 6)) * (endValue - startValue);\n}\nregisterEasing([\"linear\", linearEasing]);\nregisterEasing([\"swing\", swingEasing]);\nregisterEasing([\"spring\", springEasing]);\n\n// Project\n/**\r\n * Fix to a range of 0 <= num <= 1
.\r\n */\nfunction fixRange(num) {\n return Math.min(Math.max(num, 0), 1);\n}\nfunction A(aA1, aA2) {\n return 1 - 3 * aA2 + 3 * aA1;\n}\nfunction B(aA1, aA2) {\n return 3 * aA2 - 6 * aA1;\n}\nfunction C(aA1) {\n return 3 * aA1;\n}\nfunction calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\nfunction getSlope(aT, aA1, aA2) {\n return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);\n}\nfunction generateBezier() {\n var NEWTON_ITERATIONS = 4,\n NEWTON_MIN_SLOPE = 0.001,\n SUBDIVISION_PRECISION = 0.0000001,\n SUBDIVISION_MAX_ITERATIONS = 10,\n kSplineTableSize = 11,\n kSampleStepSize = 1 / (kSplineTableSize - 1),\n float32ArraySupported = \"Float32Array\" in window;\n /* Must contain four args. */\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length !== 4) {\n return;\n }\n /* Args must be numbers. */\n for (var i = 0; i < 4; ++i) {\n if (typeof args[i] !== \"number\" || isNaN(args[i]) || !isFinite(args[i])) {\n return;\n }\n }\n /* X values must be in the [0, 1] range. */\n var mX1 = fixRange(args[0]);\n var mY1 = args[1];\n var mX2 = fixRange(args[2]);\n var mY2 = args[3];\n var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n function newtonRaphsonIterate(aX, aGuessT) {\n for (var _i = 0; _i < NEWTON_ITERATIONS; ++_i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n function calcSampleValues() {\n for (var _i2 = 0; _i2 < kSplineTableSize; ++_i2) {\n mSampleValues[_i2] = calcBezier(_i2 * kSampleStepSize, mX1, mX2);\n }\n }\n function binarySubdivide(aX, aA, aB) {\n var currentX = void 0,\n currentT = void 0,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n }\n function getTForX(aX) {\n var lastSample = kSplineTableSize - 1;\n var intervalStart = 0,\n currentSample = 1;\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]),\n guessForT = intervalStart + dist * kSampleStepSize,\n initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT);\n } else if (initialSlope === 0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize);\n }\n }\n var precomputed = false;\n function precompute() {\n precomputed = true;\n if (mX1 !== mY1 || mX2 !== mY2) {\n calcSampleValues();\n }\n }\n var str = \"generateBezier(\" + [mX1, mY1, mX2, mY2] + \")\",\n f = function f(percentComplete, startValue, endValue, property) {\n if (!precomputed) {\n precompute();\n }\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n if (mX1 === mY1 && mX2 === mY2) {\n return startValue + percentComplete * (endValue - startValue);\n }\n return startValue + calcBezier(getTForX(percentComplete), mY1, mY2) * (endValue - startValue);\n };\n f.getControlPoints = function () {\n return [{ x: mX1, y: mY1 }, { x: mX2, y: mY2 }];\n };\n f.toString = function () {\n return str;\n };\n return f;\n}\n/* Common easings */\nvar easeIn = generateBezier(0.42, 0, 1, 1),\n easeOut = generateBezier(0, 0, 0.58, 1),\n easeInOut = generateBezier(0.42, 0, 0.58, 1);\nregisterEasing([\"ease\", generateBezier(0.25, 0.1, 0.25, 1)]);\nregisterEasing([\"easeIn\", easeIn]);\nregisterEasing([\"ease-in\", easeIn]);\nregisterEasing([\"easeOut\", easeOut]);\nregisterEasing([\"ease-out\", easeOut]);\nregisterEasing([\"easeInOut\", easeInOut]);\nregisterEasing([\"ease-in-out\", easeInOut]);\nregisterEasing([\"easeInSine\", generateBezier(0.47, 0, 0.745, 0.715)]);\nregisterEasing([\"easeOutSine\", generateBezier(0.39, 0.575, 0.565, 1)]);\nregisterEasing([\"easeInOutSine\", generateBezier(0.445, 0.05, 0.55, 0.95)]);\nregisterEasing([\"easeInQuad\", generateBezier(0.55, 0.085, 0.68, 0.53)]);\nregisterEasing([\"easeOutQuad\", generateBezier(0.25, 0.46, 0.45, 0.94)]);\nregisterEasing([\"easeInOutQuad\", generateBezier(0.455, 0.03, 0.515, 0.955)]);\nregisterEasing([\"easeInCubic\", generateBezier(0.55, 0.055, 0.675, 0.19)]);\nregisterEasing([\"easeOutCubic\", generateBezier(0.215, 0.61, 0.355, 1)]);\nregisterEasing([\"easeInOutCubic\", generateBezier(0.645, 0.045, 0.355, 1)]);\nregisterEasing([\"easeInQuart\", generateBezier(0.895, 0.03, 0.685, 0.22)]);\nregisterEasing([\"easeOutQuart\", generateBezier(0.165, 0.84, 0.44, 1)]);\nregisterEasing([\"easeInOutQuart\", generateBezier(0.77, 0, 0.175, 1)]);\nregisterEasing([\"easeInQuint\", generateBezier(0.755, 0.05, 0.855, 0.06)]);\nregisterEasing([\"easeOutQuint\", generateBezier(0.23, 1, 0.32, 1)]);\nregisterEasing([\"easeInOutQuint\", generateBezier(0.86, 0, 0.07, 1)]);\nregisterEasing([\"easeInExpo\", generateBezier(0.95, 0.05, 0.795, 0.035)]);\nregisterEasing([\"easeOutExpo\", generateBezier(0.19, 1, 0.22, 1)]);\nregisterEasing([\"easeInOutExpo\", generateBezier(1, 0, 0, 1)]);\nregisterEasing([\"easeInCirc\", generateBezier(0.6, 0.04, 0.98, 0.335)]);\nregisterEasing([\"easeOutCirc\", generateBezier(0.075, 0.82, 0.165, 1)]);\nregisterEasing([\"easeInOutCirc\", generateBezier(0.785, 0.135, 0.15, 0.86)]);\n\n/* Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */\n/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass\r\n then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */\nfunction springAccelerationForState(state) {\n return -state.tension * state.x - state.friction * state.v;\n}\nfunction springEvaluateStateWithDerivative(initialState, dt, derivative) {\n var state = {\n x: initialState.x + derivative.dx * dt,\n v: initialState.v + derivative.dv * dt,\n tension: initialState.tension,\n friction: initialState.friction\n };\n return {\n dx: state.v,\n dv: springAccelerationForState(state)\n };\n}\nfunction springIntegrateState(state, dt) {\n var a = {\n dx: state.v,\n dv: springAccelerationForState(state)\n },\n b = springEvaluateStateWithDerivative(state, dt * 0.5, a),\n c = springEvaluateStateWithDerivative(state, dt * 0.5, b),\n d = springEvaluateStateWithDerivative(state, dt, c),\n dxdt = 1 / 6 * (a.dx + 2 * (b.dx + c.dx) + d.dx),\n dvdt = 1 / 6 * (a.dv + 2 * (b.dv + c.dv) + d.dv);\n state.x = state.x + dxdt * dt;\n state.v = state.v + dvdt * dt;\n return state;\n}\nfunction generateSpringRK4(tension, friction, duration) {\n var initState = {\n x: -1,\n v: 0,\n tension: parseFloat(tension) || 500,\n friction: parseFloat(friction) || 20\n },\n path = [0],\n tolerance = 1 / 10000,\n DT = 16 / 1000,\n haveDuration = duration != null; // deliberate \"==\", as undefined == null != 0\n var timeLapsed = 0,\n dt = void 0,\n lastState = void 0;\n /* Calculate the actual time it takes for this animation to complete with the provided conditions. */\n if (haveDuration) {\n /* Run the simulation without a duration. */\n timeLapsed = generateSpringRK4(initState.tension, initState.friction);\n /* Compute the adjusted time delta. */\n dt = timeLapsed / duration * DT;\n } else {\n dt = DT;\n }\n while (true) {\n /* Next/step function .*/\n lastState = springIntegrateState(lastState || initState, dt);\n /* Store the position. */\n path.push(1 + lastState.x);\n timeLapsed += 16;\n /* If the change threshold is reached, break. */\n if (!(Math.abs(lastState.x) > tolerance && Math.abs(lastState.v) > tolerance)) {\n break;\n }\n }\n /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the\r\n computed path and returns a snapshot of the position according to a given percentComplete. */\n return !haveDuration ? timeLapsed : function (percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n return startValue + path[Math.floor(percentComplete * (path.length - 1))] * (endValue - startValue);\n };\n}\n\n// Constants\nvar cache = {};\nfunction generateStep(steps) {\n var fn = cache[steps];\n if (fn) {\n return fn;\n }\n return cache[steps] = function (percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n return startValue + Math.round(percentComplete * steps) * (1 / steps) * (endValue - startValue);\n };\n}\n\n// Project\n/**\r\n * Parse a duration value and return an ms number. Optionally return a\r\n * default value if the number is not valid.\r\n */\nfunction parseDuration(duration, def) {\n if (isNumber(duration)) {\n return duration;\n }\n if (isString(duration)) {\n return Duration[duration.toLowerCase()] || parseFloat(duration.replace(\"ms\", \"\").replace(\"s\", \"000\"));\n }\n return def == null ? undefined : parseDuration(def);\n}\n/**\r\n * Validate a cache
option.\r\n */\nfunction validateCache(value) {\n if (isBoolean(value)) {\n return value;\n }\n if (value != null) {\n console.warn(\"VelocityJS: Trying to set 'cache' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a begin
option.\r\n */\nfunction validateBegin(value) {\n if (isFunction(value)) {\n return value;\n }\n if (value != null) {\n console.warn(\"VelocityJS: Trying to set 'begin' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a complete
option.\r\n */\nfunction validateComplete(value, noError) {\n if (isFunction(value)) {\n return value;\n }\n if (value != null && !noError) {\n console.warn(\"VelocityJS: Trying to set 'complete' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a delay
option.\r\n */\nfunction validateDelay(value) {\n var parsed = parseDuration(value);\n if (!isNaN(parsed)) {\n return parsed;\n }\n if (value != null) {\n console.error(\"VelocityJS: Trying to set 'delay' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a duration
option.\r\n */\nfunction validateDuration(value, noError) {\n var parsed = parseDuration(value);\n if (!isNaN(parsed) && parsed >= 0) {\n return parsed;\n }\n if (value != null && !noError) {\n console.error(\"VelocityJS: Trying to set 'duration' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a easing
option.\r\n */\nfunction validateEasing(value, duration, noError) {\n if (isString(value)) {\n // Named easing\n return Easings[value];\n }\n if (isFunction(value)) {\n return value;\n }\n // TODO: We should only do these if the correct function exists - don't force loading.\n if (Array.isArray(value)) {\n if (value.length === 1) {\n // Steps\n return generateStep(value[0]);\n }\n if (value.length === 2) {\n // springRK4 must be passed the animation's duration.\n // Note: If the springRK4 array contains non-numbers,\n // generateSpringRK4() returns an easing function generated with\n // default tension and friction values.\n return generateSpringRK4(value[0], value[1], duration);\n }\n if (value.length === 4) {\n // Note: If the bezier array contains non-numbers, generateBezier()\n // returns undefined.\n return generateBezier.apply(null, value) || false;\n }\n }\n if (value != null && !noError) {\n console.error(\"VelocityJS: Trying to set 'easing' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a fpsLimit
option.\r\n */\nfunction validateFpsLimit(value) {\n if (value === false) {\n return 0;\n } else {\n var parsed = parseInt(value, 10);\n if (!isNaN(parsed) && parsed >= 0) {\n return Math.min(parsed, 60);\n }\n }\n if (value != null) {\n console.warn(\"VelocityJS: Trying to set 'fpsLimit' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a loop
option.\r\n */\nfunction validateLoop(value) {\n switch (value) {\n case false:\n return 0;\n case true:\n return true;\n default:\n var parsed = parseInt(value, 10);\n if (!isNaN(parsed) && parsed >= 0) {\n return parsed;\n }\n break;\n }\n if (value != null) {\n console.warn(\"VelocityJS: Trying to set 'loop' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a progress
option.\r\n */\nfunction validateProgress(value) {\n if (isFunction(value)) {\n return value;\n }\n if (value != null) {\n console.warn(\"VelocityJS: Trying to set 'progress' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a promise
option.\r\n */\nfunction validatePromise(value) {\n if (isBoolean(value)) {\n return value;\n }\n if (value != null) {\n console.warn(\"VelocityJS: Trying to set 'promise' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a promiseRejectEmpty
option.\r\n */\nfunction validatePromiseRejectEmpty(value) {\n if (isBoolean(value)) {\n return value;\n }\n if (value != null) {\n console.warn(\"VelocityJS: Trying to set 'promiseRejectEmpty' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a queue
option.\r\n */\nfunction validateQueue(value, noError) {\n if (value === false || isString(value)) {\n return value;\n }\n if (value != null && !noError) {\n console.warn(\"VelocityJS: Trying to set 'queue' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a repeat
option.\r\n */\nfunction validateRepeat(value) {\n switch (value) {\n case false:\n return 0;\n case true:\n return true;\n default:\n var parsed = parseInt(value, 10);\n if (!isNaN(parsed) && parsed >= 0) {\n return parsed;\n }\n break;\n }\n if (value != null) {\n console.warn(\"VelocityJS: Trying to set 'repeat' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a speed
option.\r\n */\nfunction validateSpeed(value) {\n if (isNumber(value)) {\n return value;\n }\n if (value != null) {\n console.error(\"VelocityJS: Trying to set 'speed' to an invalid value:\", value);\n }\n}\n/**\r\n * Validate a sync
option.\r\n */\nfunction validateSync(value) {\n if (isBoolean(value)) {\n return value;\n }\n if (value != null) {\n console.error(\"VelocityJS: Trying to set 'sync' to an invalid value:\", value);\n }\n}\n\n// Project\n// NOTE: Add the variable here, then add the default state in \"reset\" below.\nvar cache$1 = void 0,\n begin = void 0,\n complete = void 0,\n delay = void 0,\n duration = void 0,\n easing = void 0,\n fpsLimit = void 0,\n loop = void 0,\n mobileHA = void 0,\n minFrameTime = void 0,\n promise = void 0,\n promiseRejectEmpty = void 0,\n queue = void 0,\n repeat = void 0,\n speed = void 0,\n sync = void 0;\nvar defaults$1 = function () {\n function defaults$$1() {\n classCallCheck(this, defaults$$1);\n }\n\n createClass(defaults$$1, null, [{\n key: \"reset\",\n value: function reset() {\n cache$1 = DEFAULT_CACHE;\n begin = undefined;\n complete = undefined;\n delay = DEFAULT_DELAY;\n duration = DEFAULT_DURATION;\n easing = validateEasing(DEFAULT_EASING, DEFAULT_DURATION);\n fpsLimit = DEFAULT_FPSLIMIT;\n loop = DEFAULT_LOOP;\n minFrameTime = FUZZY_MS_PER_SECOND / DEFAULT_FPSLIMIT;\n promise = DEFAULT_PROMISE;\n promiseRejectEmpty = DEFAULT_PROMISE_REJECT_EMPTY;\n queue = DEFAULT_QUEUE;\n repeat = DEFAULT_REPEAT;\n speed = DEFAULT_SPEED;\n sync = DEFAULT_SYNC;\n }\n }, {\n key: \"cache\",\n get: function get$$1() {\n return cache$1;\n },\n set: function set$$1(value) {\n value = validateCache(value);\n if (value !== undefined) {\n cache$1 = value;\n }\n }\n }, {\n key: \"begin\",\n get: function get$$1() {\n return begin;\n },\n set: function set$$1(value) {\n value = validateBegin(value);\n if (value !== undefined) {\n begin = value;\n }\n }\n }, {\n key: \"complete\",\n get: function get$$1() {\n return complete;\n },\n set: function set$$1(value) {\n value = validateComplete(value);\n if (value !== undefined) {\n complete = value;\n }\n }\n }, {\n key: \"delay\",\n get: function get$$1() {\n return delay;\n },\n set: function set$$1(value) {\n value = validateDelay(value);\n if (value !== undefined) {\n delay = value;\n }\n }\n }, {\n key: \"duration\",\n get: function get$$1() {\n return duration;\n },\n set: function set$$1(value) {\n value = validateDuration(value);\n if (value !== undefined) {\n duration = value;\n }\n }\n }, {\n key: \"easing\",\n get: function get$$1() {\n return easing;\n },\n set: function set$$1(value) {\n value = validateEasing(value, duration);\n if (value !== undefined) {\n easing = value;\n }\n }\n }, {\n key: \"fpsLimit\",\n get: function get$$1() {\n return fpsLimit;\n },\n set: function set$$1(value) {\n value = validateFpsLimit(value);\n if (value !== undefined) {\n fpsLimit = value;\n minFrameTime = FUZZY_MS_PER_SECOND / value;\n }\n }\n }, {\n key: \"loop\",\n get: function get$$1() {\n return loop;\n },\n set: function set$$1(value) {\n value = validateLoop(value);\n if (value !== undefined) {\n loop = value;\n }\n }\n }, {\n key: \"mobileHA\",\n get: function get$$1() {\n return mobileHA;\n },\n set: function set$$1(value) {\n if (isBoolean(value)) {\n mobileHA = value;\n }\n }\n }, {\n key: \"minFrameTime\",\n get: function get$$1() {\n return minFrameTime;\n }\n }, {\n key: \"promise\",\n get: function get$$1() {\n return promise;\n },\n set: function set$$1(value) {\n value = validatePromise(value);\n if (value !== undefined) {\n promise = value;\n }\n }\n }, {\n key: \"promiseRejectEmpty\",\n get: function get$$1() {\n return promiseRejectEmpty;\n },\n set: function set$$1(value) {\n value = validatePromiseRejectEmpty(value);\n if (value !== undefined) {\n promiseRejectEmpty = value;\n }\n }\n }, {\n key: \"queue\",\n get: function get$$1() {\n return queue;\n },\n set: function set$$1(value) {\n value = validateQueue(value);\n if (value !== undefined) {\n queue = value;\n }\n }\n }, {\n key: \"repeat\",\n get: function get$$1() {\n return repeat;\n },\n set: function set$$1(value) {\n value = validateRepeat(value);\n if (value !== undefined) {\n repeat = value;\n }\n }\n }, {\n key: \"repeatAgain\",\n get: function get$$1() {\n return repeat;\n }\n }, {\n key: \"speed\",\n get: function get$$1() {\n return speed;\n },\n set: function set$$1(value) {\n value = validateSpeed(value);\n if (value !== undefined) {\n speed = value;\n }\n }\n }, {\n key: \"sync\",\n get: function get$$1() {\n return sync;\n },\n set: function set$$1(value) {\n value = validateSync(value);\n if (value !== undefined) {\n sync = value;\n }\n }\n }]);\n return defaults$$1;\n}();\nObject.freeze(defaults$1);\n// Reset to our default values, currently everything is undefined.\ndefaults$1.reset();\n\n/**\r\n * The highest type index for finding the best normalization for a property.\r\n */\n/**\r\n * Unlike \"actions\", normalizations can always be replaced by users.\r\n */\nvar Normalizations = [];\n/**\r\n * Store a cross-reference to units to be added to specific normalization\r\n * functions if the user supplies a unit-less number.\r\n *\r\n * This is pretty much confined to adding \"px\" to several css properties.\r\n */\nvar NormalizationUnits = {};\n/**\r\n * Any normalisations that should never be cached are listed here.\r\n * Faster than an array - https://jsperf.com/array-includes-and-find-methods-vs-set-has\r\n */\nvar NoCacheNormalizations = new Set();\n/**\r\n * An array of classes used for the per-class normalizations. This\r\n * translates into a bitwise enum for quick cross-reference, and so that\r\n * the element doesn't need multiple instanceof
calls every\r\n * frame.\r\n */\nvar constructors = [];\n/**\r\n * A cache of the various constructors we've found and mapping to their real\r\n * name - saves expensive lookups.\r\n */\nvar constructorCache = new Map();\n\n// Project\n// Constants\nvar dataName = \"velocityData\";\n/**\r\n * Get (and create) the internal data store for an element.\r\n */\nfunction Data(element) {\n // Use a string member so Uglify doesn't mangle it.\n var data = element[dataName];\n if (data) {\n return data;\n }\n var window = element.ownerDocument.defaultView;\n var types = 0;\n for (var index = 0; index < constructors.length; index++) {\n var _constructor = constructors[index];\n if (isString(_constructor)) {\n if (element instanceof window[_constructor]) {\n types |= 1 << index; // tslint:disable-line:no-bitwise\n }\n } else if (element instanceof _constructor) {\n types |= 1 << index; // tslint:disable-line:no-bitwise\n }\n }\n // Use an intermediate object so it errors on incorrect data.\n var newData = {\n types: types,\n count: 0,\n computedStyle: null,\n cache: {},\n queueList: {},\n lastAnimationList: {},\n lastFinishList: {},\n window: window\n };\n Object.defineProperty(element, dataName, {\n value: newData\n });\n return newData;\n}\n\n// Constants\nvar isClient = window && window === window.window,\n windowScrollAnchor = isClient && window.pageYOffset !== undefined;\nvar State = {\n isClient: isClient,\n isMobile: isClient && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\n isGingerbread: isClient && /Android 2\\.3\\.[3-7]/i.test(navigator.userAgent),\n prefixElement: isClient && document.createElement(\"div\"),\n windowScrollAnchor: windowScrollAnchor,\n scrollAnchor: windowScrollAnchor ? window : !isClient || document.documentElement || document.body.parentNode || document.body,\n scrollPropertyLeft: windowScrollAnchor ? \"pageXOffset\" : \"scrollLeft\",\n scrollPropertyTop: windowScrollAnchor ? \"pageYOffset\" : \"scrollTop\",\n className: CLASSNAME,\n isTicking: false,\n first: undefined,\n last: undefined,\n firstNew: undefined\n};\n\n// Project\n/**\r\n * Simple queue management. Un-named queue is directly within the element data,\r\n * named queue is within an object within it.\r\n */\nfunction animate(animation) {\n var prev = State.last;\n animation._prev = prev;\n animation._next = undefined;\n if (prev) {\n prev._next = animation;\n } else {\n State.first = animation;\n }\n State.last = animation;\n if (!State.firstNew) {\n State.firstNew = animation;\n }\n var element = animation.element,\n data = Data(element);\n if (!data.count++) {\n ////////////////////////\n // Feature: Classname //\n ////////////////////////\n addClass(element, State.className);\n }\n}\n/**\r\n * Add an item to an animation queue.\r\n */\nfunction queue$1(element, animation, queueName) {\n var data = Data(element);\n if (queueName !== false) {\n // Store the last animation added so we can use it for the\n // beginning of the next one.\n data.lastAnimationList[queueName] = animation;\n }\n if (queueName === false) {\n animate(animation);\n } else {\n if (!isString(queueName)) {\n queueName = \"\";\n }\n var last = data.queueList[queueName];\n if (!last) {\n if (last === null) {\n data.queueList[queueName] = animation;\n } else {\n data.queueList[queueName] = null;\n animate(animation);\n }\n } else {\n while (last._next) {\n last = last._next;\n }\n last._next = animation;\n animation._prev = last;\n }\n }\n}\n/**\r\n * Start the next animation on this element's queue (named or default).\r\n *\r\n * @returns the next animation that is starting.\r\n */\nfunction dequeue(element, queueName, skip) {\n if (queueName !== false) {\n if (!isString(queueName)) {\n queueName = \"\";\n }\n var data = Data(element),\n animation = data.queueList[queueName];\n if (animation) {\n data.queueList[queueName] = animation._next || null;\n if (!skip) {\n animate(animation);\n }\n } else if (animation === null) {\n delete data.queueList[queueName];\n }\n return animation;\n }\n}\n/**\r\n * Remove an animation from the active animation list. If it has a queue set\r\n * then remember it as the last animation for that queue, and free the one\r\n * that was previously there. If the animation list is completely empty then\r\n * mark us as finished.\r\n */\nfunction freeAnimationCall(animation) {\n var next = animation._next,\n prev = animation._prev,\n queueName = animation.queue == null ? animation.options.queue : animation.queue;\n if (State.firstNew === animation) {\n State.firstNew = next;\n }\n if (State.first === animation) {\n State.first = next;\n } else if (prev) {\n prev._next = next;\n }\n if (State.last === animation) {\n State.last = prev;\n } else if (next) {\n next._prev = prev;\n }\n if (queueName) {\n var data = Data(animation.element);\n if (data) {\n animation._next = animation._prev = undefined;\n }\n }\n}\n\nvar SequencesObject = {};\n\n// Project\n/**\r\n * Call the complete method of an animation in a separate function so it can\r\n * benefit from JIT compiling while still having a try/catch block.\r\n */\nfunction callComplete(activeCall) {\n var callback = activeCall.complete || activeCall.options.complete;\n if (callback) {\n try {\n var elements = activeCall.elements;\n callback.call(elements, elements, activeCall);\n } catch (error) {\n setTimeout(function () {\n throw error;\n }, 1);\n }\n }\n}\n/**\r\n * Complete an animation. This might involve restarting (for loop or repeat\r\n * options). Once it is finished we also check for any callbacks or Promises\r\n * that need updating.\r\n */\nfunction completeCall(activeCall) {\n // TODO: Check if it's not been completed already\n var options = activeCall.options,\n queue = getValue(activeCall.queue, options.queue),\n isLoop = getValue(activeCall.loop, options.loop, defaults$1.loop),\n isRepeat = getValue(activeCall.repeat, options.repeat, defaults$1.repeat),\n isStopped = activeCall._flags & 8 /* STOPPED */; // tslint:disable-line:no-bitwise\n if (!isStopped && (isLoop || isRepeat)) {\n ////////////////////\n // Option: Loop //\n // Option: Repeat //\n ////////////////////\n if (isRepeat && isRepeat !== true) {\n activeCall.repeat = isRepeat - 1;\n } else if (isLoop && isLoop !== true) {\n activeCall.loop = isLoop - 1;\n activeCall.repeat = getValue(activeCall.repeatAgain, options.repeatAgain, defaults$1.repeatAgain);\n }\n if (isLoop) {\n activeCall._flags ^= 64 /* REVERSE */; // tslint:disable-line:no-bitwise\n }\n if (queue !== false) {\n // Can't be called when stopped so no need for an extra check.\n Data(activeCall.element).lastFinishList[queue] = activeCall.timeStart + getValue(activeCall.duration, options.duration, defaults$1.duration);\n }\n activeCall.timeStart = activeCall.ellapsedTime = activeCall.percentComplete = 0;\n activeCall._flags &= ~4 /* STARTED */; // tslint:disable-line:no-bitwise\n } else {\n var element = activeCall.element,\n data = Data(element);\n if (! --data.count && !isStopped) {\n ////////////////////////\n // Feature: Classname //\n ////////////////////////\n removeClass(element, State.className);\n }\n //////////////////////\n // Option: Complete //\n //////////////////////\n // If this is the last animation in this list then we can check for\n // and complete calls or Promises.\n // TODO: When deleting an element we need to adjust these values.\n if (options && ++options._completed === options._total) {\n if (!isStopped && options.complete) {\n // We don't call the complete if the animation is stopped,\n // and we clear the key to prevent it being called again.\n callComplete(activeCall);\n options.complete = null;\n }\n var resolver = options._resolver;\n if (resolver) {\n // Fulfil the Promise\n resolver(activeCall.elements);\n delete options._resolver;\n }\n }\n ///////////////////\n // Option: Queue //\n ///////////////////\n if (queue !== false) {\n // We only do clever things with queues...\n if (!isStopped) {\n // If we're not stopping an animation, we need to remember\n // what time it finished so that the next animation in\n // sequence gets the correct start time.\n data.lastFinishList[queue] = activeCall.timeStart + getValue(activeCall.duration, options.duration, defaults$1.duration);\n }\n // Start the next animation in sequence, or delete the queue if\n // this was the last one.\n dequeue(element, queue);\n }\n // Cleanup any pointers, and remember the last animation etc.\n freeAnimationCall(activeCall);\n }\n}\n\n// Project\n/**\r\n * Used to register a normalization. This should never be called by users\r\n * directly, instead it should be called via an action:
\r\n * Velocity(\"registerNormalization\", \"Element\", \"name\", VelocityNormalizationsFn[, false]);
\r\n *\r\n * The second argument is the class of the animatable object. If this is passed\r\n * as a class name (ie, `\"Element\"` -> `window[\"Element\"]`) then this will work\r\n * cross-iframe. If passed as an actual class (ie `Element`) then it will\r\n * attempt to find the class on the window and use that name instead. If it\r\n * can't find it then it will use the class passed, which allows for custom\r\n * animation targets, but will not work cross-iframe boundary.\r\n *\r\n * The fourth argument can be an explicit false
, which prevents\r\n * the property from being cached. Please note that this can be dangerous\r\n * for performance!\r\n */\nfunction registerNormalization(args) {\n var constructor = args[0],\n name = args[1],\n callback = args[2];\n if (isString(constructor) && !(window[constructor] instanceof Object) || !isString(constructor) && !(constructor instanceof Object)) {\n console.warn(\"VelocityJS: Trying to set 'registerNormalization' constructor to an invalid value:\", constructor);\n } else if (!isString(name)) {\n console.warn(\"VelocityJS: Trying to set 'registerNormalization' name to an invalid value:\", name);\n } else if (!isFunction(callback)) {\n console.warn(\"VelocityJS: Trying to set 'registerNormalization' callback to an invalid value:\", name, callback);\n } else {\n var index = constructors.indexOf(constructor),\n nextArg = 3;\n if (index < 0 && !isString(constructor)) {\n if (constructorCache.has(constructor)) {\n index = constructors.indexOf(constructorCache.get(constructor));\n } else {\n for (var property in window) {\n if (window[property] === constructor) {\n index = constructors.indexOf(property);\n if (index < 0) {\n index = constructors.push(property) - 1;\n Normalizations[index] = {};\n constructorCache.set(constructor, property);\n }\n break;\n }\n }\n }\n }\n if (index < 0) {\n index = constructors.push(constructor) - 1;\n Normalizations[index] = {};\n }\n Normalizations[index][name] = callback;\n if (isString(args[nextArg])) {\n var unit = args[nextArg++];\n var units = NormalizationUnits[unit];\n if (!units) {\n units = NormalizationUnits[unit] = [];\n }\n units.push(callback);\n }\n if (args[nextArg] === false) {\n NoCacheNormalizations.add(name);\n }\n }\n}\n/**\r\n * Used to check if a normalisation exists on a specific class.\r\n */\nfunction hasNormalization(args) {\n var constructor = args[0],\n name = args[1];\n var index = constructors.indexOf(constructor);\n if (index < 0 && !isString(constructor)) {\n if (constructorCache.has(constructor)) {\n index = constructors.indexOf(constructorCache.get(constructor));\n } else {\n for (var property in window) {\n if (window[property] === constructor) {\n index = constructors.indexOf(property);\n break;\n }\n }\n }\n }\n return index >= 0 && Normalizations[index].hasOwnProperty(name);\n}\n/**\r\n * Get the unit to add to a unitless number based on the normalization used.\r\n */\nfunction getNormalizationUnit(fn) {\n for (var unit in NormalizationUnits) {\n if (NormalizationUnits[unit].includes(fn)) {\n return unit;\n }\n }\n return \"\";\n}\n/**\r\n * Get the normalization for an element and propertyName combination. This\r\n * value should be cached at asking time, as it may change if the user adds\r\n * more normalizations.\r\n */\nfunction getNormalization(element, propertyName) {\n var data = Data(element);\n var fn = void 0;\n for (var index = constructors.length - 1, types = data.types; !fn && index >= 0; index--) {\n if (types & 1 << index) {\n // tslint:disable-line:no-bitwise\n fn = Normalizations[index][propertyName];\n }\n }\n return fn;\n}\nregisterAction([\"registerNormalization\", registerNormalization]);\nregisterAction([\"hasNormalization\", hasNormalization]);\n\n// Project\n/**\r\n * The singular setPropertyValue, which routes the logic for all\r\n * normalizations.\r\n */\nfunction setPropertyValue(element, propertyName, propertyValue, fn) {\n var noCache = NoCacheNormalizations.has(propertyName),\n data = !noCache && Data(element);\n if (noCache || data && data.cache[propertyName] !== propertyValue) {\n // By setting it to undefined we force a true \"get\" later\n if (!noCache) {\n data.cache[propertyName] = propertyValue || undefined;\n }\n fn = fn || getNormalization(element, propertyName);\n if (fn) {\n fn(element, propertyValue);\n }\n if (Velocity$$1.debug >= 2) {\n console.info(\"Set \\\"\" + propertyName + \"\\\": \\\"\" + propertyValue + \"\\\"\", element);\n }\n }\n}\n\n/**\r\n * Remove nested `calc(0px + *)` or `calc(* + (0px + *))` correctly.\r\n */\nfunction removeNestedCalc(value) {\n if (value.indexOf(\"calc(\") >= 0) {\n var tokens = value.split(/([\\(\\)])/);\n var depth = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n switch (token) {\n case \"(\":\n depth++;\n break;\n case \")\":\n depth--;\n break;\n default:\n if (depth && token[0] === \"0\") {\n tokens[i] = token.replace(/^0[a-z%]+ \\+ /, \"\");\n }\n break;\n }\n }\n return tokens.join(\"\").replace(/(?:calc)?\\(([0-9\\.]+[a-z%]+)\\)/g, \"$1\");\n }\n return value;\n}\n\n/**\r\n * Cache every camelCase match to avoid repeating lookups.\r\n */\nvar cache$2 = {};\n/**\r\n * Camelcase a property name into its JavaScript notation (e.g.\r\n * \"background-color\" ==> \"backgroundColor\"). Camelcasing is used to\r\n * normalize property names between and across calls.\r\n */\nfunction camelCase(property) {\n var fixed = cache$2[property];\n if (fixed) {\n return fixed;\n }\n return cache$2[property] = property.replace(/-([a-z])/g, function ($, letter) {\n return letter.toUpperCase();\n });\n}\n\n// Constants\nvar rxColor6 = /#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})/gi,\n rxColor3 = /#([a-f\\d])([a-f\\d])([a-f\\d])/gi,\n rxColorName = /(rgba?\\(\\s*)?(\\b[a-z]+\\b)/g,\n rxRGB = /rgb(a?)\\(([^\\)]+)\\)/gi,\n rxSpaces = /\\s+/g;\n/**\r\n * This is the list of color names -> rgb values. The object is in here so\r\n * that the actual name conversion can be in a separate file and not\r\n * included for custom builds.\r\n */\nvar ColorNames = {};\n/**\r\n * Convert a hex list to an rgba value. Designed to be used in replace.\r\n */\nfunction makeRGBA(ignore, r, g, b) {\n return \"rgba(\" + parseInt(r, 16) + \",\" + parseInt(g, 16) + \",\" + parseInt(b, 16) + \",1)\";\n}\n/**\r\n * Replace any css colour name with its rgba() value. It is possible to use\r\n * the name within an \"rgba(blue, 0.4)\" string this way.\r\n */\nfunction fixColors(str) {\n return str.replace(rxColor6, makeRGBA).replace(rxColor3, function ($0, r, g, b) {\n return makeRGBA($0, r + r, g + g, b + b);\n }).replace(rxColorName, function ($0, $1, $2) {\n if (ColorNames[$2]) {\n return ($1 ? $1 : \"rgba(\") + ColorNames[$2] + ($1 ? \"\" : \",1)\");\n }\n return $0;\n }).replace(rxRGB, function ($0, $1, $2) {\n return \"rgba(\" + ($2.replace(rxSpaces, \"\") + ($1 ? \"\" : \",1\")) + \")\";\n });\n}\n\n// Project\n/**\r\n * Figure out the dimensions for this width / height based on the\r\n * potential borders and whether we care about them.\r\n */\nfunction augmentDimension(element, name, wantInner) {\n var isBorderBox = getPropertyValue(element, \"boxSizing\").toString().toLowerCase() === \"border-box\";\n if (isBorderBox === wantInner) {\n // in box-sizing mode, the CSS width / height accessors already\n // give the outerWidth / outerHeight.\n var sides = name === \"width\" ? [\"Left\", \"Right\"] : [\"Top\", \"Bottom\"],\n fields = [\"padding\" + sides[0], \"padding\" + sides[1], \"border\" + sides[0] + \"Width\", \"border\" + sides[1] + \"Width\"];\n var augment = 0;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = fields[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var field = _step.value;\n\n var value = parseFloat(getPropertyValue(element, field));\n if (!isNaN(value)) {\n augment += value;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return wantInner ? -augment : augment;\n }\n return 0;\n}\n\n// Project\n/**\r\n * Get the width or height of an element, pulled out as it can be used when the\r\n * in two locations so don't want to repeat it.\r\n */\nfunction getWidthHeight(element, property) {\n return element.getBoundingClientRect()[property] + augmentDimension(element, property, true) + \"px\";\n}\n// TODO: This is still a complete mess\nfunction computePropertyValue(element, property) {\n var data = Data(element),\n\n // If computedStyle is cached, use it. If not then get the correct one\n // for the element to support cross-iframe boundaries.\n computedStyle = data.computedStyle ? data.computedStyle : data.window.getComputedStyle(element, null);\n var computedValue = 0;\n if (!data.computedStyle) {\n data.computedStyle = computedStyle;\n }\n if (computedStyle[\"display\"] === \"none\") {\n switch (property) {\n case \"width\":\n case \"height\":\n // Browsers do not return height and width values for elements\n // that are set to display:\"none\". Thus, we temporarily toggle\n // display to the element type's default value.\n setPropertyValue(element, \"display\", \"auto\");\n computedValue = getWidthHeight(element, property);\n setPropertyValue(element, \"display\", \"none\");\n return String(computedValue);\n }\n }\n /* IE and Firefox do not return a value for the generic borderColor -- they only return individual values for each border side's color.\r\n Also, in all browsers, when border colors aren't all the same, a compound value is returned that Velocity isn't setup to parse.\r\n So, as a polyfill for querying individual border side colors, we just return the top border's color and animate all borders from that value. */\n /* TODO: There is a borderColor normalisation in legacy/ - figure out where this is needed... */\n computedValue = computedStyle[property];\n /* Fall back to the property's style value (if defined) when computedValue returns nothing,\r\n which can happen when the element hasn't been painted. */\n if (!computedValue) {\n computedValue = element.style[property];\n }\n /* For top, right, bottom, and left (TRBL) values that are set to \"auto\" on elements of \"fixed\" or \"absolute\" position,\r\n defer to jQuery for converting \"auto\" to a numeric value. (For elements with a \"static\" or \"relative\" position, \"auto\" has the same\r\n effect as being set to 0, so no conversion is necessary.) */\n /* An example of why numeric conversion is necessary: When an element with \"position:absolute\" has an untouched \"left\"\r\n property, which reverts to \"auto\", left's value is 0 relative to its parent element, but is often non-zero relative\r\n to its *containing* (not parent) element, which is the nearest \"position:relative\" ancestor or the viewport (and always the viewport in the case of \"position:fixed\"). */\n if (computedValue === \"auto\") {\n switch (property) {\n case \"width\":\n case \"height\":\n computedValue = getWidthHeight(element, property);\n break;\n case \"top\":\n case \"left\":\n\n case \"right\":\n case \"bottom\":\n var position = getPropertyValue(element, \"position\");\n if (position === \"fixed\" || position === \"absolute\") {\n // Note: this has no pixel unit on its returned values,\n // we re-add it here to conform with\n // computePropertyValue's behavior.\n computedValue = element.getBoundingClientRect[property] + \"px\";\n break;\n }\n // Deliberate fallthrough!\n default:\n computedValue = \"0px\";\n break;\n }\n }\n return computedValue ? String(computedValue) : \"\";\n}\n/**\r\n * Get a property value. This will grab via the cache if it exists, then\r\n * via any normalisations.\r\n */\nfunction getPropertyValue(element, propertyName, fn, skipCache) {\n var data = Data(element);\n var propertyValue = void 0;\n if (NoCacheNormalizations.has(propertyName)) {\n skipCache = true;\n }\n if (!skipCache && data && data.cache[propertyName] != null) {\n propertyValue = data.cache[propertyName];\n } else {\n fn = fn || getNormalization(element, propertyName);\n if (fn) {\n propertyValue = fn(element);\n if (data) {\n data.cache[propertyName] = propertyValue;\n }\n }\n }\n if (Velocity$$1.debug >= 2) {\n console.info(\"Get \\\"\" + propertyName + \"\\\": \\\"\" + propertyValue + \"\\\"\", element);\n }\n return propertyValue;\n}\n\n// Project\n// Constants\nvar rxHex = /^#([A-f\\d]{3}){1,2}$/i,\n commands = {\n function: function _function(value, element, elements, elementArrayIndex, propertyName, tween) {\n return value.call(element, elementArrayIndex, elements.length, propertyName);\n },\n number: function number(value, element, elements, elementArrayIndex, propertyName, tween) {\n return String(value) + getNormalizationUnit(tween.fn);\n },\n string: function string(value, element, elements, elementArrayIndex, propertyName, tween) {\n return fixColors(value);\n },\n undefined: function undefined(value, element, elements, elementArrayIndex, propertyName, tween) {\n return fixColors(getPropertyValue(element, propertyName, tween.fn) || \"\");\n }\n};\n/**\r\n * Expand a VelocityProperty argument into a valid sparse Tween array. This\r\n * pre-allocates the array as it is then the correct size and slightly\r\n * faster to access.\r\n */\nfunction expandProperties(animation, properties) {\n var tweens = animation.tweens = Object.create(null),\n elements = animation.elements,\n element = animation.element,\n elementArrayIndex = elements.indexOf(element),\n data = Data(element),\n queue = getValue(animation.queue, animation.options.queue),\n duration = getValue(animation.options.duration, defaults$1.duration);\n for (var property in properties) {\n if (properties.hasOwnProperty(property)) {\n var propertyName = camelCase(property),\n fn = getNormalization(element, propertyName);\n var valueData = properties[property];\n if (!fn && propertyName !== \"tween\") {\n if (Velocity$$1.debug) {\n console.log(\"Skipping \\\"\" + property + \"\\\" due to a lack of browser support.\");\n }\n continue;\n }\n if (valueData == null) {\n if (Velocity$$1.debug) {\n console.log(\"Skipping \\\"\" + property + \"\\\" due to no value supplied.\");\n }\n continue;\n }\n var tween = tweens[propertyName] = {};\n var endValue = void 0,\n startValue = void 0;\n tween.fn = fn;\n if (isFunction(valueData)) {\n // If we have a function as the main argument then resolve\n // it first, in case it returns an array that needs to be\n // split.\n valueData = valueData.call(element, elementArrayIndex, elements.length, elements);\n }\n if (Array.isArray(valueData)) {\n // valueData is an array in the form of\n // [ endValue, [, easing] [, startValue] ]\n var arr1 = valueData[1],\n arr2 = valueData[2];\n endValue = valueData[0];\n if (isString(arr1) && (/^[\\d-]/.test(arr1) || rxHex.test(arr1)) || isFunction(arr1) || isNumber(arr1)) {\n startValue = arr1;\n } else if (isString(arr1) && Easings[arr1] || Array.isArray(arr1)) {\n tween.easing = validateEasing(arr1, duration);\n startValue = arr2;\n } else {\n startValue = arr1 || arr2;\n }\n } else {\n endValue = valueData;\n }\n tween.end = commands[typeof endValue === \"undefined\" ? \"undefined\" : _typeof(endValue)](endValue, element, elements, elementArrayIndex, propertyName, tween);\n if (startValue != null || queue === false || data.queueList[queue] === undefined) {\n tween.start = commands[typeof startValue === \"undefined\" ? \"undefined\" : _typeof(startValue)](startValue, element, elements, elementArrayIndex, propertyName, tween);\n explodeTween(propertyName, tween, duration);\n }\n }\n }\n}\n// TODO: Needs a better match for \"translate3d\" etc - a number must be preceded by some form of break...\nvar rxToken = /((?:[+\\-*/]=)?(?:[+-]?\\d*\\.\\d+|[+-]?\\d+)[a-z%]*|(?:.(?!$|[+-]?\\d|[+\\-*/]=[+-]?\\d))+.|.)/g,\n rxNumber = /^([+\\-*/]=)?([+-]?\\d*\\.\\d+|[+-]?\\d+)(.*)$/;\n/**\r\n * Find a pattern between multiple strings, return a VelocitySequence with\r\n * the pattern and the tokenised values.\r\n *\r\n * If number then animate.\r\n * If a string then must match.\r\n * If units then convert between them by wrapping in a calc().\r\n * - If already in a calc then nest another layer.\r\n * If in an rgba() then the first three numbers are rounded.\r\n */\nfunction findPattern(parts, propertyName) {\n var partsLength = parts.length,\n tokens = [],\n indexes = [];\n var numbers = void 0;\n // First tokenise the strings - these have all values, we will pull\n // numbers later.\n for (var part = 0; part < partsLength; part++) {\n if (isString(parts[part])) {\n if (parts[part] === \"\") {\n tokens[part] = [\"\"];\n } else {\n tokens[part] = cloneArray(parts[part].match(rxToken));\n }\n indexes[part] = 0;\n // If it matches more than one thing then we've got a number.\n numbers = numbers || tokens[part].length > 1;\n //console.log(`tokens:`, parts[part], tokens[part])\n } else {\n // We have an incomplete lineup, it will get tried again later...\n return;\n }\n }\n var sequence = [],\n pattern = sequence.pattern = [],\n addString = function addString(text) {\n if (isString(pattern[pattern.length - 1])) {\n pattern[pattern.length - 1] += text;\n } else if (text) {\n pattern.push(text);\n for (var _part = 0; _part < partsLength; _part++) {\n sequence[_part].push(null);\n }\n }\n },\n returnStringType = function returnStringType() {\n if (numbers || pattern.length > 1) {\n //console.error(`Velocity: Trying to pattern match mis-matched strings \"${propertyName}\":`, parts);\n return;\n }\n var isDisplay = propertyName === \"display\",\n isVisibility = propertyName === \"visibility\";\n for (var _part2 = 0; _part2 < partsLength; _part2++) {\n var value = parts[_part2];\n sequence[_part2][0] = value;\n // Don't care about duration...\n sequence[_part2].easing = validateEasing(isDisplay && value === \"none\" || isVisibility && value === \"hidden\" || !isDisplay && !isVisibility ? \"at-end\" : \"at-start\", 400);\n }\n pattern[0] = false;\n return sequence;\n };\n var more = true;\n for (var _part3 = 0; _part3 < partsLength; _part3++) {\n sequence[_part3] = [];\n }\n while (more) {\n var bits = [],\n units = [];\n var text = void 0,\n isUnitless = false,\n hasNumbers = false;\n for (var _part4 = 0; _part4 < partsLength; _part4++) {\n var index = indexes[_part4]++,\n token = tokens[_part4][index];\n if (token) {\n var num = token.match(rxNumber); // [ignore, change, number, unit]\n if (num) {\n // It's a number, possibly with a += change and unit.\n if (text) {\n return returnStringType();\n }\n var digits = parseFloat(num[2]),\n unit = num[3],\n change = num[1] ? num[1][0] + unit : undefined,\n changeOrUnit = change || unit;\n if (digits && !units.includes(changeOrUnit)) {\n // Will be an empty string at the least.\n units.push(changeOrUnit);\n }\n if (!unit) {\n if (digits) {\n hasNumbers = true;\n } else {\n isUnitless = true;\n }\n }\n bits[_part4] = change ? [digits, changeOrUnit, true] : [digits, changeOrUnit];\n } else if (bits.length) {\n return returnStringType();\n } else {\n // It's a string.\n if (!text) {\n text = token;\n } else if (text !== token) {\n return returnStringType();\n }\n }\n } else if (!_part4) {\n for (; _part4 < partsLength; _part4++) {\n var index2 = indexes[_part4]++;\n if (tokens[_part4][index2]) {\n return returnStringType();\n }\n }\n // IMPORTANT: This is the exit point.\n more = false;\n break;\n } else {\n // Different\n return;\n }\n }\n if (text) {\n addString(text);\n } else if (units.length) {\n if (units.length === 2 && isUnitless && !hasNumbers) {\n // If we only have two units, and one is empty, and it's only empty on \"0\", then treat us as having one unit\n units.splice(units[0] ? 1 : 0, 1);\n }\n if (units.length === 1) {\n // All the same units, so append number then unit.\n var _unit = units[0],\n firstLetter = _unit[0];\n switch (firstLetter) {\n case \"+\":\n case \"-\":\n case \"*\":\n case \"/\":\n if (propertyName) {\n console.error(\"Velocity: The first property must not contain a relative function \\\"\" + propertyName + \"\\\":\", parts);\n }\n return;\n }\n pattern.push(false);\n for (var _part5 = 0; _part5 < partsLength; _part5++) {\n sequence[_part5].push(bits[_part5][0]);\n }\n addString(_unit);\n } else {\n // Multiple units, so must be inside a calc.\n addString(\"calc(\");\n var patternCalc = pattern.length - 1; // Store the beginning of our calc.\n for (var i = 0; i < units.length; i++) {\n var _unit2 = units[i],\n _firstLetter = _unit2[0],\n isComplex = _firstLetter === \"*\" || _firstLetter === \"/\",\n isMaths = isComplex || _firstLetter === \"+\" || _firstLetter === \"-\";\n if (isComplex) {\n // TODO: Not sure this should be done automatically!\n pattern[patternCalc] += \"(\";\n addString(\")\");\n }\n if (i) {\n addString(\" \" + (isMaths ? _firstLetter : \"+\") + \" \");\n }\n pattern.push(false);\n for (var _part6 = 0; _part6 < partsLength; _part6++) {\n var bit = bits[_part6],\n value = bit[1] === _unit2 ? bit[0] : bit.length === 3 ? sequence[_part6 - 1][sequence[_part6 - 1].length - 1] : isComplex ? 1 : 0;\n sequence[_part6].push(value);\n }\n addString(isMaths ? _unit2.substring(1) : _unit2);\n }\n addString(\")\");\n }\n }\n }\n // We've got here, so a valid sequence - now check and fix RGB rounding\n // and calc() nesting...\n // TODO: Nested calc(a + calc(b + c)) -> calc(a + (b + c))\n for (var _i = 0, inRGB = 0; _i < pattern.length; _i++) {\n var _text = pattern[_i];\n if (isString(_text)) {\n if (inRGB && _text.indexOf(\",\") >= 0) {\n inRGB++;\n } else if (_text.indexOf(\"rgb\") >= 0) {\n inRGB = 1;\n }\n } else if (inRGB) {\n if (inRGB < 4) {\n pattern[_i] = true;\n } else {\n inRGB = 0;\n }\n }\n }\n return sequence;\n}\n/**\r\n * Convert a string-based tween with start and end strings, into a pattern\r\n * based tween with arrays.\r\n */\nfunction explodeTween(propertyName, tween, duration, starting) {\n var startValue = tween.start,\n endValue = tween.end;\n if (!isString(endValue) || !isString(startValue)) {\n return;\n }\n var sequence = findPattern([startValue, endValue], propertyName);\n if (!sequence && starting) {\n // This little piece will take a startValue, split out the\n // various numbers in it, then copy the endValue into the\n // startValue while replacing the numbers in it to match the\n // original start numbers as a repeating sequence.\n // Finally this function will run again with the new\n // startValue and a now matching pattern.\n var startNumbers = startValue.match(/\\d\\.?\\d*/g) || [\"0\"],\n count = startNumbers.length;\n var index = 0;\n sequence = findPattern([endValue.replace(/\\d+\\.?\\d*/g, function () {\n return startNumbers[index++ % count];\n }), endValue], propertyName);\n }\n if (sequence) {\n if (Velocity$$1.debug) {\n console.log(\"Velocity: Sequence found:\", sequence);\n }\n sequence[0].percent = 0;\n sequence[1].percent = 1;\n tween.sequence = sequence;\n switch (tween.easing) {\n case Easings[\"at-start\"]:\n case Easings[\"during\"]:\n case Easings[\"at-end\"]:\n sequence[0].easing = sequence[1].easing = tween.easing;\n break;\n }\n }\n}\n/**\r\n * Expand all queued animations that haven't gone yet\r\n *\r\n * This will automatically expand the properties map for any recently added\r\n * animations so that the start and end values are correct.\r\n */\nfunction validateTweens(activeCall) {\n // This might be called on an already-ready animation\n if (State.firstNew === activeCall) {\n State.firstNew = activeCall._next;\n }\n // Check if we're actually already ready\n if (activeCall._flags & 1 /* EXPANDED */) {\n // tslint:disable-line:no-bitwise\n return;\n }\n var element = activeCall.element,\n tweens = activeCall.tweens,\n duration = getValue(activeCall.options.duration, defaults$1.duration);\n // tslint:disable-next-line:forin\n for (var propertyName in tweens) {\n var tween = tweens[propertyName];\n if (tween.start == null) {\n // Get the start value as it's not been passed in\n var startValue = getPropertyValue(activeCall.element, propertyName);\n if (isString(startValue)) {\n tween.start = fixColors(startValue);\n explodeTween(propertyName, tween, duration, true);\n } else if (!Array.isArray(startValue)) {\n console.warn(\"bad type\", tween, propertyName, startValue);\n }\n }\n if (Velocity$$1.debug) {\n console.log(\"tweensContainer \\\"\" + propertyName + \"\\\": \" + JSON.stringify(tween), element);\n }\n }\n activeCall._flags |= 1 /* EXPANDED */; // tslint:disable-line:no-bitwise\n}\n\n// Project\n/**\r\n * Call the begin method of an animation in a separate function so it can\r\n * benefit from JIT compiling while still having a try/catch block.\r\n */\nfunction beginCall(activeCall) {\n var callback = activeCall.begin || activeCall.options.begin;\n if (callback) {\n try {\n var elements = activeCall.elements;\n callback.call(elements, elements, activeCall);\n } catch (error) {\n setTimeout(function () {\n throw error;\n }, 1);\n }\n }\n}\n/**\r\n * Call the progress method of an animation in a separate function so it can\r\n * benefit from JIT compiling while still having a try/catch block.\r\n */\nfunction progressCall(activeCall) {\n var callback = activeCall.progress || activeCall.options.progress;\n if (callback) {\n try {\n var elements = activeCall.elements,\n percentComplete = activeCall.percentComplete,\n options = activeCall.options,\n tweenValue = activeCall.tween;\n callback.call(elements, elements, percentComplete, Math.max(0, activeCall.timeStart + (activeCall.duration != null ? activeCall.duration : options.duration != null ? options.duration : defaults$1.duration) - lastTick), tweenValue !== undefined ? tweenValue : String(percentComplete * 100), activeCall);\n } catch (error) {\n setTimeout(function () {\n throw error;\n }, 1);\n }\n }\n}\n/**\r\n * Call callbacks, potentially run async with the main animation thread.\r\n */\nfunction asyncCallbacks() {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = progressed[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var activeCall = _step.value;\n\n progressCall(activeCall);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n progressed.clear();\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = completed[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _activeCall = _step2.value;\n\n completeCall(_activeCall);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n completed.clear();\n}\n/**************\r\n Timing\r\n **************/\nvar FRAME_TIME = 1000 / 60,\n\n/**\r\n * Animations with a Complete callback.\r\n */\ncompleted = new Set(),\n\n/**\r\n * Animations with a Progress callback.\r\n */\nprogressed = new Set(),\n\n/**\r\n * Shim for window.performance in case it doesn't exist\r\n */\nperformance = function () {\n var perf = window.performance || {};\n if (typeof perf.now !== \"function\") {\n var nowOffset = perf.timing && perf.timing.navigationStart ? perf.timing.navigationStart : now();\n perf.now = function () {\n return now() - nowOffset;\n };\n }\n return perf;\n}(),\n\n/**\r\n * Proxy function for when rAF is not available.\r\n *\r\n * This should hopefully never be used as the browsers often throttle\r\n * this to less than one frame per second in the background, making it\r\n * completely unusable.\r\n */\nrAFProxy = function rAFProxy(callback) {\n return setTimeout(callback, Math.max(0, FRAME_TIME - (performance.now() - lastTick)));\n},\n\n/**\r\n * Either requestAnimationFrame, or a shim for it.\r\n */\nrAFShim = window.requestAnimationFrame || rAFProxy;\n/**\r\n * Set if we are currently inside a tick() to prevent double-calling.\r\n */\nvar ticking = void 0,\n\n/**\r\n * A background WebWorker that sends us framerate messages when we're in\r\n * the background. Without this we cannot maintain frame accuracy.\r\n */\nworker = void 0;\n/**\r\n * The time that the last animation frame ran at. Set from tick(), and used\r\n * for missing rAF (ie, when not in focus etc).\r\n */\nvar lastTick = 0;\n/**\r\n * WebWorker background function.\r\n *\r\n * When we're in the background this will send us a msg every tick, when in\r\n * the foreground it won't.\r\n *\r\n * When running in the background the browser reduces allowed CPU etc, so\r\n * we raun at 30fps instead of 60fps.\r\n */\nfunction workerFn() {\n var _this = this;\n\n var interval = void 0;\n this.onmessage = function (e) {\n switch (e.data) {\n case true:\n if (!interval) {\n interval = setInterval(function () {\n _this.postMessage(true);\n }, 1000 / 30);\n }\n break;\n case false:\n if (interval) {\n clearInterval(interval);\n interval = 0;\n }\n break;\n default:\n _this.postMessage(e.data);\n break;\n }\n };\n}\ntry {\n // Create the worker - this might not be supported, hence the try/catch.\n worker = new Worker(URL.createObjectURL(new Blob([\"(\" + workerFn + \")()\"])));\n // Whenever the worker sends a message we tick()\n worker.onmessage = function (e) {\n if (e.data === true) {\n tick();\n } else {\n asyncCallbacks();\n }\n };\n // And watch for going to the background to start the WebWorker running.\n if (!State.isMobile && document.hidden !== undefined) {\n document.addEventListener(\"visibilitychange\", function () {\n worker.postMessage(State.isTicking && document.hidden);\n });\n }\n} catch (e) {}\n/*\r\n * WebWorkers are not supported in this format. This can happen in IE10\r\n * where it can't create one from a blob this way. We fallback, but make\r\n * no guarantees towards accuracy in this case.\r\n */\n\n/**\r\n * Called on every tick, preferably through rAF. This is reponsible for\r\n * initialising any new animations, then starting any that need starting.\r\n * Finally it will expand any tweens and set the properties relating to\r\n * them. If there are any callbacks relating to the animations then they\r\n * will attempt to call at the end (with the exception of \"begin\").\r\n */\nfunction tick(timestamp) {\n if (ticking) {\n // Should never happen - but if we've swapped back from hidden to\n // visibile then we want to make sure\n return;\n }\n ticking = true;\n /* An empty timestamp argument indicates that this is the first tick occurence since ticking was turned on.\r\n We leverage this metadata to fully ignore the first tick pass since RAF's initial pass is fired whenever\r\n the browser's next tick sync time occurs, which results in the first elements subjected to Velocity\r\n calls being animated out of sync with any elements animated immediately thereafter. In short, we ignore\r\n the first RAF tick pass so that elements being immediately consecutively animated -- instead of simultaneously animated\r\n by the same Velocity call -- are properly batched into the same initial RAF tick and consequently remain in sync thereafter. */\n if (timestamp !== false) {\n var timeCurrent = performance.now(),\n deltaTime = lastTick ? timeCurrent - lastTick : FRAME_TIME,\n defaultSpeed = defaults$1.speed,\n defaultEasing = defaults$1.easing,\n defaultDuration = defaults$1.duration;\n var activeCall = void 0,\n nextCall = void 0;\n if (deltaTime >= defaults$1.minFrameTime || !lastTick) {\n lastTick = timeCurrent;\n /********************\r\n Call Iteration\r\n ********************/\n // Expand any tweens that might need it.\n while (State.firstNew) {\n validateTweens(State.firstNew);\n }\n // Iterate through each active call.\n for (activeCall = State.first; activeCall && activeCall !== State.firstNew; activeCall = activeCall._next) {\n var element = activeCall.element,\n data = Data(element);\n // Check to see if this element has been deleted midway\n // through the animation. If it's gone then end this\n // animation.\n if (!element.parentNode || !data) {\n // TODO: Remove safely - decrease count, delete data, remove from arrays\n freeAnimationCall(activeCall);\n continue;\n }\n // Don't bother getting until we can use these.\n var options = activeCall.options,\n flags = activeCall._flags;\n var timeStart = activeCall.timeStart;\n // If this is the first time that this call has been\n // processed by tick() then we assign timeStart now so that\n // it's value is as close to the real animation start time\n // as possible.\n if (!timeStart) {\n var queue = activeCall.queue != null ? activeCall.queue : options.queue;\n timeStart = timeCurrent - deltaTime;\n if (queue !== false) {\n timeStart = Math.max(timeStart, data.lastFinishList[queue] || 0);\n }\n activeCall.timeStart = timeStart;\n }\n // If this animation is paused then skip processing unless\n // it has been set to resume.\n if (flags & 16 /* PAUSED */) {\n // tslint:disable-line:no-bitwise\n // Update the time start to accomodate the paused\n // completion amount.\n activeCall.timeStart += deltaTime;\n continue;\n }\n // Check if this animation is ready - if it's synced then it\n // needs to wait for all other animations in the sync\n if (!(flags & 2 /* READY */)) {\n // tslint:disable-line:no-bitwise\n activeCall._flags |= 2 /* READY */; // tslint:disable-line:no-bitwise\n options._ready++;\n }\n }\n // Need to split the loop, as ready sync animations must all get\n // the same start time.\n for (activeCall = State.first; activeCall && activeCall !== State.firstNew; activeCall = nextCall) {\n var _flags = activeCall._flags;\n nextCall = activeCall._next;\n if (!(_flags & 2 /* READY */) || _flags & 16 /* PAUSED */) {\n // tslint:disable-line:no-bitwise\n continue;\n }\n var _options = activeCall.options;\n if (_flags & 32 /* SYNC */ && _options._ready < _options._total) {\n // tslint:disable-line:no-bitwise\n activeCall.timeStart += deltaTime;\n continue;\n }\n var speed = activeCall.speed != null ? activeCall.speed : _options.speed != null ? _options.speed : defaultSpeed;\n var _timeStart = activeCall.timeStart;\n // Don't bother getting until we can use these.\n if (!(_flags & 4 /* STARTED */)) {\n // tslint:disable-line:no-bitwise\n var delay = activeCall.delay != null ? activeCall.delay : _options.delay;\n // Make sure anything we've delayed doesn't start\n // animating yet, there might still be an active delay\n // after something has been un-paused\n if (delay) {\n if (_timeStart + delay / speed > timeCurrent) {\n continue;\n }\n activeCall.timeStart = _timeStart += delay / (delay > 0 ? speed : 1);\n }\n activeCall._flags |= 4 /* STARTED */; // tslint:disable-line:no-bitwise\n // The begin callback is fired once per call, not once\n // per element, and is passed the full raw DOM element\n // set as both its context and its first argument.\n if (_options._started++ === 0) {\n _options._first = activeCall;\n if (_options.begin) {\n // Pass to an external fn with a try/catch block for optimisation\n beginCall(activeCall);\n // Only called once, even if reversed or repeated\n _options.begin = undefined;\n }\n }\n }\n if (speed !== 1) {\n // On the first frame we may have a shorter delta\n // const delta = Math.min(deltaTime, timeCurrent - timeStart);\n activeCall.timeStart = _timeStart += Math.min(deltaTime, timeCurrent - _timeStart) * (1 - speed);\n }\n var activeEasing = activeCall.easing != null ? activeCall.easing : _options.easing != null ? _options.easing : defaultEasing,\n millisecondsEllapsed = activeCall.ellapsedTime = timeCurrent - _timeStart,\n duration = activeCall.duration != null ? activeCall.duration : _options.duration != null ? _options.duration : defaultDuration,\n percentComplete = activeCall.percentComplete = Velocity$$1.mock ? 1 : Math.min(millisecondsEllapsed / duration, 1),\n tweens = activeCall.tweens,\n reverse = _flags & 64 /* REVERSE */; // tslint:disable-line:no-bitwise\n if (activeCall.progress || _options._first === activeCall && _options.progress) {\n progressed.add(activeCall);\n }\n if (percentComplete === 1) {\n completed.add(activeCall);\n }\n // tslint:disable-next-line:forin\n for (var property in tweens) {\n // For every element, iterate through each property.\n var tween = tweens[property],\n sequence = tween.sequence,\n pattern = sequence.pattern;\n var currentValue = \"\",\n i = 0;\n if (pattern) {\n var easingComplete = (tween.easing || activeEasing)(percentComplete, 0, 1, property);\n var best = 0;\n for (var j = 0; j < sequence.length - 1; j++) {\n if (sequence[j].percent < easingComplete) {\n best = j;\n }\n }\n var tweenFrom = sequence[best],\n tweenTo = sequence[best + 1] || tweenFrom,\n rawPercent = (percentComplete - tweenFrom.percent) / (tweenTo.percent - tweenFrom.percent),\n tweenPercent = reverse ? 1 - rawPercent : rawPercent,\n easing = tweenTo.easing || activeEasing || linearEasing;\n for (; i < pattern.length; i++) {\n var startValue = tweenFrom[i];\n if (startValue == null) {\n currentValue += pattern[i];\n } else {\n var endValue = tweenTo[i];\n if (startValue === endValue) {\n currentValue += startValue;\n } else {\n // All easings must deal with numbers except for our internal ones.\n var result = easing(tweenPercent, startValue, endValue, property);\n currentValue += pattern[i] !== true ? result : Math.round(result);\n }\n }\n }\n if (property !== \"tween\") {\n if (percentComplete === 1) {\n currentValue = removeNestedCalc(currentValue);\n }\n // TODO: To solve an IE<=8 positioning bug, the unit type must be dropped when setting a property value of 0 - add normalisations to legacy\n setPropertyValue(activeCall.element, property, currentValue, tween.fn);\n } else {\n // Skip the fake 'tween' property as that is only\n // passed into the progress callback.\n activeCall.tween = currentValue;\n }\n } else {\n console.warn(\"VelocityJS: Missing pattern:\", property, JSON.stringify(tween[property]));\n delete tweens[property];\n }\n }\n }\n if (progressed.size || completed.size) {\n if (!document.hidden) {\n asyncCallbacks();\n } else if (worker) {\n worker.postMessage(\"\");\n } else {\n setTimeout(asyncCallbacks, 1);\n }\n }\n }\n }\n if (State.first) {\n State.isTicking = true;\n if (!document.hidden) {\n rAFShim(tick);\n } else if (!worker) {\n rAFProxy(tick);\n } else if (timestamp === false) {\n // Make sure we turn on the messages.\n worker.postMessage(true);\n }\n } else {\n State.isTicking = false;\n lastTick = 0;\n if (document.hidden && worker) {\n // Make sure we turn off the messages.\n worker.postMessage(false);\n }\n }\n ticking = false;\n}\n\n// Project\n/**\r\n * Check if an animation should be finished, and if so we set the tweens to\r\n * the final value for it, then call complete.\r\n */\nfunction checkAnimationShouldBeFinished(animation, queueName, defaultQueue) {\n validateTweens(animation);\n if (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n if (!(animation._flags & 4 /* STARTED */)) {\n // tslint:disable-line:no-bitwise\n // Copied from tick.ts - ensure that the animation is completely\n // valid and run begin() before complete().\n var options = animation.options;\n // The begin callback is fired once per call, not once per\n // element, and is passed the full raw DOM element set as both\n // its context and its first argument.\n if (options._started++ === 0) {\n options._first = animation;\n if (options.begin) {\n // Pass to an external fn with a try/catch block for optimisation\n beginCall(animation);\n // Only called once, even if reversed or repeated\n options.begin = undefined;\n }\n }\n animation._flags |= 4 /* STARTED */; // tslint:disable-line:no-bitwise\n }\n // tslint:disable-next-line:forin\n for (var property in animation.tweens) {\n var tween = animation.tweens[property],\n sequence = tween.sequence,\n pattern = sequence.pattern;\n var currentValue = \"\",\n i = 0;\n if (pattern) {\n var endValues = sequence[sequence.length - 1];\n for (; i < pattern.length; i++) {\n var endValue = endValues[i];\n currentValue += endValue == null ? pattern[i] : endValue;\n }\n }\n setPropertyValue(animation.element, property, currentValue, tween.fn);\n }\n completeCall(animation);\n }\n}\n/**\r\n * When the finish action is triggered, the elements' currently active call is\r\n * immediately finished. When an element is finished, the next item in its\r\n * animation queue is immediately triggered. If passed via a chained call\r\n * then this will only target the animations in that call, and not the\r\n * elements linked to it.\r\n *\r\n * A queue name may be passed in to specify that only animations on the\r\n * named queue are finished. The default queue is named \"\". In addition the\r\n * value of `false` is allowed for the queue name.\r\n *\r\n * An final argument may be passed in to clear an element's remaining queued\r\n * calls. This may only be the value `true`.\r\n */\nfunction finish(args, elements, promiseHandler) {\n var queueName = validateQueue(args[0], true),\n defaultQueue = defaults$1.queue,\n finishAll = args[queueName === undefined ? 0 : 1] === true;\n if (isVelocityResult(elements) && elements.velocity.animations) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = elements.velocity.animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var animation = _step.value;\n\n checkAnimationShouldBeFinished(animation, queueName, defaultQueue);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } else {\n while (State.firstNew) {\n validateTweens(State.firstNew);\n }\n for (var activeCall = State.first, nextCall; activeCall && (finishAll || activeCall !== State.firstNew); activeCall = nextCall || State.firstNew) {\n nextCall = activeCall._next;\n if (!elements || elements.includes(activeCall.element)) {\n checkAnimationShouldBeFinished(activeCall, queueName, defaultQueue);\n }\n }\n }\n if (promiseHandler) {\n if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n elements.then(promiseHandler._resolver);\n } else {\n promiseHandler._resolver(elements);\n }\n }\n}\nregisterAction([\"finish\", finish], true);\n\n/**\r\n * Used to map getters for the various AnimationFlags.\r\n */\nvar animationFlags = {\n isExpanded: 1 /* EXPANDED */\n , isReady: 2 /* READY */\n , isStarted: 4 /* STARTED */\n , isStopped: 8 /* STOPPED */\n , isPaused: 16 /* PAUSED */\n , isSync: 32 /* SYNC */\n , isReverse: 64 /* REVERSE */\n};\n/**\r\n * Get or set an option or running AnimationCall data value. If there is no\r\n * value passed then it will get, otherwise we will set.\r\n *\r\n * NOTE: When using \"get\" this will not touch the Promise as it is never\r\n * returned to the user.\r\n */\nfunction option(args, elements, promiseHandler, action) {\n var key = args[0],\n queue = action.indexOf(\".\") >= 0 ? action.replace(/^.*\\./, \"\") : undefined,\n queueName = queue === \"false\" ? false : validateQueue(queue, true);\n var animations = void 0,\n value = args[1];\n if (!key) {\n console.warn(\"VelocityJS: Cannot access a non-existant key!\");\n return null;\n }\n // If we're chaining the return value from Velocity then we are only\n // interested in the values related to that call\n if (isVelocityResult(elements) && elements.velocity.animations) {\n animations = elements.velocity.animations;\n } else {\n animations = [];\n for (var activeCall = State.first; activeCall; activeCall = activeCall._next) {\n if (elements.indexOf(activeCall.element) >= 0 && getValue(activeCall.queue, activeCall.options.queue) === queueName) {\n animations.push(activeCall);\n }\n }\n // If we're dealing with multiple elements that are pointing at a\n // single running animation, then instead treat them as a single\n // animation.\n if (elements.length > 1 && animations.length > 1) {\n var i = 1,\n options = animations[0].options;\n while (i < animations.length) {\n if (animations[i++].options !== options) {\n options = null;\n break;\n }\n }\n // TODO: this needs to check that they're actually a sync:true animation to merge the results, otherwise the individual values may be different\n if (options) {\n animations = [animations[0]];\n }\n }\n }\n // GET\n if (value === undefined) {\n var result = [],\n flag = animationFlags[key];\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var animation = _step.value;\n\n if (flag === undefined) {\n // A normal key to get.\n result.push(getValue(animation[key], animation.options[key]));\n } else {\n // A flag that we're checking against.\n result.push((animation._flags & flag) === 0); // tslint:disable-line:no-bitwise\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n if (elements.length === 1 && animations.length === 1) {\n // If only a single animation is found and we're only targetting a\n // single element, then return the value directly\n return result[0];\n }\n return result;\n }\n // SET\n var isPercentComplete = void 0;\n switch (key) {\n case \"cache\":\n value = validateCache(value);\n break;\n case \"begin\":\n value = validateBegin(value);\n break;\n case \"complete\":\n value = validateComplete(value);\n break;\n case \"delay\":\n value = validateDelay(value);\n break;\n case \"duration\":\n value = validateDuration(value);\n break;\n case \"fpsLimit\":\n value = validateFpsLimit(value);\n break;\n case \"loop\":\n value = validateLoop(value);\n break;\n case \"percentComplete\":\n isPercentComplete = true;\n value = parseFloat(value);\n break;\n case \"repeat\":\n case \"repeatAgain\":\n value = validateRepeat(value);\n break;\n default:\n if (key[0] !== \"_\") {\n var num = parseFloat(value);\n if (value === String(num)) {\n value = num;\n }\n break;\n }\n // deliberate fallthrough\n case \"queue\":\n case \"promise\":\n case \"promiseRejectEmpty\":\n case \"easing\":\n case \"started\":\n console.warn(\"VelocityJS: Trying to set a read-only key:\", key);\n return;\n }\n if (value === undefined || value !== value) {\n console.warn(\"VelocityJS: Trying to set an invalid value:\" + key + \"=\" + value + \" (\" + args[1] + \")\");\n return null;\n }\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = animations[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _animation = _step2.value;\n\n if (isPercentComplete) {\n _animation.timeStart = lastTick - getValue(_animation.duration, _animation.options.duration, defaults$1.duration) * value;\n } else {\n _animation[key] = value;\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n if (promiseHandler) {\n if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n elements.then(promiseHandler._resolver);\n } else {\n promiseHandler._resolver(elements);\n }\n }\n}\nregisterAction([\"option\", option], true);\n\n// Project\n/**\r\n * Check if an animation should be paused / resumed.\r\n */\nfunction checkAnimation(animation, queueName, defaultQueue, isPaused) {\n if (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n if (isPaused) {\n animation._flags |= 16 /* PAUSED */; // tslint:disable-line:no-bitwise\n } else {\n animation._flags &= ~16 /* PAUSED */; // tslint:disable-line:no-bitwise\n }\n }\n}\n/**\r\n * Pause and Resume are call-wide (not on a per element basis). Thus, calling pause or resume on a\r\n * single element will cause any calls that contain tweens for that element to be paused/resumed\r\n * as well.\r\n */\nfunction pauseResume(args, elements, promiseHandler, action) {\n var isPaused = action.indexOf(\"pause\") === 0,\n queue = action.indexOf(\".\") >= 0 ? action.replace(/^.*\\./, \"\") : undefined,\n queueName = queue === \"false\" ? false : validateQueue(args[0]),\n defaultQueue = defaults$1.queue;\n if (isVelocityResult(elements) && elements.velocity.animations) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = elements.velocity.animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var animation = _step.value;\n\n checkAnimation(animation, queueName, defaultQueue, isPaused);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } else {\n var activeCall = State.first;\n while (activeCall) {\n if (!elements || elements.includes(activeCall.element)) {\n checkAnimation(activeCall, queueName, defaultQueue, isPaused);\n }\n activeCall = activeCall._next;\n }\n }\n if (promiseHandler) {\n if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n elements.then(promiseHandler._resolver);\n } else {\n promiseHandler._resolver(elements);\n }\n }\n}\nregisterAction([\"pause\", pauseResume], true);\nregisterAction([\"resume\", pauseResume], true);\n\n// Project\n/**\r\n * Get or set a style of Nomralised property value on one or more elements.\r\n * If there is no value passed then it will get, otherwise we will set.\r\n *\r\n * NOTE: When using \"get\" this will not touch the Promise as it is never\r\n * returned to the user.\r\n *\r\n * This can fail to set, and will reject the Promise if it does so.\r\n *\r\n * Velocity(elements, \"style\", \"property\", \"value\") => elements;\r\n * Velocity(elements, \"style\", {\"property\": \"value\", ...}) => elements;\r\n * Velocity(element, \"style\", \"property\") => \"value\";\r\n * Velocity(elements, \"style\", \"property\") => [\"value\", ...];\r\n */\nfunction propertyAction(args, elements, promiseHandler, action) {\n var property = args[0],\n value = args[1];\n if (!property) {\n console.warn(\"VelocityJS: Cannot access a non-existant property!\");\n return null;\n }\n // GET\n if (value === undefined && !isPlainObject(property)) {\n if (Array.isArray(property)) {\n if (elements.length === 1) {\n var result = {};\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = property[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var prop = _step.value;\n\n result[prop] = fixColors(getPropertyValue(elements[0], prop));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return result;\n } else {\n var _result = [];\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = elements[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var element = _step2.value;\n\n var res = {};\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = property[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var _prop = _step3.value;\n\n res[_prop] = fixColors(getPropertyValue(element, _prop));\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n _result.push(res);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return _result;\n }\n } else {\n // If only a single animation is found and we're only targetting a\n // single element, then return the value directly\n if (elements.length === 1) {\n return fixColors(getPropertyValue(elements[0], property));\n }\n var _result2 = [];\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = elements[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var _element = _step4.value;\n\n _result2.push(fixColors(getPropertyValue(_element, property)));\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n return _result2;\n }\n }\n // SET\n var error = [];\n if (isPlainObject(property)) {\n for (var propertyName in property) {\n if (property.hasOwnProperty(propertyName)) {\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = elements[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var _element2 = _step5.value;\n\n var propertyValue = property[propertyName];\n if (isString(propertyValue) || isNumber(propertyValue)) {\n setPropertyValue(_element2, propertyName, property[propertyName]);\n } else {\n error.push(\"Cannot set a property \\\"\" + propertyName + \"\\\" to an unknown type: \" + (typeof propertyValue === \"undefined\" ? \"undefined\" : _typeof(propertyValue)));\n console.warn(\"VelocityJS: Cannot set a property \\\"\" + propertyName + \"\\\" to an unknown type:\", propertyValue);\n }\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n }\n }\n } else if (isString(value) || isNumber(value)) {\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = elements[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var _element3 = _step6.value;\n\n setPropertyValue(_element3, property, String(value));\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n } else {\n error.push(\"Cannot set a property \\\"\" + property + \"\\\" to an unknown type: \" + (typeof value === \"undefined\" ? \"undefined\" : _typeof(value)));\n console.warn(\"VelocityJS: Cannot set a property \\\"\" + property + \"\\\" to an unknown type:\", value);\n }\n if (promiseHandler) {\n if (error.length) {\n promiseHandler._rejecter(error.join(\", \"));\n } else if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n elements.then(promiseHandler._resolver);\n } else {\n promiseHandler._resolver(elements);\n }\n }\n}\nregisterAction([\"property\", propertyAction], true);\n\n// Project\nregisterAction([\"reverse\", function (args, elements, promiseHandler, action) {\n // NOTE: Code needs to split out before here - but this is needed to prevent it being overridden\n throw new SyntaxError(\"VelocityJS: The 'reverse' action is built in and private.\");\n}], true);\n\n// Project\n/**\r\n * Check if an animation should be stopped, and if so then set the STOPPED\r\n * flag on it, then call complete.\r\n */\nfunction checkAnimationShouldBeStopped(animation, queueName, defaultQueue) {\n validateTweens(animation);\n if (queueName === undefined || queueName === getValue(animation.queue, animation.options.queue, defaultQueue)) {\n animation._flags |= 8 /* STOPPED */; // tslint:disable-line:no-bitwise\n completeCall(animation);\n }\n}\n/**\r\n * When the stop action is triggered, the elements' currently active call is\r\n * immediately stopped. When an element is stopped, the next item in its\r\n * animation queue is immediately triggered. If passed via a chained call\r\n * then this will only target the animations in that call, and not the\r\n * elements linked to it.\r\n *\r\n * A queue name may be passed in to specify that only animations on the\r\n * named queue are stopped. The default queue is named \"\". In addition the\r\n * value of `false` is allowed for the queue name.\r\n *\r\n * An final argument may be passed in to clear an element's remaining queued\r\n * calls. This may only be the value `true`.\r\n *\r\n * Note: The stop command runs prior to Velocity's Queueing phase since its\r\n * behavior is intended to take effect *immediately*, regardless of the\r\n * element's current queue state.\r\n */\nfunction stop(args, elements, promiseHandler, action) {\n var queueName = validateQueue(args[0], true),\n defaultQueue = defaults$1.queue,\n finishAll = args[queueName === undefined ? 0 : 1] === true;\n if (isVelocityResult(elements) && elements.velocity.animations) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = elements.velocity.animations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var animation = _step.value;\n\n checkAnimationShouldBeStopped(animation, queueName, defaultQueue);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n } else {\n while (State.firstNew) {\n validateTweens(State.firstNew);\n }\n for (var activeCall = State.first, nextCall; activeCall && (finishAll || activeCall !== State.firstNew); activeCall = nextCall || State.firstNew) {\n nextCall = activeCall._next;\n if (!elements || elements.includes(activeCall.element)) {\n checkAnimationShouldBeStopped(activeCall, queueName, defaultQueue);\n }\n }\n }\n if (promiseHandler) {\n if (isVelocityResult(elements) && elements.velocity.animations && elements.then) {\n elements.then(promiseHandler._resolver);\n } else {\n promiseHandler._resolver(elements);\n }\n }\n}\nregisterAction([\"stop\", stop], true);\n\n// Project\nregisterAction([\"style\", propertyAction], true);\n\n// Project\n/**\r\n *\r\n */\nfunction tweenAction(args, elements, promiseHandler, action) {\n var requireForcefeeding = void 0;\n if (!elements) {\n if (!args.length) {\n console.info(\"Velocity(, \\\"tween\\\", percentComplete, property, end | [end, , ], ) => value\\nVelocity(, \\\"tween\\\", percentComplete, {property: end | [end, , ], ...}, ) => {property: value, ...}\");\n return null;\n }\n elements = [document.body];\n requireForcefeeding = true;\n } else if (elements.length !== 1) {\n // TODO: Allow more than a single element to return an array of results\n throw new Error(\"VelocityJS: Cannot tween more than one element!\");\n }\n var percentComplete = args[0],\n fakeAnimation = {\n elements: elements,\n element: elements[0],\n queue: false,\n options: {\n duration: 1000\n },\n tweens: null\n },\n result = {};\n var properties = args[1],\n singleResult = void 0,\n maybeSequence = void 0,\n easing = args[2],\n count = 0;\n if (isString(args[1])) {\n if (SequencesObject && SequencesObject[args[1]]) {\n maybeSequence = SequencesObject[args[1]];\n properties = {};\n easing = args[2];\n } else {\n singleResult = true;\n properties = defineProperty({}, args[1], args[2]);\n easing = args[3];\n }\n } else if (Array.isArray(args[1])) {\n singleResult = true;\n properties = {\n tween: args[1]\n };\n easing = args[2];\n }\n if (!isNumber(percentComplete) || percentComplete < 0 || percentComplete > 1) {\n throw new Error(\"VelocityJS: Must tween a percentage from 0 to 1!\");\n }\n if (!isPlainObject(properties)) {\n throw new Error(\"VelocityJS: Cannot tween an invalid property!\");\n }\n if (requireForcefeeding) {\n for (var property in properties) {\n if (properties.hasOwnProperty(property) && (!Array.isArray(properties[property]) || properties[property].length < 2)) {\n throw new Error(\"VelocityJS: When not supplying an element you must force-feed values: \" + property);\n }\n }\n }\n var activeEasing = validateEasing(getValue(easing, defaults$1.easing), DEFAULT_DURATION);\n if (maybeSequence) {\n expandSequence(fakeAnimation, maybeSequence);\n } else {\n expandProperties(fakeAnimation, properties);\n }\n // tslint:disable-next-line:forin\n for (var _property in fakeAnimation.tweens) {\n // For every element, iterate through each property.\n var propertyTween = fakeAnimation.tweens[_property],\n sequence = propertyTween.sequence,\n pattern = sequence.pattern;\n var currentValue = \"\",\n i = 0;\n count++;\n if (pattern) {\n var easingComplete = (propertyTween.easing || activeEasing)(percentComplete, 0, 1, _property);\n var best = 0;\n for (var j = 0; j < sequence.length - 1; j++) {\n if (sequence[j].percent < easingComplete) {\n best = j;\n }\n }\n var tweenFrom = sequence[best],\n tweenTo = sequence[best + 1] || tweenFrom,\n tweenPercent = (percentComplete - tweenFrom.percent) / (tweenTo.percent - tweenFrom.percent),\n tweenEasing = tweenTo.easing || linearEasing;\n for (; i < pattern.length; i++) {\n var startValue = tweenFrom[i];\n if (startValue == null) {\n currentValue += pattern[i];\n } else {\n var endValue = tweenTo[i];\n if (startValue === endValue) {\n currentValue += startValue;\n } else {\n // All easings must deal with numbers except for our internal ones.\n var value = tweenEasing(tweenPercent, startValue, endValue, _property);\n currentValue += pattern[i] === true ? Math.round(value) : value;\n }\n }\n }\n result[_property] = currentValue;\n }\n }\n if (singleResult && count === 1) {\n for (var _property2 in result) {\n if (result.hasOwnProperty(_property2)) {\n return result[_property2];\n }\n }\n }\n return result;\n}\nregisterAction([\"tween\", tweenAction], true);\n\n// Project\n/**\r\n * Converting from hex as it makes for a smaller file.\r\n */\nvar colorValues = {\n aliceblue: 0xF0F8FF,\n antiquewhite: 0xFAEBD7,\n aqua: 0x00FFFF,\n aquamarine: 0x7FFFD4,\n azure: 0xF0FFFF,\n beige: 0xF5F5DC,\n bisque: 0xFFE4C4,\n black: 0x000000,\n blanchedalmond: 0xFFEBCD,\n blue: 0x0000FF,\n blueviolet: 0x8A2BE2,\n brown: 0xA52A2A,\n burlywood: 0xDEB887,\n cadetblue: 0x5F9EA0,\n chartreuse: 0x7FFF00,\n chocolate: 0xD2691E,\n coral: 0xFF7F50,\n cornflowerblue: 0x6495ED,\n cornsilk: 0xFFF8DC,\n crimson: 0xDC143C,\n cyan: 0x00FFFF,\n darkblue: 0x00008B,\n darkcyan: 0x008B8B,\n darkgoldenrod: 0xB8860B,\n darkgray: 0xA9A9A9,\n darkgrey: 0xA9A9A9,\n darkgreen: 0x006400,\n darkkhaki: 0xBDB76B,\n darkmagenta: 0x8B008B,\n darkolivegreen: 0x556B2F,\n darkorange: 0xFF8C00,\n darkorchid: 0x9932CC,\n darkred: 0x8B0000,\n darksalmon: 0xE9967A,\n darkseagreen: 0x8FBC8F,\n darkslateblue: 0x483D8B,\n darkslategray: 0x2F4F4F,\n darkslategrey: 0x2F4F4F,\n darkturquoise: 0x00CED1,\n darkviolet: 0x9400D3,\n deeppink: 0xFF1493,\n deepskyblue: 0x00BFFF,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1E90FF,\n firebrick: 0xB22222,\n floralwhite: 0xFFFAF0,\n forestgreen: 0x228B22,\n fuchsia: 0xFF00FF,\n gainsboro: 0xDCDCDC,\n ghostwhite: 0xF8F8FF,\n gold: 0xFFD700,\n goldenrod: 0xDAA520,\n gray: 0x808080,\n grey: 0x808080,\n green: 0x008000,\n greenyellow: 0xADFF2F,\n honeydew: 0xF0FFF0,\n hotpink: 0xFF69B4,\n indianred: 0xCD5C5C,\n indigo: 0x4B0082,\n ivory: 0xFFFFF0,\n khaki: 0xF0E68C,\n lavender: 0xE6E6FA,\n lavenderblush: 0xFFF0F5,\n lawngreen: 0x7CFC00,\n lemonchiffon: 0xFFFACD,\n lightblue: 0xADD8E6,\n lightcoral: 0xF08080,\n lightcyan: 0xE0FFFF,\n lightgoldenrodyellow: 0xFAFAD2,\n lightgray: 0xD3D3D3,\n lightgrey: 0xD3D3D3,\n lightgreen: 0x90EE90,\n lightpink: 0xFFB6C1,\n lightsalmon: 0xFFA07A,\n lightseagreen: 0x20B2AA,\n lightskyblue: 0x87CEFA,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xB0C4DE,\n lightyellow: 0xFFFFE0,\n lime: 0x00FF00,\n limegreen: 0x32CD32,\n linen: 0xFAF0E6,\n magenta: 0xFF00FF,\n maroon: 0x800000,\n mediumaquamarine: 0x66CDAA,\n mediumblue: 0x0000CD,\n mediumorchid: 0xBA55D3,\n mediumpurple: 0x9370DB,\n mediumseagreen: 0x3CB371,\n mediumslateblue: 0x7B68EE,\n mediumspringgreen: 0x00FA9A,\n mediumturquoise: 0x48D1CC,\n mediumvioletred: 0xC71585,\n midnightblue: 0x191970,\n mintcream: 0xF5FFFA,\n mistyrose: 0xFFE4E1,\n moccasin: 0xFFE4B5,\n navajowhite: 0xFFDEAD,\n navy: 0x000080,\n oldlace: 0xFDF5E6,\n olive: 0x808000,\n olivedrab: 0x6B8E23,\n orange: 0xFFA500,\n orangered: 0xFF4500,\n orchid: 0xDA70D6,\n palegoldenrod: 0xEEE8AA,\n palegreen: 0x98FB98,\n paleturquoise: 0xAFEEEE,\n palevioletred: 0xDB7093,\n papayawhip: 0xFFEFD5,\n peachpuff: 0xFFDAB9,\n peru: 0xCD853F,\n pink: 0xFFC0CB,\n plum: 0xDDA0DD,\n powderblue: 0xB0E0E6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xFF0000,\n rosybrown: 0xBC8F8F,\n royalblue: 0x4169E1,\n saddlebrown: 0x8B4513,\n salmon: 0xFA8072,\n sandybrown: 0xF4A460,\n seagreen: 0x2E8B57,\n seashell: 0xFFF5EE,\n sienna: 0xA0522D,\n silver: 0xC0C0C0,\n skyblue: 0x87CEEB,\n slateblue: 0x6A5ACD,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xFFFAFA,\n springgreen: 0x00FF7F,\n steelblue: 0x4682B4,\n tan: 0xD2B48C,\n teal: 0x008080,\n thistle: 0xD8BFD8,\n tomato: 0xFF6347,\n turquoise: 0x40E0D0,\n violet: 0xEE82EE,\n wheat: 0xF5DEB3,\n white: 0xFFFFFF,\n whitesmoke: 0xF5F5F5,\n yellow: 0xFFFF00,\n yellowgreen: 0x9ACD32\n};\nfor (var name in colorValues) {\n if (colorValues.hasOwnProperty(name)) {\n var color = colorValues[name];\n ColorNames[name] = Math.floor(color / 65536) + \",\" + Math.floor(color / 256 % 256) + \",\" + color % 256;\n }\n}\n\n// Project\nfunction registerBackIn(name, amount) {\n registerEasing([name, function (percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n return Math.pow(percentComplete, 2) * ((amount + 1) * percentComplete - amount) * (endValue - startValue);\n }]);\n}\nfunction registerBackOut(name, amount) {\n registerEasing([name, function (percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n return (Math.pow(--percentComplete, 2) * ((amount + 1) * percentComplete + amount) + 1) * (endValue - startValue);\n }]);\n}\nfunction registerBackInOut(name, amount) {\n amount *= 1.525;\n registerEasing([name, function (percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n percentComplete *= 2;\n return (percentComplete < 1 ? Math.pow(percentComplete, 2) * ((amount + 1) * percentComplete - amount) : Math.pow(percentComplete - 2, 2) * ((amount + 1) * (percentComplete - 2) + amount) + 2) * 0.5 * (endValue - startValue);\n }]);\n}\nregisterBackIn(\"easeInBack\", 1.7);\nregisterBackOut(\"easeOutBack\", 1.7);\nregisterBackInOut(\"easeInOutBack\", 1.7);\n// TODO: Expose these as actions to register custom easings?\n\n// Project\nfunction easeOutBouncePercent(percentComplete) {\n if (percentComplete < 1 / 2.75) {\n return 7.5625 * percentComplete * percentComplete;\n }\n if (percentComplete < 2 / 2.75) {\n return 7.5625 * (percentComplete -= 1.5 / 2.75) * percentComplete + 0.75;\n }\n if (percentComplete < 2.5 / 2.75) {\n return 7.5625 * (percentComplete -= 2.25 / 2.75) * percentComplete + 0.9375;\n }\n return 7.5625 * (percentComplete -= 2.625 / 2.75) * percentComplete + 0.984375;\n}\nfunction easeInBouncePercent(percentComplete) {\n return 1 - easeOutBouncePercent(1 - percentComplete);\n}\nfunction easeInBounce(percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n return easeInBouncePercent(percentComplete) * (endValue - startValue);\n}\nfunction easeOutBounce(percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n return easeOutBouncePercent(percentComplete) * (endValue - startValue);\n}\nfunction easeInOutBounce(percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n return (percentComplete < 0.5 ? easeInBouncePercent(percentComplete * 2) * 0.5 : easeOutBouncePercent(percentComplete * 2 - 1) * 0.5 + 0.5) * (endValue - startValue);\n}\nregisterEasing([\"easeInBounce\", easeInBounce]);\nregisterEasing([\"easeOutBounce\", easeOutBounce]);\nregisterEasing([\"easeInOutBounce\", easeInOutBounce]);\n\n// Project\n// Constants\nvar PI2 = Math.PI * 2;\nfunction registerElasticIn(name, amplitude, period) {\n registerEasing([name, function (percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n return -(amplitude * Math.pow(2, 10 * (percentComplete -= 1)) * Math.sin((percentComplete - period / PI2 * Math.asin(1 / amplitude)) * PI2 / period)) * (endValue - startValue);\n }]);\n}\nfunction registerElasticOut(name, amplitude, period) {\n registerEasing([name, function (percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n return (amplitude * Math.pow(2, -10 * percentComplete) * Math.sin((percentComplete - period / PI2 * Math.asin(1 / amplitude)) * PI2 / period) + 1) * (endValue - startValue);\n }]);\n}\nfunction registerElasticInOut(name, amplitude, period) {\n registerEasing([name, function (percentComplete, startValue, endValue) {\n if (percentComplete === 0) {\n return startValue;\n }\n if (percentComplete === 1) {\n return endValue;\n }\n var s = period / PI2 * Math.asin(1 / amplitude);\n percentComplete = percentComplete * 2 - 1;\n return (percentComplete < 0 ? -0.5 * (amplitude * Math.pow(2, 10 * percentComplete) * Math.sin((percentComplete - s) * PI2 / period)) : amplitude * Math.pow(2, -10 * percentComplete) * Math.sin((percentComplete - s) * PI2 / period) * 0.5 + 1) * (endValue - startValue);\n }]);\n}\nregisterElasticIn(\"easeInElastic\", 1, 0.3);\nregisterElasticOut(\"easeOutElastic\", 1, 0.3);\nregisterElasticInOut(\"easeInOutElastic\", 1, 0.3 * 1.5);\n// TODO: Expose these as actions to register custom easings?\n\n// Project\n/**\r\n * Easing function that sets to the specified value immediately after the\r\n * animation starts.\r\n */\nfunction atStart(percentComplete, startValue, endValue) {\n return percentComplete === 0 ? startValue : endValue;\n}\n/**\r\n * Easing function that sets to the specified value while the animation is\r\n * running.\r\n */\nfunction during(percentComplete, startValue, endValue) {\n return percentComplete === 0 || percentComplete === 1 ? startValue : endValue;\n}\n/**\r\n * Easing function that sets to the specified value when the animation ends.\r\n */\nfunction atEnd(percentComplete, startValue, endValue) {\n return percentComplete === 1 ? endValue : startValue;\n}\nregisterEasing([\"at-start\", atStart]);\nregisterEasing([\"during\", during]);\nregisterEasing([\"at-end\", atEnd]);\n\n// Project\n/**\r\n * Get/set the inner/outer dimension.\r\n */\nfunction getDimension(name, wantInner) {\n return function (element, propertyValue) {\n if (propertyValue === undefined) {\n return augmentDimension(element, name, wantInner) + \"px\";\n }\n setPropertyValue(element, name, parseFloat(propertyValue) - augmentDimension(element, name, wantInner) + \"px\");\n };\n}\nregisterNormalization([\"Element\", \"innerWidth\", getDimension(\"width\", true)]);\nregisterNormalization([\"Element\", \"innerHeight\", getDimension(\"height\", true)]);\nregisterNormalization([\"Element\", \"outerWidth\", getDimension(\"width\", false)]);\nregisterNormalization([\"Element\", \"outerHeight\", getDimension(\"height\", false)]);\n\n// Project\n// Constants\nvar inlineRx = /^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|let|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i,\n listItemRx = /^(li)$/i,\n tableRowRx = /^(tr)$/i,\n tableRx = /^(table)$/i,\n tableRowGroupRx = /^(tbody)$/i;\nfunction display(element, propertyValue) {\n var style = element.style;\n if (propertyValue === undefined) {\n return computePropertyValue(element, \"display\");\n }\n if (propertyValue === \"auto\") {\n var nodeName = element && element.nodeName,\n data = Data(element);\n if (inlineRx.test(nodeName)) {\n propertyValue = \"inline\";\n } else if (listItemRx.test(nodeName)) {\n propertyValue = \"list-item\";\n } else if (tableRowRx.test(nodeName)) {\n propertyValue = \"table-row\";\n } else if (tableRx.test(nodeName)) {\n propertyValue = \"table\";\n } else if (tableRowGroupRx.test(nodeName)) {\n propertyValue = \"table-row-group\";\n } else {\n // Default to \"block\" when no match is found.\n propertyValue = \"block\";\n }\n // IMPORTANT: We need to do this as getPropertyValue bypasses the\n // Normalisation when it exists in the cache.\n data.cache[\"display\"] = propertyValue;\n }\n style.display = propertyValue;\n}\nregisterNormalization([\"Element\", \"display\", display]);\n\n// Project\nfunction clientWidth(element, propertyValue) {\n if (propertyValue == null) {\n return element.clientWidth + \"px\";\n }\n}\nfunction scrollWidth(element, propertyValue) {\n if (propertyValue == null) {\n return element.scrollWidth + \"px\";\n }\n}\nfunction clientHeight(element, propertyValue) {\n if (propertyValue == null) {\n return element.clientHeight + \"px\";\n }\n}\nfunction scrollHeight(element, propertyValue) {\n if (propertyValue == null) {\n return element.scrollHeight + \"px\";\n }\n}\nfunction scroll(direction, end) {\n return function (element, propertyValue) {\n if (propertyValue == null) {\n // Make sure we have these values cached.\n getPropertyValue(element, \"client\" + direction, null, true);\n getPropertyValue(element, \"scroll\" + direction, null, true);\n return element[\"scroll\" + end] + \"px\";\n }\n var value = parseFloat(propertyValue),\n unit = propertyValue.replace(String(value), \"\");\n switch (unit) {\n case \"\":\n case \"px\":\n element[\"scroll\" + end] = value;\n break;\n case \"%\":\n var client = parseFloat(getPropertyValue(element, \"client\" + direction)),\n scrollValue = parseFloat(getPropertyValue(element, \"scroll\" + direction));\n element[\"scroll\" + end] = Math.max(0, scrollValue - client) * value / 100;\n break;\n }\n };\n}\nregisterNormalization([\"HTMLElement\", \"scroll\", scroll(\"Height\", \"Top\"), false]);\nregisterNormalization([\"HTMLElement\", \"scrollTop\", scroll(\"Height\", \"Top\"), false]);\nregisterNormalization([\"HTMLElement\", \"scrollLeft\", scroll(\"Width\", \"Left\"), false]);\nregisterNormalization([\"HTMLElement\", \"scrollWidth\", scrollWidth]);\nregisterNormalization([\"HTMLElement\", \"clientWidth\", clientWidth]);\nregisterNormalization([\"HTMLElement\", \"scrollHeight\", scrollHeight]);\nregisterNormalization([\"HTMLElement\", \"clientHeight\", clientHeight]);\n\n// Project\n/**\r\n * An RegExp pattern for the following list of css words using\r\n * http://kemio.com.ar/tools/lst-trie-re.php to generate:\r\n *\r\n * blockSize\r\n * borderBottomLeftRadius\r\n * borderBottomRightRadius\r\n * borderBottomWidth\r\n * borderImageOutset\r\n * borderImageWidth\r\n * borderLeftWidth\r\n * borderRadius\r\n * borderRightWidth\r\n * borderSpacing\r\n * borderTopLeftRadius\r\n * borderTopRightRadius\r\n * borderTopWidth\r\n * borderWidth\r\n * bottom\r\n * columnGap\r\n * columnRuleWidth\r\n * columnWidth\r\n * flexBasis\r\n * fontSize\r\n * gridColumnGap\r\n * gridGap\r\n * gridRowGap\r\n * height\r\n * inlineSize\r\n * left\r\n * letterSpacing\r\n * margin\r\n * marginBottom\r\n * marginLeft\r\n * marginRight\r\n * marginTop\r\n * maxBlockSize\r\n * maxHeight\r\n * maxInlineSize\r\n * maxWidth\r\n * minBlockSize\r\n * minHeight\r\n * minInlineSize\r\n * minWidth\r\n * objectPosition\r\n * outlineOffset\r\n * outlineWidth\r\n * padding\r\n * paddingBottom\r\n * paddingLeft\r\n * paddingRight\r\n * paddingTop\r\n * perspective\r\n * right\r\n * shapeMargin\r\n * strokeDashoffset\r\n * strokeWidth\r\n * textIndent\r\n * top\r\n * transformOrigin\r\n * width\r\n * wordSpacing\r\n */\n// tslint:disable-next-line:max-line-length\nvar rxAddPx = /^(b(lockSize|o(rder(Bottom(LeftRadius|RightRadius|Width)|Image(Outset|Width)|LeftWidth|R(adius|ightWidth)|Spacing|Top(LeftRadius|RightRadius|Width)|Width)|ttom))|column(Gap|RuleWidth|Width)|f(lexBasis|ontSize)|grid(ColumnGap|Gap|RowGap)|height|inlineSize|le(ft|tterSpacing)|m(a(rgin(Bottom|Left|Right|Top)|x(BlockSize|Height|InlineSize|Width))|in(BlockSize|Height|InlineSize|Width))|o(bjectPosition|utline(Offset|Width))|p(adding(Bottom|Left|Right|Top)|erspective)|right|s(hapeMargin|troke(Dashoffset|Width))|t(extIndent|op|ransformOrigin)|w(idth|ordSpacing))$/;\n/**\r\n * Return a Normalisation that can be used to set / get a prefixed style\r\n * property.\r\n */\nfunction getSetPrefixed(propertyName, unprefixed) {\n return function (element, propertyValue) {\n if (propertyValue === undefined) {\n return computePropertyValue(element, propertyName) || computePropertyValue(element, unprefixed);\n }\n element.style[propertyName] = element.style[unprefixed] = propertyValue;\n };\n}\n/**\r\n * Return a Normalisation that can be used to set / get a style property.\r\n */\nfunction getSetStyle(propertyName) {\n return function (element, propertyValue) {\n if (propertyValue === undefined) {\n return computePropertyValue(element, propertyName);\n }\n element.style[propertyName] = propertyValue;\n };\n}\n/**\r\n * Vendor prefixes. Chrome / Safari, Firefox, IE / Edge, Opera.\r\n */\nvar rxVendors = /^(webkit|moz|ms|o)[A-Z]/,\n prefixElement = State.prefixElement;\nif (prefixElement) {\n for (var propertyName in prefixElement.style) {\n if (rxVendors.test(propertyName)) {\n var unprefixed = propertyName.replace(/^[a-z]+([A-Z])/, function ($, letter) {\n return letter.toLowerCase();\n });\n {\n var addUnit = rxAddPx.test(unprefixed) ? \"px\" : undefined;\n registerNormalization([\"Element\", unprefixed, getSetPrefixed(propertyName, unprefixed), addUnit]);\n }\n } else if (!hasNormalization([\"Element\", propertyName])) {\n var _addUnit = rxAddPx.test(propertyName) ? \"px\" : undefined;\n registerNormalization([\"Element\", propertyName, getSetStyle(propertyName), _addUnit]);\n }\n }\n}\n\n// Project\n/**\r\n * Get/set an attribute.\r\n */\nfunction getAttribute(name) {\n return function (element, propertyValue) {\n if (propertyValue === undefined) {\n return element.getAttribute(name);\n }\n element.setAttribute(name, propertyValue);\n };\n}\nvar base = document.createElement(\"div\"),\n rxSubtype = /^SVG(.*)Element$/,\n rxElement = /Element$/;\nObject.getOwnPropertyNames(window).forEach(function (property) {\n var subtype = rxSubtype.exec(property);\n if (subtype && subtype[1] !== \"SVG\") {\n // Don't do SVGSVGElement.\n try {\n var element = subtype[1] ? document.createElementNS(\"http://www.w3.org/2000/svg\", (subtype[1] || \"svg\").toLowerCase()) : document.createElement(\"svg\");\n // tslint:disable-next-line:forin\n for (var attribute in element) {\n // Although this isn't a tween without prototypes, we do\n // want to get hold of all attributes and not just own ones.\n var value = element[attribute];\n if (isString(attribute) && !(attribute[0] === \"o\" && attribute[1] === \"n\") && attribute !== attribute.toUpperCase() && !rxElement.test(attribute) && !(attribute in base) && !isFunction(value)) {\n // TODO: Should this all be set on the generic SVGElement, it would save space and time, but not as powerful\n registerNormalization([property, attribute, getAttribute(attribute)]);\n }\n }\n } catch (e) {\n console.error(\"VelocityJS: Error when trying to identify SVG attributes on \" + property + \".\", e);\n }\n }\n});\n\n// Project\n/**\r\n * Get/set the width or height.\r\n */\nfunction getDimension$1(name) {\n return function (element, propertyValue) {\n if (propertyValue === undefined) {\n // Firefox throws an error if .getBBox() is called on an SVG that isn't attached to the DOM.\n try {\n return element.getBBox()[name] + \"px\";\n } catch (e) {\n return \"0px\";\n }\n }\n element.setAttribute(name, propertyValue);\n };\n}\nregisterNormalization([\"SVGElement\", \"width\", getDimension$1(\"width\")]);\nregisterNormalization([\"SVGElement\", \"height\", getDimension$1(\"height\")]);\n\n// Project\n/**\r\n * A fake normalization used to allow the \"tween\" property easy access.\r\n */\nfunction getSetTween(element, propertyValue) {\n if (propertyValue === undefined) {\n return \"\";\n }\n}\nregisterNormalization([\"Element\", \"tween\", getSetTween]);\n\n// Automatically generated\nvar VERSION = \"2.0.6\";\n\n// Project\nvar Velocity$$1 = Velocity$1;\n/**\r\n * These parts of Velocity absolutely must be included, even if they're unused!\r\n */\nvar VelocityStatic;\n(function (VelocityStatic) {\n /**\r\n * Actions cannot be replaced if they are internal (hasOwnProperty is false\r\n * but they still exist). Otherwise they can be replaced by users.\r\n *\r\n * All external method calls should be using actions rather than sub-calls\r\n * of Velocity itself.\r\n */\n VelocityStatic.Actions = Actions;\n /**\r\n * Our known easing functions.\r\n */\n VelocityStatic.Easings = Easings;\n /**\r\n * The currently registered sequences.\r\n */\n VelocityStatic.Sequences = SequencesObject;\n /**\r\n * Current internal state of Velocity.\r\n */\n VelocityStatic.State = State; // tslint:disable-line:no-shadowed-variable\n /**\r\n * Velocity option defaults, which can be overriden by the user.\r\n */\n VelocityStatic.defaults = defaults$1;\n /**\r\n * Used to patch any object to allow Velocity chaining. In order to chain an\r\n * object must either be treatable as an array - with a .length
\r\n * property, and each member a Node, or a Node directly.\r\n *\r\n * By default Velocity will try to patch window
,\r\n * jQuery
, Zepto
, and several classes that return\r\n * Nodes or lists of Nodes.\r\n */\n VelocityStatic.patch = patch;\n /**\r\n * Set to true, 1 or 2 (most verbose) to output debug info to console.\r\n */\n VelocityStatic.debug = false;\n /**\r\n * In mock mode, all animations are forced to complete immediately upon the\r\n * next rAF tick. If there are further animations queued then they will each\r\n * take one single frame in turn. Loops and repeats will be disabled while\r\n * mock = true
.\r\n */\n VelocityStatic.mock = false;\n /**\r\n * Save our version number somewhere visible.\r\n */\n VelocityStatic.version = VERSION;\n /**\r\n * Added as a fallback for \"import {Velocity} from 'velocity-animate';\".\r\n */\n VelocityStatic.Velocity = Velocity$1; // tslint:disable-line:no-shadowed-variable\n})(VelocityStatic || (VelocityStatic = {}));\n/* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */\nvar IE = function () {\n if (document.documentMode) {\n return document.documentMode;\n } else {\n for (var i = 7; i > 4; i--) {\n var div = document.createElement(\"div\");\n div.innerHTML = \"\";\n if (div.getElementsByTagName(\"span\").length) {\n div = null;\n return i;\n }\n }\n }\n return undefined;\n}();\n/******************\r\n Unsupported\r\n ******************/\nif (IE <= 8) {\n throw new Error(\"VelocityJS cannot run on Internet Explorer 8 or earlier\");\n}\n/******************\r\n Frameworks\r\n ******************/\nif (window) {\n /*\r\n * Both jQuery and Zepto allow their $.fn object to be extended to allow\r\n * wrapped elements to be subjected to plugin calls. If either framework is\r\n * loaded, register a \"velocity\" extension pointing to Velocity's core\r\n * animate() method. Velocity also registers itself onto a global container\r\n * (window.jQuery || window.Zepto || window) so that certain features are\r\n * accessible beyond just a per-element scope. Accordingly, Velocity can\r\n * both act on wrapped DOM elements and stand alone for targeting raw DOM\r\n * elements.\r\n */\n var jQuery = window.jQuery,\n Zepto = window.Zepto;\n patch(window, true);\n patch(Element && Element.prototype);\n patch(NodeList && NodeList.prototype);\n patch(HTMLCollection && HTMLCollection.prototype);\n patch(jQuery, true);\n patch(jQuery && jQuery.fn);\n patch(Zepto, true);\n patch(Zepto && Zepto.fn);\n}\n// Make sure that the values within Velocity are read-only and upatchable.\n\nvar _loop = function _loop(property) {\n if (VelocityStatic.hasOwnProperty(property)) {\n switch (typeof property === \"undefined\" ? \"undefined\" : _typeof(property)) {\n case \"number\":\n case \"boolean\":\n defineProperty$1(Velocity$$1, property, {\n get: function get$$1() {\n return VelocityStatic[property];\n },\n set: function set$$1(value) {\n VelocityStatic[property] = value;\n }\n }, true);\n break;\n default:\n defineProperty$1(Velocity$$1, property, VelocityStatic[property], true);\n break;\n }\n }\n};\n\nfor (var property in VelocityStatic) {\n _loop(property);\n}\nObject.freeze(Velocity$$1);\n\n// Project\nvar rxPercents = /(\\d*\\.\\d+|\\d+\\.?|from|to)/g;\nfunction expandSequence(animation, sequence) {\n var tweens = animation.tweens = Object.create(null),\n element = animation.element;\n for (var propertyName in sequence.tweens) {\n if (sequence.tweens.hasOwnProperty(propertyName)) {\n var fn = getNormalization(element, propertyName);\n if (!fn && propertyName !== \"tween\") {\n if (Velocity$$1.debug) {\n console.log(\"Skipping [\" + propertyName + \"] due to a lack of browser support.\");\n }\n continue;\n }\n tweens[propertyName] = {\n fn: fn,\n sequence: sequence.tweens[propertyName]\n };\n }\n }\n}\n/**\r\n * Used to register a sequence. This should never be called by users\r\n * directly, instead it should be called via an action:
\r\n * Velocity(\"registerSequence\", \"\"name\", VelocitySequence);
\r\n */\nfunction registerSequence(args) {\n if (isPlainObject(args[0])) {\n for (var name in args[0]) {\n if (args[0].hasOwnProperty(name)) {\n registerSequence([name, args[0][name]]);\n }\n }\n } else if (isString(args[0])) {\n var _name = args[0],\n sequence = args[1];\n if (!isString(_name)) {\n console.warn(\"VelocityJS: Trying to set 'registerSequence' name to an invalid value:\", _name);\n } else if (!isPlainObject(sequence)) {\n console.warn(\"VelocityJS: Trying to set 'registerSequence' sequence to an invalid value:\", _name, sequence);\n } else {\n if (SequencesObject[_name]) {\n console.warn(\"VelocityJS: Replacing named sequence:\", _name);\n }\n var percents = {},\n steps = new Array(100),\n properties = [],\n sequenceList = SequencesObject[_name] = {},\n duration = validateDuration(sequence.duration);\n sequenceList.tweens = {};\n if (isNumber(duration)) {\n sequenceList.duration = duration;\n }\n for (var part in sequence) {\n if (sequence.hasOwnProperty(part)) {\n var keys = String(part).match(rxPercents);\n if (keys) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n\n var percent = key === \"from\" ? 0 : key === \"to\" ? 100 : parseFloat(key);\n if (percent < 0 || percent > 100) {\n console.warn(\"VelocityJS: Trying to use an invalid value as a percentage (0 <= n <= 100):\", _name, percent);\n } else if (isNaN(percent)) {\n console.warn(\"VelocityJS: Trying to use an invalid number as a percentage:\", _name, part, key);\n } else {\n if (!percents[String(percent)]) {\n percents[String(percent)] = [];\n }\n percents[String(percent)].push(part);\n for (var property in sequence[part]) {\n if (!properties.includes(property)) {\n properties.push(property);\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }\n }\n var orderedPercents = Object.keys(percents).sort(function (a, b) {\n var a1 = parseFloat(a),\n b1 = parseFloat(b);\n return a1 > b1 ? 1 : a1 < b1 ? -1 : 0;\n });\n orderedPercents.forEach(function (key) {\n steps.push.apply(percents[key]);\n });\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = properties[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _property = _step2.value;\n\n var parts = [],\n propertyName = camelCase(_property);\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = orderedPercents[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var _key = _step3.value;\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = percents[_key][Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var _value = _step6.value;\n\n var stepProperties = sequence[_value];\n if (stepProperties[propertyName]) {\n parts.push(isString(stepProperties[propertyName]) ? stepProperties[propertyName] : stepProperties[propertyName][0]);\n }\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n if (parts.length) {\n var realSequence = findPattern(parts, propertyName);\n var index = 0;\n if (realSequence) {\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = orderedPercents[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var _key2 = _step4.value;\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = percents[_key2][Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var value = _step5.value;\n\n var originalProperty = sequence[value][propertyName];\n if (originalProperty) {\n if (Array.isArray(originalProperty) && originalProperty.length > 1 && (isString(originalProperty[1]) || Array.isArray(originalProperty[1]))) {\n realSequence[index].easing = validateEasing(originalProperty[1], sequenceList.duration || DEFAULT_DURATION);\n }\n realSequence[index++].percent = parseFloat(_key2) / 100;\n }\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n sequenceList.tweens[propertyName] = realSequence;\n }\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n }\n}\nregisterAction([\"registerSequence\", registerSequence], true);\n\n// Project\nvar globalPromise = void 0;\ntry {\n globalPromise = Promise;\n} catch ( /**/_a) {/**/}\nvar noPromiseOption = \", if that is deliberate then pass `promiseRejectEmpty:false` as an option\";\n/**\r\n * Patch a VelocityResult with a Promise.\r\n */\nfunction patchPromise(promiseObject, result) {\n defineProperty$1(result, \"promise\", promiseObject);\n defineProperty$1(result, \"then\", promiseObject.then.bind(promiseObject));\n defineProperty$1(result, \"catch\", promiseObject.catch.bind(promiseObject));\n if (promiseObject.finally) {\n // Semi-standard\n defineProperty$1(result, \"finally\", promiseObject.finally.bind(promiseObject));\n }\n}\n/* tslint:enable:max-line-length */\nfunction Velocity$1() {\n var\n /**\r\n * A shortcut to the default options.\r\n */\n defaults$$1 = defaults$1,\n\n /**\r\n * Cache of the first argument - this is used often enough to be saved.\r\n */\n args0 = arguments.length <= 0 ? undefined : arguments[0],\n\n /**\r\n * To allow for expressive CoffeeScript code, Velocity supports an\r\n * alternative syntax in which \"elements\" (or \"e\"), \"properties\" (or\r\n * \"p\"), and \"options\" (or \"o\") objects are defined on a container\r\n * object that's passed in as Velocity's sole argument.\r\n *\r\n * Note: Some browsers automatically populate arguments with a\r\n * \"properties\" object. We detect it by checking for its default\r\n * \"names\" property.\r\n */\n // TODO: Confirm which browsers - if <=IE8 the we can drop completely\n syntacticSugar = isPlainObject(args0) && (args0.p || isPlainObject(args0.properties) && !args0.properties.names || isString(args0.properties));\n var\n /**\r\n * When Velocity is called via the utility function (Velocity()),\r\n * elements are explicitly passed in as the first parameter. Thus,\r\n * argument positioning varies.\r\n */\n argumentIndex = 0,\n\n /**\r\n * The list of elements, extended with Promise and Velocity.\r\n */\n elements = void 0,\n\n /**\r\n * The properties being animated. This can be a string, in which case it\r\n * is either a function for these elements, or it is a \"named\" animation\r\n * sequence to use instead. Named sequences start with either \"callout.\"\r\n * or \"transition.\". When used as a callout the values will be reset\r\n * after finishing. When used as a transtition then there is no special\r\n * handling after finishing.\r\n */\n propertiesMap = void 0,\n\n /**\r\n * Options supplied, this will be mapped and validated into\r\n * options
.\r\n */\n optionsMap = void 0,\n\n /**\r\n * If called via a chain then this contains the last calls\r\n * animations. If this does not have a value then any access to the\r\n * element's animations needs to be to the currently-running ones.\r\n */\n animations = void 0,\n\n /**\r\n * The promise that is returned.\r\n */\n promise = void 0,\n\n // Used when the animation is finished\n resolver = void 0,\n\n // Used when there was an issue with one or more of the Velocity arguments\n rejecter = void 0;\n //console.log(`Velocity`, args)\n // First get the elements, and the animations connected to the last call if\n // this is chained.\n // TODO: Clean this up a bit\n // TODO: Throw error if the chain is called with elements as the first argument. isVelocityResult(this) && ( (isNode(arg0) || isWrapped(arg0)) && arg0 == this)\n if (isNode(this)) {\n // This is from a chain such as document.getElementById(\"\").velocity(...)\n elements = [this];\n } else if (isWrapped(this)) {\n // This might be a chain from something else, but if chained from a\n // previous Velocity() call then grab the animations it's related to.\n elements = cloneArray(this);\n if (isVelocityResult(this)) {\n animations = this.velocity.animations;\n }\n } else if (syntacticSugar) {\n elements = cloneArray(args0.elements || args0.e);\n argumentIndex++;\n } else if (isNode(args0)) {\n elements = cloneArray([args0]);\n argumentIndex++;\n } else if (isWrapped(args0)) {\n elements = cloneArray(args0);\n argumentIndex++;\n }\n // Allow elements to be chained.\n if (elements) {\n defineProperty$1(elements, \"velocity\", Velocity$1.bind(elements));\n if (animations) {\n defineProperty$1(elements.velocity, \"animations\", animations);\n }\n }\n // Next get the propertiesMap and options.\n if (syntacticSugar) {\n propertiesMap = getValue(args0.properties, args0.p);\n } else {\n var _ref;\n\n // TODO: Should be possible to call Velocity(\"pauseAll\") - currently not possible\n propertiesMap = (_ref = argumentIndex++, arguments.length <= _ref ? undefined : arguments[_ref]);\n }\n // Get any options map passed in as arguments first, expand any direct\n // options if possible.\n var isReverse = propertiesMap === \"reverse\",\n isAction = !isReverse && isString(propertiesMap),\n maybeSequence = isAction && SequencesObject[propertiesMap],\n opts = syntacticSugar ? getValue(args0.options, args0.o) : arguments.length <= argumentIndex ? undefined : arguments[argumentIndex];\n if (isPlainObject(opts)) {\n optionsMap = opts;\n }\n // Create the promise if supported and wanted.\n if (globalPromise && getValue(optionsMap && optionsMap.promise, defaults$$1.promise)) {\n promise = new globalPromise(function (resolve, reject) {\n rejecter = reject;\n // IMPORTANT:\n // If a resolver tries to run on a Promise then it will wait until\n // that Promise resolves - but in this case we're running on our own\n // Promise, so need to make sure it's not seen as one. Removing\n // these values for the duration of the resolve.\n // Due to being an async call, they should be back to \"normal\"\n // before the .then()
function gets called.\n resolver = function resolver(result) {\n if (isVelocityResult(result) && result.promise) {\n delete result.then;\n delete result.catch;\n delete result.finally;\n resolve(result);\n patchPromise(result.promise, result);\n } else {\n resolve(result);\n }\n };\n });\n if (elements) {\n patchPromise(promise, elements);\n }\n }\n if (promise) {\n var optionPromiseRejectEmpty = optionsMap && optionsMap.promiseRejectEmpty,\n promiseRejectEmpty = getValue(optionPromiseRejectEmpty, defaults$$1.promiseRejectEmpty);\n if (!elements && !isAction) {\n if (promiseRejectEmpty) {\n rejecter(\"Velocity: No elements supplied\" + (isBoolean(optionPromiseRejectEmpty) ? \"\" : noPromiseOption) + \". Aborting.\");\n } else {\n resolver();\n }\n } else if (!propertiesMap) {\n if (promiseRejectEmpty) {\n rejecter(\"Velocity: No properties supplied\" + (isBoolean(optionPromiseRejectEmpty) ? \"\" : noPromiseOption) + \". Aborting.\");\n } else {\n resolver();\n }\n }\n }\n if (!elements && !isAction || !propertiesMap) {\n return promise;\n }\n // NOTE: Can't use isAction here due to type inference - there are callbacks\n // between so the type isn't considered safe.\n if (isAction) {\n var actionArgs = [],\n promiseHandler = promise && {\n _promise: promise,\n _resolver: resolver,\n _rejecter: rejecter\n };\n while (argumentIndex < arguments.length) {\n var _ref2;\n\n actionArgs.push((_ref2 = argumentIndex++, arguments.length <= _ref2 ? undefined : arguments[_ref2]));\n }\n // Velocity's behavior is categorized into \"actions\". If a string is\n // passed in instead of a propertiesMap then that will call a function\n // to do something special to the animation linked.\n // There is one special case - \"reverse\" - which is handled differently,\n // by being stored on the animation and then expanded when the animation\n // starts.\n var action = propertiesMap.replace(/\\..*$/, \"\"),\n callback = Actions[action];\n if (callback) {\n var result = callback(actionArgs, elements, promiseHandler, propertiesMap);\n if (result !== undefined) {\n return result;\n }\n return elements || promise;\n } else if (!maybeSequence) {\n console.error(\"VelocityJS: First argument (\" + propertiesMap + \") was not a property map, a known action, or a registered redirect. Aborting.\");\n return;\n }\n }\n var hasValidDuration = void 0;\n if (isPlainObject(propertiesMap) || isReverse || maybeSequence) {\n /**\r\n * The options for this set of animations.\r\n */\n var options = {};\n var isSync = defaults$$1.sync;\n // Private options first - set as non-enumerable, and starting with an\n // underscore so we can filter them out.\n if (promise) {\n defineProperty$1(options, \"_promise\", promise);\n defineProperty$1(options, \"_rejecter\", rejecter);\n defineProperty$1(options, \"_resolver\", resolver);\n }\n defineProperty$1(options, \"_ready\", 0);\n defineProperty$1(options, \"_started\", 0);\n defineProperty$1(options, \"_completed\", 0);\n defineProperty$1(options, \"_total\", 0);\n // Now check the optionsMap\n if (isPlainObject(optionsMap)) {\n var validDuration = validateDuration(optionsMap.duration);\n hasValidDuration = validDuration !== undefined;\n options.duration = getValue(validDuration, defaults$$1.duration);\n options.delay = getValue(validateDelay(optionsMap.delay), defaults$$1.delay);\n // Need the extra fallback here in case it supplies an invalid\n // easing that we need to overrride with the default.\n options.easing = validateEasing(getValue(optionsMap.easing, defaults$$1.easing), options.duration) || validateEasing(defaults$$1.easing, options.duration);\n options.loop = getValue(validateLoop(optionsMap.loop), defaults$$1.loop);\n options.repeat = options.repeatAgain = getValue(validateRepeat(optionsMap.repeat), defaults$$1.repeat);\n if (optionsMap.speed != null) {\n options.speed = getValue(validateSpeed(optionsMap.speed), 1);\n }\n if (isBoolean(optionsMap.promise)) {\n options.promise = optionsMap.promise;\n }\n options.queue = getValue(validateQueue(optionsMap.queue), defaults$$1.queue);\n if (optionsMap.mobileHA && !State.isGingerbread) {\n /* When set to true, and if this is a mobile device, mobileHA automatically enables hardware acceleration (via a null transform hack)\r\n on animating elements. HA is removed from the element at the completion of its animation. */\n /* Note: Android Gingerbread doesn't support HA. If a null transform hack (mobileHA) is in fact set, it will prevent other tranform subproperties from taking effect. */\n /* Note: You can read more about the use of mobileHA in Velocity's documentation: velocity-animate/#mobileHA. */\n options.mobileHA = true;\n }\n if (optionsMap.drag === true) {\n options.drag = true;\n }\n if (isNumber(optionsMap.stagger) || isFunction(optionsMap.stagger)) {\n options.stagger = optionsMap.stagger;\n }\n if (!isReverse) {\n if (optionsMap[\"display\"] != null) {\n propertiesMap.display = optionsMap[\"display\"];\n console.error(\"Deprecated \\\"options.display\\\" used, this is now a property:\", optionsMap[\"display\"]);\n }\n if (optionsMap[\"visibility\"] != null) {\n propertiesMap.visibility = optionsMap[\"visibility\"];\n console.error(\"Deprecated \\\"options.visibility\\\" used, this is now a property:\", optionsMap[\"visibility\"]);\n }\n }\n // TODO: Allow functional options for different options per element\n var optionsBegin = validateBegin(optionsMap.begin),\n optionsComplete = validateComplete(optionsMap.complete),\n optionsProgress = validateProgress(optionsMap.progress),\n optionsSync = validateSync(optionsMap.sync);\n if (optionsBegin != null) {\n options.begin = optionsBegin;\n }\n if (optionsComplete != null) {\n options.complete = optionsComplete;\n }\n if (optionsProgress != null) {\n options.progress = optionsProgress;\n }\n if (optionsSync != null) {\n isSync = optionsSync;\n }\n } else if (!syntacticSugar) {\n // Expand any direct options if possible.\n var offset = 0;\n options.duration = validateDuration(arguments.length <= argumentIndex ? undefined : arguments[argumentIndex], true);\n if (options.duration === undefined) {\n options.duration = defaults$$1.duration;\n } else {\n hasValidDuration = true;\n offset++;\n }\n if (!isFunction(arguments.length <= argumentIndex + offset ? undefined : arguments[argumentIndex + offset])) {\n // Despite coming before Complete, we can't pass a fn easing\n var easing = validateEasing(arguments.length <= argumentIndex + offset ? undefined : arguments[argumentIndex + offset], getValue(options && validateDuration(options.duration), defaults$$1.duration), true);\n if (easing !== undefined) {\n offset++;\n options.easing = easing;\n }\n }\n var complete = validateComplete(arguments.length <= argumentIndex + offset ? undefined : arguments[argumentIndex + offset], true);\n if (complete !== undefined) {\n options.complete = complete;\n }\n options.delay = defaults$$1.delay;\n options.loop = defaults$$1.loop;\n options.repeat = options.repeatAgain = defaults$$1.repeat;\n }\n if (isReverse && options.queue === false) {\n throw new Error(\"VelocityJS: Cannot reverse a queue:false animation.\");\n }\n if (!hasValidDuration && maybeSequence && maybeSequence.duration) {\n options.duration = maybeSequence.duration;\n }\n // When a set of elements is targeted by a Velocity call, the set is\n // broken up and each element has the current Velocity call individually\n // queued onto it. In this way, each element's existing queue is\n // respected; some elements may already be animating and accordingly\n // should not have this current Velocity call triggered immediately\n // unless the sync:true option is used.\n var rootAnimation = {\n options: options,\n elements: elements,\n _prev: undefined,\n _next: undefined,\n _flags: isSync ? 32 /* SYNC */ : 0,\n percentComplete: 0,\n ellapsedTime: 0,\n timeStart: 0\n };\n animations = [];\n for (var index = 0; index < elements.length; index++) {\n var element = elements[index];\n var flags = 0;\n if (isNode(element)) {\n // TODO: This needs to check for valid animation targets, not just Elements\n if (isReverse) {\n var lastAnimation = Data(element).lastAnimationList[options.queue];\n propertiesMap = lastAnimation && lastAnimation.tweens;\n if (!propertiesMap) {\n console.error(\"VelocityJS: Attempting to reverse an animation on an element with no previous animation:\", element);\n continue;\n }\n flags |= 64 /* REVERSE */ & ~(lastAnimation._flags & 64 /* REVERSE */); // tslint:disable-line:no-bitwise\n }\n var animation = Object.assign({}, rootAnimation, { element: element, _flags: rootAnimation._flags | flags });\n options._total++;\n animations.push(animation);\n if (options.stagger) {\n if (isFunction(options.stagger)) {\n var num = optionCallback(options.stagger, element, index, elements.length, elements, \"stagger\");\n if (isNumber(num)) {\n animation.delay = options.delay + num;\n }\n } else {\n animation.delay = options.delay + options.stagger * index;\n }\n }\n if (options.drag) {\n animation.duration = options.duration - options.duration * Math.max(1 - (index + 1) / elements.length, 0.75);\n }\n if (maybeSequence) {\n expandSequence(animation, maybeSequence);\n } else if (isReverse) {\n // In this case we're using the previous animation, so\n // it will be expanded correctly when that one runs.\n animation.tweens = propertiesMap;\n } else {\n animation.tweens = Object.create(null);\n expandProperties(animation, propertiesMap);\n }\n queue$1(element, animation, options.queue);\n }\n }\n if (State.isTicking === false) {\n // If the animation tick isn't running, start it. (Velocity shuts it\n // off when there are no active calls to process.)\n tick(false);\n }\n if (animations) {\n defineProperty$1(elements.velocity, \"animations\", animations);\n }\n }\n /***************\r\n Chaining\r\n ***************/\n /* Return the elements back to the call chain, with wrapped elements taking precedence in case Velocity was called via the $.fn. extension. */\n return elements || promise;\n}\n/**\r\n * Call an option callback in a try/catch block and report an error if needed.\r\n */\nfunction optionCallback(fn, element, index, length, elements, option) {\n try {\n return fn.call(element, index, length, elements, option);\n } catch (e) {\n console.error(\"VelocityJS: Exception when calling '\" + option + \"' callback:\", e);\n }\n}\n\n// Project\n/**\r\n * Used to patch any object to allow Velocity chaining. In order to chain an\r\n * object must either be treatable as an array - with a .length
\r\n * property, and each member a Node, or a Node directly.\r\n *\r\n * By default Velocity will try to patch window
,\r\n * jQuery
, Zepto
, and several classes that return\r\n * Nodes or lists of Nodes.\r\n */\nfunction patch(proto, global) {\n try {\n defineProperty$1(proto, (global ? \"V\" : \"v\") + \"elocity\", Velocity$1);\n } catch (e) {\n console.warn(\"VelocityJS: Error when trying to add prototype.\", e);\n }\n}\n\n// Project\nvar Velocity$2 = Velocity$1;\n/**\r\n * These parts of Velocity absolutely must be included, even if they're unused!\r\n */\nvar VelocityStatic$1;\n(function (VelocityStatic) {\n /**\r\n * Actions cannot be replaced if they are internal (hasOwnProperty is false\r\n * but they still exist). Otherwise they can be replaced by users.\r\n *\r\n * All external method calls should be using actions rather than sub-calls\r\n * of Velocity itself.\r\n */\n VelocityStatic.Actions = Actions;\n /**\r\n * Our known easing functions.\r\n */\n VelocityStatic.Easings = Easings;\n /**\r\n * The currently registered sequences.\r\n */\n VelocityStatic.Sequences = SequencesObject;\n /**\r\n * Current internal state of Velocity.\r\n */\n VelocityStatic.State = State; // tslint:disable-line:no-shadowed-variable\n /**\r\n * Velocity option defaults, which can be overriden by the user.\r\n */\n VelocityStatic.defaults = defaults$1;\n /**\r\n * Used to patch any object to allow Velocity chaining. In order to chain an\r\n * object must either be treatable as an array - with a .length
\r\n * property, and each member a Node, or a Node directly.\r\n *\r\n * By default Velocity will try to patch window
,\r\n * jQuery
, Zepto
, and several classes that return\r\n * Nodes or lists of Nodes.\r\n */\n VelocityStatic.patch = patch;\n /**\r\n * Set to true, 1 or 2 (most verbose) to output debug info to console.\r\n */\n VelocityStatic.debug = false;\n /**\r\n * In mock mode, all animations are forced to complete immediately upon the\r\n * next rAF tick. If there are further animations queued then they will each\r\n * take one single frame in turn. Loops and repeats will be disabled while\r\n * mock = true
.\r\n */\n VelocityStatic.mock = false;\n /**\r\n * Save our version number somewhere visible.\r\n */\n VelocityStatic.version = VERSION;\n /**\r\n * Added as a fallback for \"import {Velocity} from 'velocity-animate';\".\r\n */\n VelocityStatic.Velocity = Velocity$1; // tslint:disable-line:no-shadowed-variable\n})(VelocityStatic$1 || (VelocityStatic$1 = {}));\n/* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */\nvar IE$1 = function () {\n if (document.documentMode) {\n return document.documentMode;\n } else {\n for (var i = 7; i > 4; i--) {\n var div = document.createElement(\"div\");\n div.innerHTML = \"\";\n if (div.getElementsByTagName(\"span\").length) {\n div = null;\n return i;\n }\n }\n }\n return undefined;\n}();\n/******************\r\n Unsupported\r\n ******************/\nif (IE$1 <= 8) {\n throw new Error(\"VelocityJS cannot run on Internet Explorer 8 or earlier\");\n}\n/******************\r\n Frameworks\r\n ******************/\nif (window) {\n /*\r\n * Both jQuery and Zepto allow their $.fn object to be extended to allow\r\n * wrapped elements to be subjected to plugin calls. If either framework is\r\n * loaded, register a \"velocity\" extension pointing to Velocity's core\r\n * animate() method. Velocity also registers itself onto a global container\r\n * (window.jQuery || window.Zepto || window) so that certain features are\r\n * accessible beyond just a per-element scope. Accordingly, Velocity can\r\n * both act on wrapped DOM elements and stand alone for targeting raw DOM\r\n * elements.\r\n */\n var jQuery$1 = window.jQuery,\n Zepto$1 = window.Zepto;\n patch(window, true);\n patch(Element && Element.prototype);\n patch(NodeList && NodeList.prototype);\n patch(HTMLCollection && HTMLCollection.prototype);\n patch(jQuery$1, true);\n patch(jQuery$1 && jQuery$1.fn);\n patch(Zepto$1, true);\n patch(Zepto$1 && Zepto$1.fn);\n}\n// Make sure that the values within Velocity are read-only and upatchable.\n\nvar _loop$1 = function _loop(property) {\n if (VelocityStatic$1.hasOwnProperty(property)) {\n switch (typeof property === \"undefined\" ? \"undefined\" : _typeof(property)) {\n case \"number\":\n case \"boolean\":\n defineProperty$1(Velocity$2, property, {\n get: function get$$1() {\n return VelocityStatic$1[property];\n },\n set: function set$$1(value) {\n VelocityStatic$1[property] = value;\n }\n }, true);\n break;\n default:\n defineProperty$1(Velocity$2, property, VelocityStatic$1[property], true);\n break;\n }\n }\n};\n\nfor (var property$1 in VelocityStatic$1) {\n _loop$1(property$1);\n}\nObject.freeze(Velocity$2);\n\nexport default Velocity$2;\n//# sourceMappingURL=velocity.es5.js.map\n","/*************************************************/\r\n/* COUNTER */\r\n/*************************************************/\r\n\r\nimport Velocity from 'velocity-animate';\r\n\r\nexport class Counter {\r\n constructor(element) {\r\n this.statisticValueSelector = '.counter';\r\n if (element) {\r\n const targetValue = parseFloat(element.getAttribute('data-value')); // Parse the data-value as a float\r\n\r\n if (!isNaN(targetValue)) { // Ensure the value is a valid number\r\n const hasDecimals = targetValue % 1 !== 0; // Check if the target value is a decimal\r\n\r\n Velocity(element,\r\n {\r\n tween: [targetValue, 0]\r\n },\r\n {\r\n easing: \"easeOutCirc\",\r\n delay: 800,\r\n begin: function () {\r\n var statisticComponent = document.querySelector(\".counter\");\r\n statisticComponent.addEventListener(\"scroll\", function () { });\r\n },\r\n duration: 4000,\r\n progress: function (elements, complete, remaining, start, tweenValue, activeCall) {\r\n const value = parseFloat(tweenValue.tween);\r\n let formattedValue;\r\n\r\n if (hasDecimals) {\r\n // Format value with up to 1 decimal place if it is a decimal\r\n formattedValue = value.toFixed(1).toLocaleString();\r\n } else {\r\n // Format value without decimals if it is an integer\r\n formattedValue = Math.round(value).toLocaleString();\r\n }\r\n\r\n element.innerHTML = formattedValue;\r\n }\r\n }\r\n );\r\n } else {\r\n console.error('data-value attribute is not a valid number');\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default new Counter();\r\n","export class customEventsNames{\r\n constructor() {\r\n this.openModal = 'openModal';\r\n this.closeModal = 'closeModal';\r\n this.playVideoInModal = 'playVideoInModal';\r\n this.playYoutubeVideoInModal = 'playYoutubeVideoInModal';\r\n this.videoPlayingInModal = 'videoStartedPlayingInModal';\r\n this.panelClosed = 'panelClosed';\r\n this.panelOpened = 'panelOpened';\r\n }\r\n};\r\nexport default new customEventsNames();","/*************************************************/\r\n/* VIDEO */\r\n/*************************************************/\r\nimport customEventsNames from './../customEventsNames';\r\n\r\nexport function video() {\r\n const videoPlayerSelectors = ['.video-item__player', '.panel-video-item__player'];\r\n const modalVideoPlayerId = '#videoModal';\r\n const videoPlayerPlayingClasses = ['video-item__player--playing', 'panel-video-item__player--playing'];\r\n\r\n const init = function () {\r\n const playYoutubeVideo = (playerId, videoId) => {\r\n var iterations = 0;\r\n var loadViewTimer = setInterval(() => {\r\n if (youtubeLoaded) {\r\n clearInterval(loadViewTimer);\r\n let ytplayer = new YT.Player(playerId, {\r\n height: '100%',\r\n width: '100%',\r\n videoId: videoId,\r\n host: 'https://www.youtube-nocookie.com',\r\n events: {\r\n 'onReady': onPlayerReady,\r\n 'onStateChange': onPlayerStateChange\r\n },\r\n playerVars: {\r\n showinfo: 0,\r\n rel: 0\r\n }\r\n });\r\n } else {\r\n iterations++;\r\n }\r\n\r\n //Lets try for 10 seconds\r\n if (iterations === 100) {\r\n clearInterval(loadViewTimer);\r\n }\r\n\r\n }, 50);\r\n }\r\n\r\n const playVimeoVideo = (playerId, vimeoUrl) => {\r\n var iterations = 0;\r\n var loadViewTimer = setInterval(() => {\r\n if (vimeoLoaded) {\r\n clearInterval(loadViewTimer);\r\n let vimeoPlayer = new Vimeo.Player(playerId, {\r\n url: vimeoUrl,\r\n });\r\n vimeoPlayer.on('play', onPlayerReadyVimeo);\r\n vimeoPlayer.on('ended', onPlayerStateChangeVimeo);\r\n vimeoPlayer.play();\r\n } else {\r\n iterations++;\r\n }\r\n\r\n //Lets try for 10 seconds\r\n if (iterations === 100) {\r\n clearInterval(loadViewTimer);\r\n }\r\n\r\n }, 50);\r\n }\r\n\r\n const playVideo = (playerId) => {\r\n const player = document.getElementById(playerId);\r\n if (player.tagName == 'VIDEO') {\r\n player.play();\r\n\r\n } else {\r\n player.querySelector('video').play();\r\n }\r\n\r\n const videoPlayerElement = player.closest(videoPlayerSelectors.join(','));\r\n if (videoPlayerElement) {\r\n videoPlayerPlayingClasses.forEach(cls => videoPlayerElement.classList.add(cls));\r\n }\r\n const videoStartedPlayingInModalEvent = new Event(customEventsNames.videoPlayingInModal);\r\n document.querySelector(modalVideoPlayerId).dispatchEvent(videoStartedPlayingInModalEvent);\r\n }\r\n\r\n const onPlayerReady = event => {\r\n const player = document.querySelector(`#player${event.target.playerInfo.videoData.video_id}`);\r\n \r\n const videoStartedPlayingInModalEvent = new Event(customEventsNames.videoPlayingInModal);\r\n document.querySelector(modalVideoPlayerId).dispatchEvent(videoStartedPlayingInModalEvent);\r\n \r\n const videoPlayerElement = player.closest(videoPlayerSelectors.join(','));\r\n if (videoPlayerElement) {\r\n videoPlayerPlayingClasses.forEach(cls => videoPlayerElement.classList.add(cls));\r\n \r\n console.log(videoPlayerElement.dataset);\r\n if(videoPlayerElement.dataset.autoplay == 'true'){\r\n event.target.mute();\r\n }\r\n }\r\n\r\n event.target.playVideo();\r\n }\r\n\r\n const onPlayerReadyVimeo = event => {\r\n const player = event.target;\r\n const videoStartedPlayingInModalEvent = new Event(customEventsNames.videoPlayingInModal);\r\n\r\n document.querySelector(modalVideoPlayerId).dispatchEvent(videoStartedPlayingInModalEvent);\r\n const videoPlayerElement = player.closest(videoPlayerSelectors.join(','));\r\n\r\n if (videoPlayerElement) {\r\n videoPlayerPlayingClasses.forEach(cls => videoPlayerElement.classList.add(cls));\r\n }\r\n }\r\n\r\n const onPlayerStateChange = event => {\r\n if (event.data === YT.PlayerState.ENDED) {\r\n const player = document.querySelector(`#player${event.target.playerInfo.videoData.video_id}`);\r\n const videoPlayerElement = player.closest(videoPlayerSelectors.join(','));\r\n if (videoPlayerElement) {\r\n videoPlayerPlayingClasses.forEach(cls => videoPlayerElement.classList.remove(cls));\r\n }\r\n }\r\n }\r\n\r\n const onPlayerStateChangeVimeo = event => {\r\n const player = event.target;\r\n const videoPlayerElement = player.closest(videoPlayerSelectors.join(','));\r\n if (videoPlayerElement) {\r\n videoPlayerPlayingClasses.forEach(cls => videoPlayerElement.classList.add(cls));\r\n }\r\n }\r\n\r\n document.addEventListener(customEventsNames.playVideoInModal, e => {\r\n if (e.target.id === 'modalplayer') {\r\n playVideo(e.detail.playerId);\r\n }\r\n });\r\n document.addEventListener(customEventsNames.playYoutubeVideoInModal, e => {\r\n if (e.target.id === 'modalplayer') {\r\n playYoutubeVideo(e.detail.playerId, e.detail.videoId);\r\n }\r\n }, false);\r\n\r\n document.addEventListener(customEventsNames.closeModal, e => {\r\n if (e.target.id === modalVideoPlayerId) {\r\n document.querySelector(videoPlayerSelectors.join(',')).classList.remove(videoPlayerPlayingClasses.join(' '));\r\n }\r\n }, false);\r\n\r\n const videoPlayerActionHandler = (e) => {\r\n const videoItem = e.target.closest(videoPlayerSelectors.join(','));\r\n if (videoItem) {\r\n e.preventDefault();\r\n\r\n let videoId = videoItem.dataset.videoId;\r\n const playerId = videoItem.dataset.playerId;\r\n let vimeoUrl = videoItem.dataset.vimeoVideoUrl;\r\n\r\n let videoSources = videoItem.dataset.videosources;\r\n let videoTypes = videoItem.dataset.videotypes;\r\n let autoplay = videoItem.dataset.autoplay == 'true';\r\n\r\n // Hide the closest .image-cover-wrap\r\n const imageCoverWrap = videoItem.querySelector('.image-cover-wrap');\r\n if (imageCoverWrap) {\r\n imageCoverWrap.style.display = 'none';\r\n }\r\n\r\n const videoIcon = videoItem.querySelector(\".video-item__icon\");\r\n if (videoIcon) {\r\n videoIcon.style.display = 'none';\r\n }\r\n\r\n if (videoSources && videoTypes) {\r\n videoSources = videoSources.split(',');\r\n videoTypes = videoTypes.split(',');\r\n\r\n const modalId = videoItem.dataset.target;\r\n const videoElement = document.createElement('video');\r\n videoElement.controls = true;\r\n\r\n if (autoplay) {\r\n videoElement.autoplay = true;\r\n videoElement.loop = true;\r\n videoElement.controls = false;\r\n videoElement.muted = true;\r\n videoElement.playsInline = true;\r\n }\r\n\r\n for (let i = 0; i < videoSources.length; i++) {\r\n const sourceElement = document.createElement('source');\r\n sourceElement.setAttribute('src', videoSources[i]);\r\n sourceElement.setAttribute('type', videoTypes[i]);\r\n videoElement.appendChild(sourceElement)\r\n }\r\n\r\n if (typeof modalId !== 'undefined' && modalId !== '') {\r\n var openModalEvent = new CustomEvent(customEventsNames.openModal, {\r\n detail: {\r\n modalId: modalId,\r\n videoElement: videoElement\r\n }\r\n });\r\n\r\n document.querySelector(modalVideoPlayerId).dispatchEvent(openModalEvent);\r\n\r\n } else {\r\n\r\n document.getElementById(playerId).replaceChildren(videoElement);\r\n playVideo(playerId);\r\n }\r\n }\r\n else if (typeof videoId != undefined && videoId != null && videoId != '') {\r\n if (!Cookiebot.consent.marketing) {\r\n CookieConsent.renew();\r\n } else {\r\n console.warn('Remember to setup the cookie consent solution for the Youtube script in video.js');\r\n const tag = document.createElement('script');\r\n tag.src = 'https://www.youtube.com/iframe_api';\r\n const firstScriptTag = document.getElementsByTagName('script')[0];\r\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n\r\n\r\n //If video id is not set, it's probably a link from a RTE\r\n if (typeof videoId === undefined) {\r\n videoId = videoItem.querySelector('a').getAttribute('href');\r\n if (videoId && videoId.indexOf('/') === 0 && videoId.length > 1) {\r\n videoId = videoId.substr(1);\r\n }\r\n }\r\n if (videoId) {\r\n const modalId = videoItem.dataset.target;\r\n if (typeof modalId !== 'undefined' && modalId !== '') {\r\n var openModalEvent = new CustomEvent(customEventsNames.openModal, {\r\n detail: {\r\n modalId: modalId,\r\n videoId: videoId\r\n }\r\n });\r\n\r\n document.querySelector(modalVideoPlayerId).dispatchEvent(openModalEvent);\r\n\r\n } else {\r\n playYoutubeVideo(playerId, videoId);\r\n }\r\n } else {\r\n console.error('Video not found');\r\n }\r\n }\r\n } else if (typeof vimeoUrl != undefined && vimeoUrl != null && vimeoUrl != '') {\r\n if (!Cookiebot.consent.marketing) {\r\n CookieConsent.renew();\r\n } else {\r\n console.warn('Remember to setup the cookie consent solution for the Youtube script in video.js');\r\n const tag = document.createElement('script');\r\n tag.src = 'https://player.vimeo.com/api/player.js';\r\n tag.onload = () => { vimeoLoaded = true; };\r\n const firstScriptTag = document.getElementsByTagName('script')[0];\r\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n\r\n\r\n if (vimeoUrl) {\r\n const modalId = videoItem.dataset.target;\r\n if (typeof modalId !== 'undefined' && modalId !== '') {\r\n var openModalEvent = new CustomEvent(customEventsNames.openModal, {\r\n detail: {\r\n modalId: modalId,\r\n vimeoUrl: vimeoUrl\r\n }\r\n });\r\n\r\n document.querySelector(modalVideoPlayerId).dispatchEvent(openModalEvent);\r\n console.log(openModalEvent);\r\n\r\n } else {\r\n playVimeoVideo(playerId, vimeoUrl);\r\n }\r\n } else {\r\n console.error('Video not found');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n const videoPlayers = document.querySelectorAll(videoPlayerSelectors.join(','));\r\n if (videoPlayers.length > 0) {\r\n videoPlayers.forEach(player => {\r\n\r\n player.addEventListener('click', e => {\r\n //Only play the video if it's not already playing\r\n const videoPlayer = player.querySelector('video');\r\n if (!videoPlayer) {\r\n videoPlayerActionHandler(e);\r\n }\r\n });\r\n\r\n player.addEventListener('keyup', e => {\r\n e.preventDefault();\r\n if (e.key === 'Enter') {\r\n videoPlayerActionHandler(e);\r\n }\r\n });\r\n })\r\n }\r\n\r\n };\r\n\r\n init();\r\n}\r\n","/*************************************************/\r\n/* MODAL */\r\n/*************************************************/\r\nimport customEventsNames from './../customEventsNames';\r\nexport function modal(body, bodyLoadingClass) {\r\n let modals = Array.from(document.querySelectorAll('.modal')),\r\n modalDialogClassSelector = '.modal-dialog',\r\n modalContentClassSelector = '.modal-content',\r\n modalCloseButtonClassSelector = '.modal-close',\r\n utils;\r\n const mainContentSelector = '#mainContent',\r\n modalPlayerId = 'modalplayer',\r\n modalShowClass ='modal--show';\r\n let triggerElement = null;\r\n\r\n const init = function () {\r\n modalUtils();\r\n\r\n modals.forEach(modal => {\r\n modal.addEventListener(customEventsNames.openModal, e => {\r\n if (e.detail.videoElement) {\r\n utils.Video.AddVideoToModal(e.detail.modalId, e.detail.videoElement);\r\n } else if (e.detail.modalId && e.detail.videoId) {\r\n utils.Video.AddYoutubeVideoToModal(e.detail.modalId, e.detail.videoId);\r\n }\r\n });\r\n\r\n modal.addEventListener(customEventsNames.videoPlayingInModal, e => {\r\n body.classList.remove(bodyLoadingClass);\r\n });\r\n\r\n //Close if background is clicked, but not if modalDialog is clicked\r\n modal.addEventListener('click', e => {\r\n utils.Modal.CloseModal(e.target.getAttribute('id'));\r\n });\r\n\r\n const dialog = modal.querySelector(modalDialogClassSelector);\r\n dialog.addEventListener('click', e => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n });\r\n\r\n modal.querySelector(modalCloseButtonClassSelector).addEventListener('click', e => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n utils.Modal.CloseModal(e.target.closest('.modal').getAttribute('id'));\r\n });\r\n });\r\n\r\n\r\n };\r\n\r\n function modalUtils() {\r\n if (!utils) {\r\n utils = {\r\n };\r\n }\r\n\r\n if (modals.length > 0) {\r\n utils.Modal = {\r\n OpenModal(modalId, content) {\r\n triggerElement = document.activeElement;\r\n const modal = document.querySelector(modalId);\r\n body.classList.add('noscroll');\r\n modal.classList.add(modalShowClass);\r\n modal.querySelector(modalContentClassSelector).appendChild(content);\r\n\r\n document.querySelector(mainContentSelector).setAttribute('aria-hidden', true);\r\n\r\n setTimeout(() => {\r\n modal.focus();\r\n }, 300); //Timeout here to compensate for the transition on the modal\r\n\r\n },\r\n CloseModal(modalId, clearContent = true) {\r\n modalId = `#${modalId}`;\r\n const modal = document.querySelector(modalId);\r\n modal.classList.remove(modalShowClass);\r\n if (clearContent = true) {\r\n const content = modal.querySelector(modalContentClassSelector);\r\n content.removeChild(content.querySelector('#'+modalPlayerId));\r\n }\r\n body.classList.remove('noscroll', bodyLoadingClass);\r\n\r\n const closeModalEvent = new CustomEvent(customEventsNames.closeModal, { bubbles: true });\r\n modal.dispatchEvent(closeModalEvent);\r\n\r\n document.querySelector(mainContentSelector).setAttribute('aria-hidden', false);\r\n\r\n setTimeout(() => {\r\n triggerElement.focus();\r\n }, 200); //Timeout here to compensate for the keyup event needing to finish\r\n\r\n\r\n }\r\n };\r\n }\r\n\r\n utils.Video = {\r\n AddYoutubeVideoToModal(modalId, videoId) {\r\n const player = document.createElement('div');\r\n player.id = modalPlayerId;\r\n utils.Modal.OpenModal(modalId, player);\r\n body.classList.add(bodyLoadingClass);\r\n\r\n var playYoutubeVideoEvent = new CustomEvent(customEventsNames.playYoutubeVideoInModal, {\r\n bubbles: true,\r\n detail: {\r\n modalId: modalId,\r\n playerId: modalPlayerId,\r\n videoId: videoId\r\n }\r\n });\r\n\r\n player.dispatchEvent(playYoutubeVideoEvent);\r\n },\r\n AddVideoToModal(modalId, videoElement) {\r\n videoElement.id = modalPlayerId;\r\n\r\n utils.Modal.OpenModal(modalId, videoElement);\r\n\r\n body.classList.add(bodyLoadingClass);\r\n\r\n var playVideoEvent = new CustomEvent(customEventsNames.playVideoInModal, {\r\n bubbles: true,\r\n detail: {\r\n modalId: modalId,\r\n playerId: modalPlayerId\r\n }\r\n });\r\n videoElement.dispatchEvent(playVideoEvent);\r\n\r\n }\r\n };\r\n }\r\n\r\n init();\r\n}\r\n","/*************************************************/\r\n/* COOKIES */\r\n/*************************************************/\r\n\r\nexport function cookies() {\r\n const cookiePlaceholderSelector = '.cookie-placeholder';\r\n const placeholderSelectors = Array.from(document.querySelectorAll(cookiePlaceholderSelector));\r\n\r\n //Implement this for the specific cookie solution. Check out one of our other websites for an example\r\n const RenewConsent = categories => {\r\n Cookiebot.renew();\r\n }\r\n\r\n const SetPlaceholderDisplayState = (placeholder,displayState) => {\r\n placeholder.style.display = displayState;\r\n }\r\n\r\n //Implement this for the specific cookie solution. Check out one of our other websites for an example. In this case, replace the 'false' with Cookie Consent status\r\n const SetPlaceholderState = () => {\r\n window.addEventListener('CookiebotOnConsentReady', function (event) {\r\n\r\n const marketingPlaceholders = document.querySelectorAll('[data-categories*=\"marketing\"]');\r\n if (marketingPlaceholders != null) {\r\n marketingPlaceholders.forEach(placeholder => {\r\n let displayState = Cookiebot.consent.marketing ? 'none' : 'flex';\r\n SetPlaceholderDisplayState(placeholder,displayState);\r\n });\r\n }\r\n \r\n var statisticsPlaceholders = document.querySelectorAll('[data-categories*=\"statistics\"]');\r\n if (statisticsPlaceholders != null) {\r\n statisticsPlaceholders.forEach(placeholder => {\r\n var displayState = Cookiebot.consent.statistics ? 'none' : 'flex';\r\n SetPlaceholderDisplayState(placeholder,displayState);\r\n });\r\n }\r\n \r\n var preferencesPlaceholders = document.querySelectorAll('[data-categories*=\"preferences\"]');\r\n if (preferencesPlaceholders != null) {\r\n preferencesPlaceholders.forEach(placeholder => {\r\n var displayState = Cookiebot.consent.preferences ? 'none' : 'flex';\r\n SetPlaceholderDisplayState(placeholder,displayState);\r\n });\r\n }\r\n\r\n }, false);\r\n \r\n }\r\n\r\n const init = () => {\r\n\r\n SetPlaceholderState();\r\n\r\n for(const placeholderSelector of placeholderSelectors) {\r\n placeholderSelector.addEventListener('click', event => {\r\n let placeholder = event.target;\r\n if(!placeholder.classList.contains(cookiePlaceholderSelector)) {\r\n placeholder = event.target.closest(cookiePlaceholderSelector);\r\n }\r\n event.stopPropagation()\r\n var categories = placeholder.dataset.categories.split(',');\r\n RenewConsent(categories);\r\n });\r\n }\r\n };\r\n\r\n init();\r\n}","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.4.2\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , _parsed } = meta;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */ const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.4.2\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const skipNull = (meta)=>{\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.4.2\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\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 radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements))) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b)=>a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","/*!\n* chartjs-plugin-annotation v3.0.1\n* https://www.chartjs.org/chartjs-plugin-annotation/index\n * (c) 2023 chartjs-plugin-annotation Contributors\n * Released under the MIT License\n */\nimport { Element, defaults, Animations, Chart } from 'chart.js';\nimport { distanceBetweenPoints, defined, isFunction, callback, isObject, valueOrDefault, toRadians, isArray, toFont, addRoundedRectPath, toTRBLCorners, QUARTER_PI, PI, HALF_PI, TWO_THIRDS_PI, TAU, isNumber, RAD_PER_DEG, toPadding, isFinite, toDegrees, clipArea, unclipArea } from 'chart.js/helpers';\n\n/**\n * @typedef { import(\"chart.js\").ChartEvent } ChartEvent\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst interaction = {\n modes: {\n /**\n * Point mode returns all elements that hit test based on the event position\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @return {AnnotationElement[]} - elements that are found\n */\n point(state, event) {\n return filterElements(state, event, {intersect: true});\n },\n\n /**\n * Nearest mode returns the element closest to the event position\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found (only 1 element)\n */\n nearest(state, event, options) {\n return getNearestItem(state, event, options);\n },\n /**\n * x mode returns the elements that hit-test at the current x coordinate\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\n x(state, event, options) {\n return filterElements(state, event, {intersect: options.intersect, axis: 'x'});\n },\n\n /**\n * y mode returns the elements that hit-test at the current y coordinate\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\n y(state, event, options) {\n return filterElements(state, event, {intersect: options.intersect, axis: 'y'});\n }\n }\n};\n\n/**\n * Returns all elements that hit test based on the event position\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\nfunction getElements(state, event, options) {\n const mode = interaction.modes[options.mode] || interaction.modes.nearest;\n return mode(state, event, options);\n}\n\nfunction inRangeByAxis(element, event, axis) {\n if (axis !== 'x' && axis !== 'y') {\n return element.inRange(event.x, event.y, 'x', true) || element.inRange(event.x, event.y, 'y', true);\n }\n return element.inRange(event.x, event.y, axis, true);\n}\n\nfunction getPointByAxis(event, center, axis) {\n if (axis === 'x') {\n return {x: event.x, y: center.y};\n } else if (axis === 'y') {\n return {x: center.x, y: event.y};\n }\n return center;\n}\n\nfunction filterElements(state, event, options) {\n return state.visibleElements.filter((element) => options.intersect ? element.inRange(event.x, event.y) : inRangeByAxis(element, event, options.axis));\n}\n\nfunction getNearestItem(state, event, options) {\n let minDistance = Number.POSITIVE_INFINITY;\n\n return filterElements(state, event, options)\n .reduce((nearestItems, element) => {\n const center = element.getCenterPoint();\n const evenPoint = getPointByAxis(event, center, options.axis);\n const distance = distanceBetweenPoints(event, evenPoint);\n if (distance < minDistance) {\n nearestItems = [element];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n nearestItems.push(element);\n }\n\n return nearestItems;\n }, [])\n .sort((a, b) => a._index - b._index)\n .slice(0, 1); // return only the top item;\n}\n\nconst isOlderPart = (act, req) => req > act || (act.length > req.length && act.slice(0, req.length) === req);\n\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('chart.js').InteractionAxis } InteractionAxis\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst EPSILON = 0.001;\nconst clamp = (x, from, to) => Math.min(to, Math.max(from, x));\n\n/**\n * @param {Object} obj\n * @param {number} from\n * @param {number} to\n * @returns {Object}\n */\nfunction clampAll(obj, from, to) {\n for (const key of Object.keys(obj)) {\n obj[key] = clamp(obj[key], from, to);\n }\n return obj;\n}\n\n/**\n * @param {Point} point\n * @param {Point} center\n * @param {number} radius\n * @param {number} borderWidth\n * @returns {boolean}\n */\nfunction inPointRange(point, center, radius, borderWidth) {\n if (!point || !center || radius <= 0) {\n return false;\n }\n const hBorderWidth = borderWidth / 2;\n return (Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2)) <= Math.pow(radius + hBorderWidth, 2);\n}\n\n/**\n * @param {Point} point\n * @param {{x: number, y: number, x2: number, y2: number}} rect\n * @param {InteractionAxis} axis\n * @param {number} borderWidth\n * @returns {boolean}\n */\nfunction inBoxRange(point, {x, y, x2, y2}, axis, borderWidth) {\n const hBorderWidth = borderWidth / 2;\n const inRangeX = point.x >= x - hBorderWidth - EPSILON && point.x <= x2 + hBorderWidth + EPSILON;\n const inRangeY = point.y >= y - hBorderWidth - EPSILON && point.y <= y2 + hBorderWidth + EPSILON;\n if (axis === 'x') {\n return inRangeX;\n } else if (axis === 'y') {\n return inRangeY;\n }\n return inRangeX && inRangeY;\n}\n\n/**\n * @param {AnnotationElement} element\n * @param {boolean} useFinalPosition\n * @returns {Point}\n */\nfunction getElementCenterPoint(element, useFinalPosition) {\n const {centerX, centerY} = element.getProps(['centerX', 'centerY'], useFinalPosition);\n return {x: centerX, y: centerY};\n}\n\n/**\n * @param {string} pkg\n * @param {string} min\n * @param {string} ver\n * @param {boolean} [strict=true]\n * @returns {boolean}\n */\nfunction requireVersion(pkg, min, ver, strict = true) {\n const parts = ver.split('.');\n let i = 0;\n for (const req of min.split('.')) {\n const act = parts[i++];\n if (parseInt(req, 10) < parseInt(act, 10)) {\n break;\n }\n if (isOlderPart(act, req)) {\n if (strict) {\n throw new Error(`${pkg} v${ver} is not supported. v${min} or newer is required.`);\n } else {\n return false;\n }\n }\n }\n return true;\n}\n\nconst isPercentString = (s) => typeof s === 'string' && s.endsWith('%');\nconst toPercent = (s) => parseFloat(s) / 100;\nconst toPositivePercent = (s) => clamp(toPercent(s), 0, 1);\n\nconst boxAppering = (x, y) => ({x, y, x2: x, y2: y, width: 0, height: 0});\nconst defaultInitAnimation = {\n box: (properties) => boxAppering(properties.centerX, properties.centerY),\n ellipse: (properties) => ({centerX: properties.centerX, centerY: properties.centerX, radius: 0, width: 0, height: 0}),\n label: (properties) => boxAppering(properties.centerX, properties.centerY),\n line: (properties) => boxAppering(properties.x, properties.y),\n point: (properties) => ({centerX: properties.centerX, centerY: properties.centerY, radius: 0, width: 0, height: 0}),\n polygon: (properties) => boxAppering(properties.centerX, properties.centerY)\n};\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n * @typedef { import('../../types/options').AnnotationPointCoordinates } AnnotationPointCoordinates\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/label').LabelPositionObject } LabelPositionObject\n */\n\n/**\n * @param {number} size\n * @param {number|string} position\n * @returns {number}\n */\nfunction getRelativePosition(size, position) {\n if (position === 'start') {\n return 0;\n }\n if (position === 'end') {\n return size;\n }\n if (isPercentString(position)) {\n return toPositivePercent(position) * size;\n }\n return size / 2;\n}\n\n/**\n * @param {number} size\n * @param {number|string} value\n * @param {boolean} [positivePercent=true]\n * @returns {number}\n */\nfunction getSize(size, value, positivePercent = true) {\n if (typeof value === 'number') {\n return value;\n } else if (isPercentString(value)) {\n return (positivePercent ? toPositivePercent(value) : toPercent(value)) * size;\n }\n return size;\n}\n\n/**\n * @param {{x: number, width: number}} size\n * @param {CoreLabelOptions} options\n * @returns {number}\n */\nfunction calculateTextAlignment(size, options) {\n const {x, width} = size;\n const textAlign = options.textAlign;\n if (textAlign === 'center') {\n return x + width / 2;\n } else if (textAlign === 'end' || textAlign === 'right') {\n return x + width;\n }\n return x;\n}\n\n/**\n * @param {{x: number|string, y: number|string}|string|number} value\n * @param {string|number} defaultValue\n * @returns {{x: number|string, y: number|string}}\n */\nfunction toPosition(value, defaultValue = 'center') {\n if (isObject(value)) {\n return {\n x: valueOrDefault(value.x, defaultValue),\n y: valueOrDefault(value.y, defaultValue),\n };\n }\n value = valueOrDefault(value, defaultValue);\n return {\n x: value,\n y: value\n };\n}\n\n/**\n * @param {AnnotationPointCoordinates} options\n * @returns {boolean}\n */\nfunction isBoundToPoint(options) {\n return options && (defined(options.xValue) || defined(options.yValue));\n}\n\n/**\n * @param {Chart} chart\n * @param {AnnotationBoxModel} properties\n * @param {CoreAnnotationOptions} options\n * @returns {AnnotationElement}\n */\nfunction initAnimationProperties(chart, properties, options) {\n const initAnim = options.init;\n if (!initAnim) {\n return;\n } else if (initAnim === true) {\n return applyDefault(properties, options);\n }\n return execCallback(chart, properties, options);\n}\n\n/**\n * @param {Object} options\n * @param {Array} hooks\n * @param {Object} hooksContainer\n * @returns {boolean}\n */\nfunction loadHooks(options, hooks, hooksContainer) {\n let activated = false;\n hooks.forEach(hook => {\n if (isFunction(options[hook])) {\n activated = true;\n hooksContainer[hook] = options[hook];\n } else if (defined(hooksContainer[hook])) {\n delete hooksContainer[hook];\n }\n });\n return activated;\n}\n\nfunction applyDefault(properties, options) {\n const type = options.type || 'line';\n return defaultInitAnimation[type](properties);\n}\n\nfunction execCallback(chart, properties, options) {\n const result = callback(options.init, [{chart, properties, options}]);\n if (result === true) {\n return applyDefault(properties, options);\n } else if (isObject(result)) {\n return result;\n }\n}\n\nconst widthCache = new Map();\nconst notRadius = (radius) => isNaN(radius) || radius <= 0;\nconst fontsKey = (fonts) => fonts.reduce(function(prev, item) {\n prev += item.string;\n return prev;\n}, '');\n\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n */\n\n/**\n * Determine if content is an image or a canvas.\n * @param {*} content\n * @returns boolean|undefined\n * @todo move this function to chart.js helpers\n */\nfunction isImageOrCanvas(content) {\n if (content && typeof content === 'object') {\n const type = content.toString();\n return (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]');\n }\n}\n\n/**\n * Set the translation on the canvas if the rotation must be applied.\n * @param {CanvasRenderingContext2D} ctx - chart canvas context\n * @param {Point} point - the point of translation\n * @param {number} rotation - rotation (in degrees) to apply\n */\nfunction translate(ctx, {x, y}, rotation) {\n if (rotation) {\n ctx.translate(x, y);\n ctx.rotate(toRadians(rotation));\n ctx.translate(-x, -y);\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n * @returns {boolean|undefined}\n */\nfunction setBorderStyle(ctx, options) {\n if (options && options.borderWidth) {\n ctx.lineCap = options.borderCapStyle;\n ctx.setLineDash(options.borderDash);\n ctx.lineDashOffset = options.borderDashOffset;\n ctx.lineJoin = options.borderJoinStyle;\n ctx.lineWidth = options.borderWidth;\n ctx.strokeStyle = options.borderColor;\n return true;\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n */\nfunction setShadowStyle(ctx, options) {\n ctx.shadowColor = options.backgroundShadowColor;\n ctx.shadowBlur = options.shadowBlur;\n ctx.shadowOffsetX = options.shadowOffsetX;\n ctx.shadowOffsetY = options.shadowOffsetY;\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {CoreLabelOptions} options\n * @returns {{width: number, height: number}}\n */\nfunction measureLabelSize(ctx, options) {\n const content = options.content;\n if (isImageOrCanvas(content)) {\n return {\n width: getSize(content.width, options.width),\n height: getSize(content.height, options.height)\n };\n }\n const optFont = options.font;\n const fonts = isArray(optFont) ? optFont.map(f => toFont(f)) : [toFont(optFont)];\n const strokeWidth = options.textStrokeWidth;\n const lines = isArray(content) ? content : [content];\n const mapKey = lines.join() + fontsKey(fonts) + strokeWidth + (ctx._measureText ? '-spriting' : '');\n if (!widthCache.has(mapKey)) {\n widthCache.set(mapKey, calculateLabelSize(ctx, lines, fonts, strokeWidth));\n }\n return widthCache.get(mapKey);\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {Object} options\n */\nfunction drawBox(ctx, rect, options) {\n const {x, y, width, height} = rect;\n ctx.save();\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n ctx.fillStyle = options.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x, y, w: width, h: height,\n radius: clampAll(toTRBLCorners(options.borderRadius), 0, Math.min(width, height) / 2)\n });\n ctx.closePath();\n ctx.fill();\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {CoreLabelOptions} options\n */\nfunction drawLabel(ctx, rect, options) {\n const content = options.content;\n if (isImageOrCanvas(content)) {\n ctx.save();\n ctx.globalAlpha = getOpacity(options.opacity, content.style.opacity);\n ctx.drawImage(content, rect.x, rect.y, rect.width, rect.height);\n ctx.restore();\n return;\n }\n const labels = isArray(content) ? content : [content];\n const optFont = options.font;\n const fonts = isArray(optFont) ? optFont.map(f => toFont(f)) : [toFont(optFont)];\n const optColor = options.color;\n const colors = isArray(optColor) ? optColor : [optColor];\n const x = calculateTextAlignment(rect, options);\n const y = rect.y + options.textStrokeWidth / 2;\n ctx.save();\n ctx.textBaseline = 'middle';\n ctx.textAlign = options.textAlign;\n if (setTextStrokeStyle(ctx, options)) {\n applyLabelDecoration(ctx, {x, y}, labels, fonts);\n }\n applyLabelContent(ctx, {x, y}, labels, {fonts, colors});\n ctx.restore();\n}\n\nfunction setTextStrokeStyle(ctx, options) {\n if (options.textStrokeWidth > 0) {\n // https://stackoverflow.com/questions/13627111/drawing-text-with-an-outer-stroke-with-html5s-canvas\n ctx.lineJoin = 'round';\n ctx.miterLimit = 2;\n ctx.lineWidth = options.textStrokeWidth;\n ctx.strokeStyle = options.textStrokeColor;\n return true;\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{radius: number, options: PointAnnotationOptions}} element\n * @param {number} x\n * @param {number} y\n */\nfunction drawPoint(ctx, element, x, y) {\n const {radius, options} = element;\n const style = options.pointStyle;\n const rotation = options.rotation;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (isImageOrCanvas(style)) {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n if (notRadius(radius)) {\n return;\n }\n drawPointStyle(ctx, {x, y, radius, rotation, style, rad});\n}\n\nfunction drawPointStyle(ctx, {x, y, radius, rotation, style, rad}) {\n let xOffset, yOffset, size, cornerRadius;\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n\n ctx.fill();\n}\n\nfunction calculateLabelSize(ctx, lines, fonts, strokeWidth) {\n ctx.save();\n const count = lines.length;\n let width = 0;\n let height = strokeWidth;\n for (let i = 0; i < count; i++) {\n const font = fonts[Math.min(i, fonts.length - 1)];\n ctx.font = font.string;\n const text = lines[i];\n width = Math.max(width, ctx.measureText(text).width + strokeWidth);\n height += font.lineHeight;\n }\n ctx.restore();\n return {width, height};\n}\n\nfunction applyLabelDecoration(ctx, {x, y}, labels, fonts) {\n ctx.beginPath();\n let lhs = 0;\n labels.forEach(function(l, i) {\n const f = fonts[Math.min(i, fonts.length - 1)];\n const lh = f.lineHeight;\n ctx.font = f.string;\n ctx.strokeText(l, x, y + lh / 2 + lhs);\n lhs += lh;\n });\n ctx.stroke();\n}\n\nfunction applyLabelContent(ctx, {x, y}, labels, {fonts, colors}) {\n let lhs = 0;\n labels.forEach(function(l, i) {\n const c = colors[Math.min(i, colors.length - 1)];\n const f = fonts[Math.min(i, fonts.length - 1)];\n const lh = f.lineHeight;\n ctx.beginPath();\n ctx.font = f.string;\n ctx.fillStyle = c;\n ctx.fillText(l, x, y + lh / 2 + lhs);\n lhs += lh;\n ctx.fill();\n });\n}\n\nfunction getOpacity(value, elementValue) {\n const opacity = isNumber(value) ? value : elementValue;\n return isNumber(opacity) ? clamp(opacity, 0, 1) : 1;\n}\n\nconst limitedLineScale = {\n xScaleID: {min: 'xMin', max: 'xMax', start: 'left', end: 'right', startProp: 'x', endProp: 'x2'},\n yScaleID: {min: 'yMin', max: 'yMax', start: 'bottom', end: 'top', startProp: 'y', endProp: 'y2'}\n};\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import(\"chart.js\").Point } Point\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n * @typedef { import('../../types/options').LineAnnotationOptions } LineAnnotationOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n * @typedef { import('../../types/options').PolygonAnnotationOptions } PolygonAnnotationOptions\n */\n\n/**\n * @param {Scale} scale\n * @param {number|string} value\n * @param {number} fallback\n * @returns {number}\n */\nfunction scaleValue(scale, value, fallback) {\n value = typeof value === 'number' ? value : scale.parse(value);\n return isFinite(value) ? scale.getPixelForValue(value) : fallback;\n}\n\n/**\n * Search the scale defined in chartjs by the axis related to the annotation options key.\n * @param {{ [key: string]: Scale }} scales\n * @param {CoreAnnotationOptions} options\n * @param {string} key\n * @returns {string}\n */\nfunction retrieveScaleID(scales, options, key) {\n const scaleID = options[key];\n if (scaleID || key === 'scaleID') {\n return scaleID;\n }\n const axis = key.charAt(0);\n const axes = Object.values(scales).filter((scale) => scale.axis && scale.axis === axis);\n if (axes.length) {\n return axes[0].id;\n }\n return axis;\n}\n\n/**\n * @param {Scale} scale\n * @param {{min: number, max: number, start: number, end: number}} options\n * @returns {{start: number, end: number}|undefined}\n */\nfunction getDimensionByScale(scale, options) {\n if (scale) {\n const reverse = scale.options.reverse;\n const start = scaleValue(scale, options.min, reverse ? options.end : options.start);\n const end = scaleValue(scale, options.max, reverse ? options.start : options.end);\n return {\n start,\n end\n };\n }\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {Point}\n */\nfunction getChartPoint(chart, options) {\n const {chartArea, scales} = chart;\n const xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n const yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n let x = chartArea.width / 2;\n let y = chartArea.height / 2;\n\n if (xScale) {\n x = scaleValue(xScale, options.xValue, xScale.left + xScale.width / 2);\n }\n\n if (yScale) {\n y = scaleValue(yScale, options.yValue, yScale.top + yScale.height / 2);\n }\n return {x, y};\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolveBoxProperties(chart, options) {\n const scales = chart.scales;\n const xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n const yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n\n if (!xScale && !yScale) {\n return {};\n }\n\n let {left: x, right: x2} = xScale || chart.chartArea;\n let {top: y, bottom: y2} = yScale || chart.chartArea;\n const xDim = getChartDimensionByScale(xScale, {min: options.xMin, max: options.xMax, start: x, end: x2});\n x = xDim.start;\n x2 = xDim.end;\n const yDim = getChartDimensionByScale(yScale, {min: options.yMin, max: options.yMax, start: y2, end: y});\n y = yDim.start;\n y2 = yDim.end;\n\n return {\n x,\n y,\n x2,\n y2,\n width: x2 - x,\n height: y2 - y,\n centerX: x + (x2 - x) / 2,\n centerY: y + (y2 - y) / 2\n };\n}\n\n/**\n * @param {Chart} chart\n * @param {PointAnnotationOptions|PolygonAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolvePointProperties(chart, options) {\n if (!isBoundToPoint(options)) {\n const box = resolveBoxProperties(chart, options);\n let radius = options.radius;\n if (!radius || isNaN(radius)) {\n radius = Math.min(box.width, box.height) / 2;\n options.radius = radius;\n }\n const size = radius * 2;\n const adjustCenterX = box.centerX + options.xAdjust;\n const adjustCenterY = box.centerY + options.yAdjust;\n return {\n x: adjustCenterX - radius,\n y: adjustCenterY - radius,\n x2: adjustCenterX + radius,\n y2: adjustCenterY + radius,\n centerX: adjustCenterX,\n centerY: adjustCenterY,\n width: size,\n height: size,\n radius\n };\n }\n return getChartCircle(chart, options);\n}\n/**\n * @param {Chart} chart\n * @param {LineAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolveLineProperties(chart, options) {\n const {scales, chartArea} = chart;\n const scale = scales[options.scaleID];\n const area = {x: chartArea.left, y: chartArea.top, x2: chartArea.right, y2: chartArea.bottom};\n\n if (scale) {\n resolveFullLineProperties(scale, area, options);\n } else {\n resolveLimitedLineProperties(scales, area, options);\n }\n return area;\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @param {boolean} [centerBased=false]\n * @returns {AnnotationBoxModel}\n */\nfunction resolveBoxAndLabelProperties(chart, options) {\n const properties = resolveBoxProperties(chart, options);\n properties.initProperties = initAnimationProperties(chart, properties, options);\n properties.elements = [{\n type: 'label',\n optionScope: 'label',\n properties: resolveLabelElementProperties$1(chart, properties, options),\n initProperties: properties.initProperties\n }];\n return properties;\n}\n\nfunction getChartCircle(chart, options) {\n const point = getChartPoint(chart, options);\n const size = options.radius * 2;\n return {\n x: point.x - options.radius + options.xAdjust,\n y: point.y - options.radius + options.yAdjust,\n x2: point.x + options.radius + options.xAdjust,\n y2: point.y + options.radius + options.yAdjust,\n centerX: point.x + options.xAdjust,\n centerY: point.y + options.yAdjust,\n radius: options.radius,\n width: size,\n height: size\n };\n}\n\nfunction getChartDimensionByScale(scale, options) {\n const result = getDimensionByScale(scale, options) || options;\n return {\n start: Math.min(result.start, result.end),\n end: Math.max(result.start, result.end)\n };\n}\n\nfunction resolveFullLineProperties(scale, area, options) {\n const min = scaleValue(scale, options.value, NaN);\n const max = scaleValue(scale, options.endValue, min);\n if (scale.isHorizontal()) {\n area.x = min;\n area.x2 = max;\n } else {\n area.y = min;\n area.y2 = max;\n }\n}\n\nfunction resolveLimitedLineProperties(scales, area, options) {\n for (const scaleId of Object.keys(limitedLineScale)) {\n const scale = scales[retrieveScaleID(scales, options, scaleId)];\n if (scale) {\n const {min, max, start, end, startProp, endProp} = limitedLineScale[scaleId];\n const dim = getDimensionByScale(scale, {min: options[min], max: options[max], start: scale[start], end: scale[end]});\n area[startProp] = dim.start;\n area[endProp] = dim.end;\n }\n }\n}\n\nfunction calculateX({properties, options}, labelSize, position, padding) {\n const {x: start, x2: end, width: size} = properties;\n return calculatePosition$1({start, end, size, borderWidth: options.borderWidth}, {\n position: position.x,\n padding: {start: padding.left, end: padding.right},\n adjust: options.label.xAdjust,\n size: labelSize.width\n });\n}\n\nfunction calculateY({properties, options}, labelSize, position, padding) {\n const {y: start, y2: end, height: size} = properties;\n return calculatePosition$1({start, end, size, borderWidth: options.borderWidth}, {\n position: position.y,\n padding: {start: padding.top, end: padding.bottom},\n adjust: options.label.yAdjust,\n size: labelSize.height\n });\n}\n\nfunction calculatePosition$1(boxOpts, labelOpts) {\n const {start, end, borderWidth} = boxOpts;\n const {position, padding: {start: padStart, end: padEnd}, adjust} = labelOpts;\n const availableSize = end - borderWidth - start - padStart - padEnd - labelOpts.size;\n return start + borderWidth / 2 + adjust + getRelativePosition(availableSize, position);\n}\n\nfunction resolveLabelElementProperties$1(chart, properties, options) {\n const label = options.label;\n label.backgroundColor = 'transparent';\n label.callout.display = false;\n const position = toPosition(label.position);\n const padding = toPadding(label.padding);\n const labelSize = measureLabelSize(chart.ctx, label);\n const x = calculateX({properties, options}, labelSize, position, padding);\n const y = calculateY({properties, options}, labelSize, position, padding);\n const width = labelSize.width + padding.width;\n const height = labelSize.height + padding.height;\n return {\n x,\n y,\n x2: x + width,\n y2: y + height,\n width,\n height,\n centerX: x + width / 2,\n centerY: y + height / 2,\n rotation: label.rotation\n };\n\n}\n\n/**\n * @typedef {import('chart.js').Point} Point\n */\n\n/**\n * Rotate a `point` relative to `center` point by `angle`\n * @param {Point} point - the point to rotate\n * @param {Point} center - center point for rotation\n * @param {number} angle - angle for rotation, in radians\n * @returns {Point} rotated point\n */\nfunction rotated(point, center, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const cx = center.x;\n const cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nconst moveHooks = ['enter', 'leave'];\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\nconst eventHooks = moveHooks.concat('click');\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\nfunction updateListeners(chart, state, options) {\n state.listened = loadHooks(options, eventHooks, state.listeners);\n state.moveListened = false;\n state._getElements = getElements; // for testing\n\n moveHooks.forEach(hook => {\n if (isFunction(options[hook])) {\n state.moveListened = true;\n }\n });\n\n if (!state.listened || !state.moveListened) {\n state.annotations.forEach(scope => {\n if (!state.listened && isFunction(scope.click)) {\n state.listened = true;\n }\n if (!state.moveListened) {\n moveHooks.forEach(hook => {\n if (isFunction(scope[hook])) {\n state.listened = true;\n state.moveListened = true;\n }\n });\n }\n });\n }\n}\n\n/**\n * @param {Object} state\n * @param {ChartEvent} event\n * @param {AnnotationPluginOptions} options\n * @return {boolean|undefined}\n */\nfunction handleEvent(state, event, options) {\n if (state.listened) {\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n return handleMoveEvents(state, event, options);\n case 'click':\n return handleClickEvents(state, event, options);\n }\n }\n}\n\nfunction handleMoveEvents(state, event, options) {\n if (!state.moveListened) {\n return;\n }\n\n let elements;\n\n if (event.type === 'mousemove') {\n elements = getElements(state, event, options.interaction);\n } else {\n elements = [];\n }\n\n const previous = state.hovered;\n state.hovered = elements;\n\n const context = {state, event};\n let changed = dispatchMoveEvents(context, 'leave', previous, elements);\n return dispatchMoveEvents(context, 'enter', elements, previous) || changed;\n}\n\nfunction dispatchMoveEvents({state, event}, hook, elements, checkElements) {\n let changed;\n for (const element of elements) {\n if (checkElements.indexOf(element) < 0) {\n changed = dispatchEvent(element.options[hook] || state.listeners[hook], element, event) || changed;\n }\n }\n return changed;\n}\n\nfunction handleClickEvents(state, event, options) {\n const listeners = state.listeners;\n const elements = getElements(state, event, options.interaction);\n let changed;\n for (const element of elements) {\n changed = dispatchEvent(element.options.click || listeners.click, element, event) || changed;\n }\n return changed;\n}\n\nfunction dispatchEvent(handler, element, event) {\n return callback(handler, [element.$context, event]) === true;\n}\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst elementHooks = ['afterDraw', 'beforeDraw'];\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\nfunction updateHooks(chart, state, options) {\n const visibleElements = state.visibleElements;\n state.hooked = loadHooks(options, elementHooks, state.hooks);\n\n if (!state.hooked) {\n visibleElements.forEach(scope => {\n if (!state.hooked) {\n elementHooks.forEach(hook => {\n if (isFunction(scope.options[hook])) {\n state.hooked = true;\n }\n });\n }\n });\n }\n}\n\n/**\n * @param {Object} state\n * @param {AnnotationElement} element\n * @param {string} hook\n */\nfunction invokeHook(state, element, hook) {\n if (state.hooked) {\n const callbackHook = element.options[hook] || state.hooks[hook];\n return callback(callbackHook, [element.$context]);\n }\n}\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n */\n\n/**\n * @param {Chart} chart\n * @param {Scale} scale\n * @param {CoreAnnotationOptions[]} annotations\n */\nfunction adjustScaleRange(chart, scale, annotations) {\n const range = getScaleLimits(chart.scales, scale, annotations);\n let changed = changeScaleLimit(scale, range, 'min', 'suggestedMin');\n changed = changeScaleLimit(scale, range, 'max', 'suggestedMax') || changed;\n if (changed && isFunction(scale.handleTickRangeOptions)) {\n scale.handleTickRangeOptions();\n }\n}\n\n/**\n * @param {CoreAnnotationOptions[]} annotations\n * @param {{ [key: string]: Scale }} scales\n */\nfunction verifyScaleOptions(annotations, scales) {\n for (const annotation of annotations) {\n verifyScaleIDs(annotation, scales);\n }\n}\n\nfunction changeScaleLimit(scale, range, limit, suggestedLimit) {\n if (isFinite(range[limit]) && !scaleLimitDefined(scale.options, limit, suggestedLimit)) {\n const changed = scale[limit] !== range[limit];\n scale[limit] = range[limit];\n return changed;\n }\n}\n\nfunction scaleLimitDefined(scaleOptions, limit, suggestedLimit) {\n return defined(scaleOptions[limit]) || defined(scaleOptions[suggestedLimit]);\n}\n\nfunction verifyScaleIDs(annotation, scales) {\n for (const key of ['scaleID', 'xScaleID', 'yScaleID']) {\n const scaleID = retrieveScaleID(scales, annotation, key);\n if (scaleID && !scales[scaleID] && verifyProperties(annotation, key)) {\n console.warn(`No scale found with id '${scaleID}' for annotation '${annotation.id}'`);\n }\n }\n}\n\nfunction verifyProperties(annotation, key) {\n if (key === 'scaleID') {\n return true;\n }\n const axis = key.charAt(0);\n for (const prop of ['Min', 'Max', 'Value']) {\n if (defined(annotation[axis + prop])) {\n return true;\n }\n }\n return false;\n}\n\nfunction getScaleLimits(scales, scale, annotations) {\n const axis = scale.axis;\n const scaleID = scale.id;\n const scaleIDOption = axis + 'ScaleID';\n const limits = {\n min: valueOrDefault(scale.min, Number.NEGATIVE_INFINITY),\n max: valueOrDefault(scale.max, Number.POSITIVE_INFINITY)\n };\n for (const annotation of annotations) {\n if (annotation.scaleID === scaleID) {\n updateLimits(annotation, scale, ['value', 'endValue'], limits);\n } else if (retrieveScaleID(scales, annotation, scaleIDOption) === scaleID) {\n updateLimits(annotation, scale, [axis + 'Min', axis + 'Max', axis + 'Value'], limits);\n }\n }\n return limits;\n}\n\nfunction updateLimits(annotation, scale, props, limits) {\n for (const prop of props) {\n const raw = annotation[prop];\n if (defined(raw)) {\n const value = scale.parse(raw);\n limits.min = Math.min(limits.min, value);\n limits.max = Math.max(limits.max, value);\n }\n }\n}\n\nclass BoxAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation));\n return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options.borderWidth);\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n ctx.save();\n translate(ctx, this.getCenterPoint(), this.options.rotation);\n drawBox(ctx, this, this.options);\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n return resolveBoxAndLabelProperties(chart, options);\n }\n}\n\nBoxAnnotation.id = 'boxAnnotation';\n\nBoxAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n label: {\n backgroundColor: 'transparent',\n borderWidth: 0,\n callout: {\n display: false\n },\n color: 'black',\n content: null,\n display: false,\n drawTime: undefined,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: 'bold'\n },\n height: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: undefined,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n yAdjust: 0,\n z: undefined\n },\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nBoxAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nBoxAnnotation.descriptors = {\n label: {\n _fallback: true\n }\n};\n\nconst positions = ['left', 'bottom', 'top', 'right'];\n\nclass LabelAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.rotation));\n return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options.borderWidth);\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const options = this.options;\n const visible = !defined(this._visible) || this._visible;\n if (!options.display || !options.content || !visible) {\n return;\n }\n ctx.save();\n translate(ctx, this.getCenterPoint(), this.rotation);\n drawCallout(ctx, this);\n drawBox(ctx, this, options);\n drawLabel(ctx, getLabelSize(this), options);\n ctx.restore();\n }\n\n resolveElementProperties(chart, options) {\n let point;\n if (!isBoundToPoint(options)) {\n const {centerX, centerY} = resolveBoxProperties(chart, options);\n point = {x: centerX, y: centerY};\n } else {\n point = getChartPoint(chart, options);\n }\n const padding = toPadding(options.padding);\n const labelSize = measureLabelSize(chart.ctx, options);\n const boxSize = measureRect(point, labelSize, options, padding);\n return {\n initProperties: initAnimationProperties(chart, boxSize, options),\n pointX: point.x,\n pointY: point.y,\n ...boxSize,\n rotation: options.rotation\n };\n }\n}\n\nLabelAnnotation.id = 'labelAnnotation';\n\nLabelAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundColor: 'transparent',\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 0,\n borderShadowColor: 'transparent',\n borderWidth: 0,\n callout: {\n borderCapStyle: 'butt',\n borderColor: undefined,\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 1,\n display: false,\n margin: 5,\n position: 'auto',\n side: 5,\n start: '50%',\n },\n color: 'black',\n content: null,\n display: true,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: undefined\n },\n height: undefined,\n init: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n textAlign: 'center',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nLabelAnnotation.defaultRoutes = {\n borderColor: 'color'\n};\n\nfunction measureRect(point, size, options, padding) {\n const width = size.width + padding.width + options.borderWidth;\n const height = size.height + padding.height + options.borderWidth;\n const position = toPosition(options.position, 'center');\n const x = calculatePosition(point.x, width, options.xAdjust, position.x);\n const y = calculatePosition(point.y, height, options.yAdjust, position.y);\n\n return {\n x,\n y,\n x2: x + width,\n y2: y + height,\n width,\n height,\n centerX: x + width / 2,\n centerY: y + height / 2\n };\n}\n\nfunction calculatePosition(start, size, adjust = 0, position) {\n return start - getRelativePosition(size, position) + adjust;\n}\n\nfunction drawCallout(ctx, element) {\n const {pointX, pointY, options} = element;\n const callout = options.callout;\n const calloutPosition = callout && callout.display && resolveCalloutPosition(element, callout);\n if (!calloutPosition || isPointInRange(element, callout, calloutPosition)) {\n return;\n }\n\n ctx.save();\n ctx.beginPath();\n const stroke = setBorderStyle(ctx, callout);\n if (!stroke) {\n return ctx.restore();\n }\n const {separatorStart, separatorEnd} = getCalloutSeparatorCoord(element, calloutPosition);\n const {sideStart, sideEnd} = getCalloutSideCoord(element, calloutPosition, separatorStart);\n if (callout.margin > 0 || options.borderWidth === 0) {\n ctx.moveTo(separatorStart.x, separatorStart.y);\n ctx.lineTo(separatorEnd.x, separatorEnd.y);\n }\n ctx.moveTo(sideStart.x, sideStart.y);\n ctx.lineTo(sideEnd.x, sideEnd.y);\n const rotatedPoint = rotated({x: pointX, y: pointY}, element.getCenterPoint(), toRadians(-element.rotation));\n ctx.lineTo(rotatedPoint.x, rotatedPoint.y);\n ctx.stroke();\n ctx.restore();\n}\n\nfunction getCalloutSeparatorCoord(element, position) {\n const {x, y, x2, y2} = element;\n const adjust = getCalloutSeparatorAdjust(element, position);\n let separatorStart, separatorEnd;\n if (position === 'left' || position === 'right') {\n separatorStart = {x: x + adjust, y};\n separatorEnd = {x: separatorStart.x, y: y2};\n } else {\n // position 'top' or 'bottom'\n separatorStart = {x, y: y + adjust};\n separatorEnd = {x: x2, y: separatorStart.y};\n }\n return {separatorStart, separatorEnd};\n}\n\nfunction getCalloutSeparatorAdjust(element, position) {\n const {width, height, options} = element;\n const adjust = options.callout.margin + options.borderWidth / 2;\n if (position === 'right') {\n return width + adjust;\n } else if (position === 'bottom') {\n return height + adjust;\n }\n return -adjust;\n}\n\nfunction getCalloutSideCoord(element, position, separatorStart) {\n const {y, width, height, options} = element;\n const start = options.callout.start;\n const side = getCalloutSideAdjust(position, options.callout);\n let sideStart, sideEnd;\n if (position === 'left' || position === 'right') {\n sideStart = {x: separatorStart.x, y: y + getSize(height, start)};\n sideEnd = {x: sideStart.x + side, y: sideStart.y};\n } else {\n // position 'top' or 'bottom'\n sideStart = {x: separatorStart.x + getSize(width, start), y: separatorStart.y};\n sideEnd = {x: sideStart.x, y: sideStart.y + side};\n }\n return {sideStart, sideEnd};\n}\n\nfunction getCalloutSideAdjust(position, options) {\n const side = options.side;\n if (position === 'left' || position === 'top') {\n return -side;\n }\n return side;\n}\n\nfunction resolveCalloutPosition(element, options) {\n const position = options.position;\n if (positions.includes(position)) {\n return position;\n }\n return resolveCalloutAutoPosition(element, options);\n}\n\nfunction resolveCalloutAutoPosition(element, options) {\n const {x, y, x2, y2, width, height, pointX, pointY, centerX, centerY, rotation} = element;\n const center = {x: centerX, y: centerY};\n const start = options.start;\n const xAdjust = getSize(width, start);\n const yAdjust = getSize(height, start);\n const xPoints = [x, x + xAdjust, x + xAdjust, x2];\n const yPoints = [y + yAdjust, y2, y, y2];\n const result = [];\n for (let index = 0; index < 4; index++) {\n const rotatedPoint = rotated({x: xPoints[index], y: yPoints[index]}, center, toRadians(rotation));\n result.push({\n position: positions[index],\n distance: distanceBetweenPoints(rotatedPoint, {x: pointX, y: pointY})\n });\n }\n return result.sort((a, b) => a.distance - b.distance)[0].position;\n}\n\nfunction getLabelSize({x, y, width, height, options}) {\n const hBorderWidth = options.borderWidth / 2;\n const padding = toPadding(options.padding);\n return {\n x: x + padding.left + hBorderWidth,\n y: y + padding.top + hBorderWidth,\n width: width - padding.left - padding.right - options.borderWidth,\n height: height - padding.top - padding.bottom - options.borderWidth\n };\n}\n\nfunction isPointInRange(element, callout, position) {\n const {pointX, pointY} = element;\n const margin = callout.margin;\n let x = pointX;\n let y = pointY;\n if (position === 'left') {\n x += margin;\n } else if (position === 'right') {\n x -= margin;\n } else if (position === 'top') {\n y += margin;\n } else if (position === 'bottom') {\n y -= margin;\n }\n return element.inRange(x, y);\n}\n\nconst pointInLine = (p1, p2, t) => ({x: p1.x + t * (p2.x - p1.x), y: p1.y + t * (p2.y - p1.y)});\nconst interpolateX = (y, p1, p2) => pointInLine(p1, p2, Math.abs((y - p1.y) / (p2.y - p1.y))).x;\nconst interpolateY = (x, p1, p2) => pointInLine(p1, p2, Math.abs((x - p1.x) / (p2.x - p1.x))).y;\nconst sqr = v => v * v;\nconst rangeLimit = (mouseX, mouseY, {x, y, x2, y2}, axis) => axis === 'y' ? {start: Math.min(y, y2), end: Math.max(y, y2), value: mouseY} : {start: Math.min(x, x2), end: Math.max(x, x2), value: mouseX};\n// http://www.independent-software.com/determining-coordinates-on-a-html-canvas-bezier-curve.html\nconst coordInCurve = (start, cp, end, t) => (1 - t) * (1 - t) * start + 2 * (1 - t) * t * cp + t * t * end;\nconst pointInCurve = (start, cp, end, t) => ({x: coordInCurve(start.x, cp.x, end.x, t), y: coordInCurve(start.y, cp.y, end.y, t)});\nconst coordAngleInCurve = (start, cp, end, t) => 2 * (1 - t) * (cp - start) + 2 * t * (end - cp);\nconst angleInCurve = (start, cp, end, t) => -Math.atan2(coordAngleInCurve(start.x, cp.x, end.x, t), coordAngleInCurve(start.y, cp.y, end.y, t)) + 0.5 * PI;\n\nclass LineAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const hBorderWidth = this.options.borderWidth / 2;\n if (axis !== 'x' && axis !== 'y') {\n const point = {mouseX, mouseY};\n const {path, ctx} = this;\n if (path) {\n setBorderStyle(ctx, this.options);\n const {chart} = this.$context;\n const mx = mouseX * chart.currentDevicePixelRatio;\n const my = mouseY * chart.currentDevicePixelRatio;\n const result = ctx.isPointInStroke(path, mx, my) || isOnLabel(this, point, useFinalPosition);\n ctx.restore();\n return result;\n }\n const epsilon = sqr(hBorderWidth);\n return intersects(this, point, epsilon, useFinalPosition) || isOnLabel(this, point, useFinalPosition);\n }\n return inAxisRange(this, {mouseX, mouseY}, axis, {hBorderWidth, useFinalPosition});\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {x, y, x2, y2, cp, options} = this;\n\n ctx.save();\n if (!setBorderStyle(ctx, options)) {\n // no border width, then line is not drawn\n return ctx.restore();\n }\n setShadowStyle(ctx, options);\n\n const length = Math.sqrt(Math.pow(x2 - x, 2) + Math.pow(y2 - y, 2));\n if (options.curve && cp) {\n drawCurve(ctx, this, cp, length);\n return ctx.restore();\n }\n const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(this);\n const angle = Math.atan2(y2 - y, x2 - x);\n ctx.translate(x, y);\n ctx.rotate(angle);\n ctx.beginPath();\n ctx.moveTo(0 + startAdjust, 0);\n ctx.lineTo(length - endAdjust, 0);\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n drawArrowHead(ctx, 0, startAdjust, startOpts);\n drawArrowHead(ctx, length, -endAdjust, endOpts);\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n const area = resolveLineProperties(chart, options);\n const {x, y, x2, y2} = area;\n const inside = isLineInArea(area, chart.chartArea);\n const properties = inside\n ? limitLineToArea({x, y}, {x: x2, y: y2}, chart.chartArea)\n : {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)};\n properties.centerX = (x2 + x) / 2;\n properties.centerY = (y2 + y) / 2;\n properties.initProperties = initAnimationProperties(chart, properties, options);\n if (options.curve) {\n const p1 = {x: properties.x, y: properties.y};\n const p2 = {x: properties.x2, y: properties.y2};\n properties.cp = getControlPoint(properties, options, distanceBetweenPoints(p1, p2));\n }\n const labelProperties = resolveLabelElementProperties(chart, properties, options.label);\n // additonal prop to manage zoom/pan\n labelProperties._visible = inside;\n\n properties.elements = [{\n type: 'label',\n optionScope: 'label',\n properties: labelProperties,\n initProperties: properties.initProperties\n }];\n return properties;\n }\n}\n\nLineAnnotation.id = 'lineAnnotation';\n\nconst arrowHeadsDefaults = {\n backgroundColor: undefined,\n backgroundShadowColor: undefined,\n borderColor: undefined,\n borderDash: undefined,\n borderDashOffset: undefined,\n borderShadowColor: undefined,\n borderWidth: undefined,\n display: undefined,\n fill: undefined,\n length: undefined,\n shadowBlur: undefined,\n shadowOffsetX: undefined,\n shadowOffsetY: undefined,\n width: undefined\n};\n\nLineAnnotation.defaults = {\n adjustScaleRange: true,\n arrowHeads: {\n display: false,\n end: Object.assign({}, arrowHeadsDefaults),\n fill: false,\n length: 12,\n start: Object.assign({}, arrowHeadsDefaults),\n width: 6\n },\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 2,\n curve: false,\n controlPoint: {\n y: '-50%'\n },\n display: true,\n endValue: undefined,\n init: undefined,\n label: {\n backgroundColor: 'rgba(0,0,0,0.8)',\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderColor: 'black',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 6,\n borderShadowColor: 'transparent',\n borderWidth: 0,\n callout: Object.assign({}, LabelAnnotation.defaults.callout),\n color: '#fff',\n content: null,\n display: false,\n drawTime: undefined,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: 'bold'\n },\n height: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n textAlign: 'center',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n yAdjust: 0,\n z: undefined\n },\n scaleID: undefined,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n value: undefined,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nLineAnnotation.descriptors = {\n arrowHeads: {\n start: {\n _fallback: true\n },\n end: {\n _fallback: true\n },\n _fallback: true\n }\n};\n\nLineAnnotation.defaultRoutes = {\n borderColor: 'color'\n};\n\nfunction inAxisRange(element, {mouseX, mouseY}, axis, {hBorderWidth, useFinalPosition}) {\n const limit = rangeLimit(mouseX, mouseY, element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis);\n return (limit.value >= limit.start - hBorderWidth && limit.value <= limit.end + hBorderWidth) || isOnLabel(element, {mouseX, mouseY}, useFinalPosition, axis);\n}\n\nfunction isLineInArea({x, y, x2, y2}, {top, right, bottom, left}) {\n return !(\n (x < left && x2 < left) ||\n (x > right && x2 > right) ||\n (y < top && y2 < top) ||\n (y > bottom && y2 > bottom)\n );\n}\n\nfunction limitPointToArea({x, y}, p2, {top, right, bottom, left}) {\n if (x < left) {\n y = interpolateY(left, {x, y}, p2);\n x = left;\n }\n if (x > right) {\n y = interpolateY(right, {x, y}, p2);\n x = right;\n }\n if (y < top) {\n x = interpolateX(top, {x, y}, p2);\n y = top;\n }\n if (y > bottom) {\n x = interpolateX(bottom, {x, y}, p2);\n y = bottom;\n }\n return {x, y};\n}\n\nfunction limitLineToArea(p1, p2, area) {\n const {x, y} = limitPointToArea(p1, p2, area);\n const {x: x2, y: y2} = limitPointToArea(p2, p1, area);\n return {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)};\n}\n\nfunction intersects(element, {mouseX, mouseY}, epsilon = EPSILON, useFinalPosition) {\n // Adapted from https://stackoverflow.com/a/6853926/25507\n const {x: x1, y: y1, x2, y2} = element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition);\n const dx = x2 - x1;\n const dy = y2 - y1;\n const lenSq = sqr(dx) + sqr(dy);\n const t = lenSq === 0 ? -1 : ((mouseX - x1) * dx + (mouseY - y1) * dy) / lenSq;\n let xx, yy;\n if (t < 0) {\n xx = x1;\n yy = y1;\n } else if (t > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + t * dx;\n yy = y1 + t * dy;\n }\n return (sqr(mouseX - xx) + sqr(mouseY - yy)) <= epsilon;\n}\n\nfunction isOnLabel(element, {mouseX, mouseY}, useFinalPosition, axis) {\n const label = element.label;\n return label.options.display && label.inRange(mouseX, mouseY, axis, useFinalPosition);\n}\n\nfunction resolveLabelElementProperties(chart, properties, options) {\n const borderWidth = options.borderWidth;\n const padding = toPadding(options.padding);\n const textSize = measureLabelSize(chart.ctx, options);\n const width = textSize.width + padding.width + borderWidth;\n const height = textSize.height + padding.height + borderWidth;\n return calculateLabelPosition(properties, options, {width, height, padding}, chart.chartArea);\n}\n\nfunction calculateAutoRotation(properties) {\n const {x, y, x2, y2} = properties;\n const rotation = Math.atan2(y2 - y, x2 - x);\n // Flip the rotation if it goes > PI/2 or < -PI/2, so label stays upright\n return rotation > PI / 2 ? rotation - PI : rotation < PI / -2 ? rotation + PI : rotation;\n}\n\nfunction calculateLabelPosition(properties, label, sizes, chartArea) {\n const {width, height, padding} = sizes;\n const {xAdjust, yAdjust} = label;\n const p1 = {x: properties.x, y: properties.y};\n const p2 = {x: properties.x2, y: properties.y2};\n const rotation = label.rotation === 'auto' ? calculateAutoRotation(properties) : toRadians(label.rotation);\n const size = rotatedSize(width, height, rotation);\n const t = calculateT(properties, label, {labelSize: size, padding}, chartArea);\n const pt = properties.cp ? pointInCurve(p1, properties.cp, p2, t) : pointInLine(p1, p2, t);\n const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: padding.left};\n const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: padding.top};\n const centerX = adjustLabelCoordinate(pt.x, xCoordinateSizes) + xAdjust;\n const centerY = adjustLabelCoordinate(pt.y, yCoordinateSizes) + yAdjust;\n return {\n x: centerX - (width / 2),\n y: centerY - (height / 2),\n x2: centerX + (width / 2),\n y2: centerY + (height / 2),\n centerX,\n centerY,\n pointX: pt.x,\n pointY: pt.y,\n width,\n height,\n rotation: toDegrees(rotation)\n };\n}\n\nfunction rotatedSize(width, height, rotation) {\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n return {\n w: Math.abs(width * cos) + Math.abs(height * sin),\n h: Math.abs(width * sin) + Math.abs(height * cos)\n };\n}\n\nfunction calculateT(properties, label, sizes, chartArea) {\n let t;\n const space = spaceAround(properties, chartArea);\n if (label.position === 'start') {\n t = calculateTAdjust({w: properties.x2 - properties.x, h: properties.y2 - properties.y}, sizes, label, space);\n } else if (label.position === 'end') {\n t = 1 - calculateTAdjust({w: properties.x - properties.x2, h: properties.y - properties.y2}, sizes, label, space);\n } else {\n t = getRelativePosition(1, label.position);\n }\n return t;\n}\n\nfunction calculateTAdjust(lineSize, sizes, label, space) {\n const {labelSize, padding} = sizes;\n const lineW = lineSize.w * space.dx;\n const lineH = lineSize.h * space.dy;\n const x = (lineW > 0) && ((labelSize.w / 2 + padding.left - space.x) / lineW);\n const y = (lineH > 0) && ((labelSize.h / 2 + padding.top - space.y) / lineH);\n return clamp(Math.max(x, y), 0, 0.25);\n}\n\nfunction spaceAround(properties, chartArea) {\n const {x, x2, y, y2} = properties;\n const t = Math.min(y, y2) - chartArea.top;\n const l = Math.min(x, x2) - chartArea.left;\n const b = chartArea.bottom - Math.max(y, y2);\n const r = chartArea.right - Math.max(x, x2);\n return {\n x: Math.min(l, r),\n y: Math.min(t, b),\n dx: l <= r ? 1 : -1,\n dy: t <= b ? 1 : -1\n };\n}\n\nfunction adjustLabelCoordinate(coordinate, labelSizes) {\n const {size, min, max, padding} = labelSizes;\n const halfSize = size / 2;\n if (size > max - min) {\n // if it does not fit, display as much as possible\n return (max + min) / 2;\n }\n if (min >= (coordinate - padding - halfSize)) {\n coordinate = min + padding + halfSize;\n }\n if (max <= (coordinate + padding + halfSize)) {\n coordinate = max - padding - halfSize;\n }\n return coordinate;\n}\n\nfunction getArrowHeads(line) {\n const options = line.options;\n const arrowStartOpts = options.arrowHeads && options.arrowHeads.start;\n const arrowEndOpts = options.arrowHeads && options.arrowHeads.end;\n return {\n startOpts: arrowStartOpts,\n endOpts: arrowEndOpts,\n startAdjust: getLineAdjust(line, arrowStartOpts),\n endAdjust: getLineAdjust(line, arrowEndOpts)\n };\n}\n\nfunction getLineAdjust(line, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return 0;\n }\n const {length, width} = arrowOpts;\n const adjust = line.options.borderWidth / 2;\n const p1 = {x: length, y: width + adjust};\n const p2 = {x: 0, y: adjust};\n return Math.abs(interpolateX(0, p1, p2));\n}\n\nfunction drawArrowHead(ctx, offset, adjust, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return;\n }\n const {length, width, fill, backgroundColor, borderColor} = arrowOpts;\n const arrowOffsetX = Math.abs(offset - length) + adjust;\n ctx.beginPath();\n setShadowStyle(ctx, arrowOpts);\n setBorderStyle(ctx, arrowOpts);\n ctx.moveTo(arrowOffsetX, -width);\n ctx.lineTo(offset + adjust, 0);\n ctx.lineTo(arrowOffsetX, width);\n if (fill === true) {\n ctx.fillStyle = backgroundColor || borderColor;\n ctx.closePath();\n ctx.fill();\n ctx.shadowColor = 'transparent';\n } else {\n ctx.shadowColor = arrowOpts.borderShadowColor;\n }\n ctx.stroke();\n}\n\nfunction getControlPoint(properties, options, distance) {\n const {x, y, x2, y2, centerX, centerY} = properties;\n const angle = Math.atan2(y2 - y, x2 - x);\n const cp = toPosition(options.controlPoint, 0);\n const point = {\n x: centerX + getSize(distance, cp.x, false),\n y: centerY + getSize(distance, cp.y, false)\n };\n return rotated(point, {x: centerX, y: centerY}, angle);\n}\n\nfunction drawArrowHeadOnCurve(ctx, {x, y}, {angle, adjust}, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return;\n }\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(angle);\n drawArrowHead(ctx, 0, -adjust, arrowOpts);\n ctx.restore();\n}\n\nfunction drawCurve(ctx, element, cp, length) {\n const {x, y, x2, y2, options} = element;\n const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(element);\n const p1 = {x, y};\n const p2 = {x: x2, y: y2};\n const startAngle = angleInCurve(p1, cp, p2, 0);\n const endAngle = angleInCurve(p1, cp, p2, 1) - PI;\n const ps = pointInCurve(p1, cp, p2, startAdjust / length);\n const pe = pointInCurve(p1, cp, p2, 1 - endAdjust / length);\n\n const path = new Path2D();\n ctx.beginPath();\n path.moveTo(ps.x, ps.y);\n path.quadraticCurveTo(cp.x, cp.y, pe.x, pe.y);\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke(path);\n element.path = path;\n element.ctx = ctx;\n drawArrowHeadOnCurve(ctx, ps, {angle: startAngle, adjust: startAdjust}, startOpts);\n drawArrowHeadOnCurve(ctx, pe, {angle: endAngle, adjust: endAdjust}, endOpts);\n}\n\nclass EllipseAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const rotation = this.options.rotation;\n const borderWidth = this.options.borderWidth;\n if (axis !== 'x' && axis !== 'y') {\n return pointInEllipse({x: mouseX, y: mouseY}, this.getProps(['width', 'height', 'centerX', 'centerY'], useFinalPosition), rotation, borderWidth);\n }\n const {x, y, x2, y2} = this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition);\n const hBorderWidth = borderWidth / 2;\n const limit = axis === 'y' ? {start: y, end: y2} : {start: x, end: x2};\n const rotatedPoint = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-rotation));\n return rotatedPoint[axis] >= limit.start - hBorderWidth - EPSILON && rotatedPoint[axis] <= limit.end + hBorderWidth + EPSILON;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {width, height, centerX, centerY, options} = this;\n ctx.save();\n translate(ctx, this.getCenterPoint(), options.rotation);\n setShadowStyle(ctx, this.options);\n ctx.beginPath();\n ctx.fillStyle = options.backgroundColor;\n const stroke = setBorderStyle(ctx, options);\n ctx.ellipse(centerX, centerY, height / 2, width / 2, PI / 2, 0, 2 * PI);\n ctx.fill();\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n return resolveBoxAndLabelProperties(chart, options);\n }\n\n}\n\nEllipseAnnotation.id = 'ellipseAnnotation';\n\nEllipseAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n label: Object.assign({}, BoxAnnotation.defaults.label),\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nEllipseAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nEllipseAnnotation.descriptors = {\n label: {\n _fallback: true\n }\n};\n\nfunction pointInEllipse(p, ellipse, rotation, borderWidth) {\n const {width, height, centerX, centerY} = ellipse;\n const xRadius = width / 2;\n const yRadius = height / 2;\n\n if (xRadius <= 0 || yRadius <= 0) {\n return false;\n }\n // https://stackoverflow.com/questions/7946187/point-and-ellipse-rotated-position-test-algorithm\n const angle = toRadians(rotation || 0);\n const hBorderWidth = borderWidth / 2 || 0;\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const a = Math.pow(cosAngle * (p.x - centerX) + sinAngle * (p.y - centerY), 2);\n const b = Math.pow(sinAngle * (p.x - centerX) - cosAngle * (p.y - centerY), 2);\n return (a / Math.pow(xRadius + hBorderWidth, 2)) + (b / Math.pow(yRadius + hBorderWidth, 2)) <= 1.0001;\n}\n\nclass PointAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y, x2, y2, width} = this.getProps(['x', 'y', 'x2', 'y2', 'width'], useFinalPosition);\n const borderWidth = this.options.borderWidth;\n if (axis !== 'x' && axis !== 'y') {\n return inPointRange({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), width / 2, borderWidth);\n }\n const hBorderWidth = borderWidth / 2;\n const limit = axis === 'y' ? {start: y, end: y2, value: mouseY} : {start: x, end: x2, value: mouseX};\n return limit.value >= limit.start - hBorderWidth && limit.value <= limit.end + hBorderWidth;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const options = this.options;\n const borderWidth = options.borderWidth;\n if (options.radius < 0.1) {\n return;\n }\n ctx.save();\n ctx.fillStyle = options.backgroundColor;\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n drawPoint(ctx, this, this.centerX, this.centerY);\n if (stroke && !isImageOrCanvas(options.pointStyle)) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n options.borderWidth = borderWidth;\n }\n\n resolveElementProperties(chart, options) {\n const properties = resolvePointProperties(chart, options);\n properties.initProperties = initAnimationProperties(chart, properties, options);\n return properties;\n }\n}\n\nPointAnnotation.id = 'pointAnnotation';\n\nPointAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n pointStyle: 'circle',\n radius: 10,\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nPointAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nclass PolygonAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n if (axis !== 'x' && axis !== 'y') {\n return this.options.radius >= 0.1 && this.elements.length > 1 && pointIsInPolygon(this.elements, mouseX, mouseY, useFinalPosition);\n }\n const rotatedPoint = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation));\n const axisPoints = this.elements.map((point) => axis === 'y' ? point.bY : point.bX);\n const start = Math.min(...axisPoints);\n const end = Math.max(...axisPoints);\n return rotatedPoint[axis] >= start && rotatedPoint[axis] <= end;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {elements, options} = this;\n ctx.save();\n ctx.beginPath();\n ctx.fillStyle = options.backgroundColor;\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n let first = true;\n for (const el of elements) {\n if (first) {\n ctx.moveTo(el.x, el.y);\n first = false;\n } else {\n ctx.lineTo(el.x, el.y);\n }\n }\n ctx.closePath();\n ctx.fill();\n // If no border, don't draw it\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n }\n\n resolveElementProperties(chart, options) {\n const properties = resolvePointProperties(chart, options);\n const {sides, rotation} = options;\n const elements = [];\n const angle = (2 * PI) / sides;\n let rad = rotation * RAD_PER_DEG;\n for (let i = 0; i < sides; i++, rad += angle) {\n const elProps = buildPointElement(properties, options, rad);\n elProps.initProperties = initAnimationProperties(chart, properties, options);\n elements.push(elProps);\n }\n properties.elements = elements;\n return properties;\n }\n}\n\nPolygonAnnotation.id = 'polygonAnnotation';\n\nPolygonAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n point: {\n radius: 0\n },\n radius: 10,\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n sides: 3,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nPolygonAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nfunction buildPointElement({centerX, centerY}, {radius, borderWidth}, rad) {\n const halfBorder = borderWidth / 2;\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n const point = {x: centerX + sin * radius, y: centerY - cos * radius};\n return {\n type: 'point',\n optionScope: 'point',\n properties: {\n x: point.x,\n y: point.y,\n centerX: point.x,\n centerY: point.y,\n bX: centerX + sin * (radius + halfBorder),\n bY: centerY - cos * (radius + halfBorder)\n }\n };\n}\n\nfunction pointIsInPolygon(points, x, y, useFinalPosition) {\n let isInside = false;\n let A = points[points.length - 1].getProps(['bX', 'bY'], useFinalPosition);\n for (const point of points) {\n const B = point.getProps(['bX', 'bY'], useFinalPosition);\n if ((B.bY > y) !== (A.bY > y) && x < (A.bX - B.bX) * (y - B.bY) / (A.bY - B.bY) + B.bX) {\n isInside = !isInside;\n }\n A = B;\n }\n return isInside;\n}\n\nconst annotationTypes = {\n box: BoxAnnotation,\n ellipse: EllipseAnnotation,\n label: LabelAnnotation,\n line: LineAnnotation,\n point: PointAnnotation,\n polygon: PolygonAnnotation\n};\n\n/**\n * Register fallback for annotation elements\n * For example lineAnnotation options would be looked through:\n * - the annotation object (options.plugins.annotation.annotations[id])\n * - element options (options.elements.lineAnnotation)\n * - element defaults (defaults.elements.lineAnnotation)\n * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here)\n */\nObject.keys(annotationTypes).forEach(key => {\n defaults.describe(`elements.${annotationTypes[key].id}`, {\n _fallback: 'plugins.annotation.common'\n });\n});\n\nconst directUpdater = {\n update: Object.assign\n};\n\nconst hooks$1 = eventHooks.concat(elementHooks);\nconst resolve = (value, optDefs) => isObject(optDefs) ? resolveObj(value, optDefs) : value;\n\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").UpdateMode } UpdateMode\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\n/**\n * @param {string} prop\n * @returns {boolean}\n */\nconst isIndexable = (prop) => prop === 'color' || prop === 'font';\n\n/**\n * Resolve the annotation type, checking if is supported.\n * @param {string} [type=line] - annotation type\n * @returns {string} resolved annotation type\n */\nfunction resolveType(type = 'line') {\n if (annotationTypes[type]) {\n return type;\n }\n console.warn(`Unknown annotation type: '${type}', defaulting to 'line'`);\n return 'line';\n}\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n * @param {UpdateMode} mode\n */\nfunction updateElements(chart, state, options, mode) {\n const animations = resolveAnimations(chart, options.animations, mode);\n\n const annotations = state.annotations;\n const elements = resyncElements(state.elements, annotations);\n\n for (let i = 0; i < annotations.length; i++) {\n const annotationOptions = annotations[i];\n const element = getOrCreateElement(elements, i, annotationOptions.type);\n const resolver = annotationOptions.setContext(getContext(chart, element, annotationOptions));\n const properties = element.resolveElementProperties(chart, resolver);\n\n properties.skip = toSkip(properties);\n\n if ('elements' in properties) {\n updateSubElements(element, properties.elements, resolver, animations);\n // Remove the sub-element definitions from properties, so the actual elements\n // are not overwritten by their definitions\n delete properties.elements;\n }\n\n if (!defined(element.x)) {\n // If the element is newly created, assing the properties directly - to\n // make them readily awailable to any scriptable options. If we do not do this,\n // the properties retruned by `resolveElementProperties` are available only\n // after options resolution.\n Object.assign(element, properties);\n }\n\n Object.assign(element, properties.initProperties);\n properties.options = resolveAnnotationOptions(resolver);\n\n animations.update(element, properties);\n }\n}\n\nfunction toSkip(properties) {\n return isNaN(properties.x) || isNaN(properties.y);\n}\n\nfunction resolveAnimations(chart, animOpts, mode) {\n if (mode === 'reset' || mode === 'none' || mode === 'resize') {\n return directUpdater;\n }\n return new Animations(chart, animOpts);\n}\n\nfunction updateSubElements(mainElement, elements, resolver, animations) {\n const subElements = mainElement.elements || (mainElement.elements = []);\n subElements.length = elements.length;\n for (let i = 0; i < elements.length; i++) {\n const definition = elements[i];\n const properties = definition.properties;\n const subElement = getOrCreateElement(subElements, i, definition.type, definition.initProperties);\n const subResolver = resolver[definition.optionScope].override(definition);\n properties.options = resolveAnnotationOptions(subResolver);\n animations.update(subElement, properties);\n }\n}\n\nfunction getOrCreateElement(elements, index, type, initProperties) {\n const elementClass = annotationTypes[resolveType(type)];\n let element = elements[index];\n if (!element || !(element instanceof elementClass)) {\n element = elements[index] = new elementClass();\n Object.assign(element, initProperties);\n }\n return element;\n}\n\nfunction resolveAnnotationOptions(resolver) {\n const elementClass = annotationTypes[resolveType(resolver.type)];\n const result = {};\n result.id = resolver.id;\n result.type = resolver.type;\n result.drawTime = resolver.drawTime;\n Object.assign(result,\n resolveObj(resolver, elementClass.defaults),\n resolveObj(resolver, elementClass.defaultRoutes));\n for (const hook of hooks$1) {\n result[hook] = resolver[hook];\n }\n return result;\n}\n\nfunction resolveObj(resolver, defs) {\n const result = {};\n for (const prop of Object.keys(defs)) {\n const optDefs = defs[prop];\n const value = resolver[prop];\n if (isIndexable(prop) && isArray(value)) {\n result[prop] = value.map((item) => resolve(item, optDefs));\n } else {\n result[prop] = resolve(value, optDefs);\n }\n }\n return result;\n}\n\nfunction getContext(chart, element, annotation) {\n return element.$context || (element.$context = Object.assign(Object.create(chart.getContext()), {\n element,\n id: annotation.id,\n type: 'annotation'\n }));\n}\n\nfunction resyncElements(elements, annotations) {\n const count = annotations.length;\n const start = elements.length;\n\n if (start < count) {\n const add = count - start;\n elements.splice(start, 0, ...new Array(add));\n } else if (start > count) {\n elements.splice(count, start - count);\n }\n return elements;\n}\n\nvar version = \"3.0.1\";\n\nconst chartStates = new Map();\nconst hooks = eventHooks.concat(elementHooks);\n\nvar annotation = {\n id: 'annotation',\n\n version,\n\n beforeRegister() {\n requireVersion('chart.js', '4.0', Chart.version);\n },\n\n afterRegister() {\n Chart.register(annotationTypes);\n },\n\n afterUnregister() {\n Chart.unregister(annotationTypes);\n },\n\n beforeInit(chart) {\n chartStates.set(chart, {\n annotations: [],\n elements: [],\n visibleElements: [],\n listeners: {},\n listened: false,\n moveListened: false,\n hooks: {},\n hooked: false,\n hovered: []\n });\n },\n\n beforeUpdate(chart, args, options) {\n const state = chartStates.get(chart);\n const annotations = state.annotations = [];\n\n let annotationOptions = options.annotations;\n if (isObject(annotationOptions)) {\n Object.keys(annotationOptions).forEach(key => {\n const value = annotationOptions[key];\n if (isObject(value)) {\n value.id = key;\n annotations.push(value);\n }\n });\n } else if (isArray(annotationOptions)) {\n annotations.push(...annotationOptions);\n }\n verifyScaleOptions(annotations, chart.scales);\n },\n\n afterDataLimits(chart, args) {\n const state = chartStates.get(chart);\n adjustScaleRange(chart, args.scale, state.annotations.filter(a => a.display && a.adjustScaleRange));\n },\n\n afterUpdate(chart, args, options) {\n const state = chartStates.get(chart);\n updateListeners(chart, state, options);\n updateElements(chart, state, options, args.mode);\n state.visibleElements = state.elements.filter(el => !el.skip && el.options.display);\n updateHooks(chart, state, options);\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n draw(chart, 'beforeDatasetsDraw', options.clip);\n },\n\n afterDatasetsDraw(chart, _args, options) {\n draw(chart, 'afterDatasetsDraw', options.clip);\n },\n\n beforeDraw(chart, _args, options) {\n draw(chart, 'beforeDraw', options.clip);\n },\n\n afterDraw(chart, _args, options) {\n draw(chart, 'afterDraw', options.clip);\n },\n\n beforeEvent(chart, args, options) {\n const state = chartStates.get(chart);\n if (handleEvent(state, args.event, options)) {\n args.changed = true;\n }\n },\n\n afterDestroy(chart) {\n chartStates.delete(chart);\n },\n\n _getState(chart) {\n return chartStates.get(chart);\n },\n\n defaults: {\n animations: {\n numbers: {\n properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius'],\n type: 'number'\n },\n },\n clip: true,\n interaction: {\n mode: undefined,\n axis: undefined,\n intersect: undefined\n },\n common: {\n drawTime: 'afterDatasetsDraw',\n init: false,\n label: {\n }\n }\n },\n\n descriptors: {\n _indexable: false,\n _scriptable: (prop) => !hooks.includes(prop) && prop !== 'init',\n annotations: {\n _allKeys: false,\n _fallback: (prop, opts) => `elements.${annotationTypes[resolveType(opts.type)].id}`\n },\n interaction: {\n _fallback: true\n },\n common: {\n label: {\n _indexable: isIndexable,\n _fallback: true\n },\n _indexable: isIndexable\n }\n },\n\n additionalOptionScopes: ['']\n};\n\nfunction draw(chart, caller, clip) {\n const {ctx, chartArea} = chart;\n const state = chartStates.get(chart);\n\n if (clip) {\n clipArea(ctx, chartArea);\n }\n\n const drawableElements = getDrawableElements(state.visibleElements, caller).sort((a, b) => a.element.options.z - b.element.options.z);\n for (const item of drawableElements) {\n drawElement(ctx, chartArea, state, item);\n }\n\n if (clip) {\n unclipArea(ctx);\n }\n}\n\nfunction getDrawableElements(elements, caller) {\n const drawableElements = [];\n for (const el of elements) {\n if (el.options.drawTime === caller) {\n drawableElements.push({element: el, main: true});\n }\n if (el.elements && el.elements.length) {\n for (const sub of el.elements) {\n if (sub.options.display && sub.options.drawTime === caller) {\n drawableElements.push({element: sub});\n }\n }\n }\n }\n return drawableElements;\n}\n\nfunction drawElement(ctx, chartArea, state, item) {\n const el = item.element;\n if (item.main) {\n invokeHook(state, el, 'beforeDraw');\n el.draw(ctx, chartArea);\n invokeHook(state, el, 'afterDraw');\n } else {\n el.draw(ctx, chartArea);\n }\n}\n\nexport { annotation as default };\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, getSlideTransformEl as g, elementIndex as h, classesToTokens as i, getTranslate as j, elementTransitionEnd as k, isObject as l, makeElementsArray as m, nextTick as n, elementStyle as o, elementNextAll as p, elementPrevAll as q, animateCSSModeScroll as r, setCSSProperty as s, showWarning as t, extend as u, deleteProps as v };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, o as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, p as elementNextAll, q as elementPrevAll, j as getTranslate, r as animateCSSModeScroll, n as nextTick, t as showWarning, c as createElement, d as now, u as extend, h as elementIndex, v as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n if (isFullyVisible) {\n slides[i].classList.add(params.slideFullyVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(slideEl => {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides\n } = swiper.params;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (centeredSlides) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides\n } = params;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","/*************************************************/\r\n/* Slider */\r\n/*************************************************/\r\nimport Swiper from 'swiper';\r\nimport lottie from \"lottie-web\";\r\nimport { Navigation, Pagination } from 'swiper/modules';\r\n\r\nSwiper.use([Navigation, Pagination]);\r\n\r\nexport function slider() {\r\n const contentSliderSelector = \".content-slider__slides.swiper\";\r\n const contentBoxesSelector = \".content-boxes__content-boxes.swiper\";\r\n\r\n const handleSlideChangeTransitionEnd = function (swiper) {\r\n // Fix the tabindex for accessibility\r\n swiper.el.querySelectorAll(\".swiper-slide > a\").forEach((slide) => {\r\n slide.setAttribute(\"tabindex\", \"-1\");\r\n });\r\n\r\n const activeSlide = swiper.el.querySelector(\".swiper-slide-active > a\");\r\n if (activeSlide != null) {\r\n activeSlide.setAttribute(\"tabindex\", \"0\");\r\n }\r\n };\r\n\r\n const handleSlideChange = function () {\r\n // Ensure that the lazyloaded image on the duplicate slide has the correct class\r\n const nextDuplicateSlide = document.querySelector(\".swiper-slide-duplicate.swiper-slide-next\");\r\n if (nextDuplicateSlide != null) {\r\n const unloadedSlideImage = nextDuplicateSlide.querySelector(\"img.lazyloading\");\r\n if (unloadedSlideImage != null) {\r\n unloadedSlideImage.classList.replace(\"lazyloading\", \"lazyloaded\");\r\n }\r\n }\r\n }\r\n\r\n const init = function () {\r\n // Content Slider\r\n const contentSlider = [];\r\n const contentSliderElements = document.querySelectorAll(contentSliderSelector);\r\n if (contentSliderElements.length > 0) {\r\n contentSliderElements.forEach(slider => {\r\n contentSlider.push(new Swiper(slider, {\r\n slidesPerView: \"auto\",\r\n centeredSlides: true,\r\n loop: true,\r\n initialSlide: 0,\r\n speed: 600,\r\n pagination: {\r\n el: `#${slider.dataset.componentId} .swiper-pagination`,\r\n clickable: true,\r\n },\r\n navigation: {\r\n nextEl: `#${slider.dataset.componentId} .content-slider__button-next`,\r\n prevEl: `#${slider.dataset.componentId} .content-slider__button-prev`,\r\n },\r\n on: {\r\n slideChange: () => {\r\n handleSlideChange();\r\n },\r\n slideChangeTransitionEnd: (swiper) => {\r\n const activeSlide = swiper.slides[swiper.activeIndex];\r\n const lottieAnimation = activeSlide.closest('.lottie');\r\n\r\n if (lottieAnimation && lottieAnimation.lottieInstance) {\r\n lottieAnimation.lottieInstance.goToAndStop(0, true); // Reset to the beginning\r\n lottieAnimation.lottieInstance.play();\r\n }\r\n\r\n handleSlideChangeTransitionEnd(swiper);\r\n }\r\n }\r\n }));\r\n });\r\n }\r\n\r\n // Content Boxes\r\n const contentBoxes = [];\r\n const contentBoxesElements = document.querySelectorAll(contentBoxesSelector);\r\n if (contentBoxesElements.length > 0) {\r\n contentBoxesElements.forEach(slider => {\r\n contentBoxes.push(new Swiper(slider, {\r\n slidesPerView: 1.2,\r\n spaceBetween: 20,\r\n navigation: {\r\n nextEl: `#${slider.dataset.componentId} .content-boxes__button-next`,\r\n prevEl: `#${slider.dataset.componentId} .content-boxes__button-prev`,\r\n },\r\n breakpoints: {\r\n 768: {\r\n slidesPerView: 2,\r\n spaceBetween: 40,\r\n }\r\n },\r\n on: {\r\n slideChange: () => {\r\n handleSlideChange();\r\n },\r\n slideChangeTransitionEnd: (swiper) => {\r\n handleSlideChangeTransitionEnd(swiper);\r\n }\r\n }\r\n }));\r\n });\r\n }\r\n }\r\n\r\n init();\r\n}\r\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n } else if (res && res.length === 1) {\n res = res[0];\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (swiper.enabled) {\n update();\n return;\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}\n\nexport { Navigation as default };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, f as elementOuterSize, h as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">${params.bulletElement}>`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n","/*************************************************/\r\n/* PANEL */\r\n/*************************************************/\r\nimport customEventsNames from './../customEventsNames';\r\nexport function panel() {\r\n const init = () => {\r\n const panelButtons = document.querySelectorAll('.panel-button');\r\n const panelDivs = document.querySelectorAll('.panel-div');\r\n const panelOverlayMobileIcons = document.querySelectorAll('.panel-overlay--icon-mobile');\r\n const openClass = \"open\";\r\n const activeBodyClass = \"panel-active\";\r\n const menuButton = document.querySelector(\".burger-menu\");\r\n\r\n const getVimeoPlayer = (panelDiv) => {\r\n const iframe = panelDiv.querySelector('iframe');\r\n if (iframe && iframe.src.includes('vimeo.com')) {\r\n return new Vimeo.Player(iframe);\r\n }\r\n return null;\r\n };\r\n\r\n const togglePanel = (panelDiv, panelOverlayMobileIcon, panelButton) => {\r\n const isOpen = panelDiv.classList.toggle(openClass);\r\n panelDiv.setAttribute('aria-hidden', !isOpen);\r\n panelButton.setAttribute('aria-expanded', 'true');\r\n\r\n const panelOpened = new Event(customEventsNames.panelOpened);\r\n document.body.dispatchEvent(panelOpened);\r\n\r\n document.body.classList.add(activeBodyClass);\r\n const overlay = panelDiv.nextElementSibling;\r\n\r\n overlay.style.opacity = isOpen ? \".6\" : \"0\";\r\n overlay.style.pointerEvents = \"auto\"; // Ensure clicks go through the overlay when it's hidden\r\n\r\n panelOverlayMobileIcon.style.display = isOpen ? \"block\" : \"none\";\r\n menuButton.style.opacity = isOpen ? \"0\" : \"1\";\r\n\r\n //Push event to data layer\r\n window.dataLayer.push({\r\n 'event': 'panelOpen',\r\n 'panel': panelDiv.id\r\n });\r\n };\r\n\r\n const closePanel = (panelDiv, panelOverlayMobileIcon, panelButton) => {\r\n panelDiv.classList.remove(openClass);\r\n panelDiv.setAttribute('aria-hidden', 'true');\r\n panelButton.setAttribute('aria-expanded', 'false');\r\n document.body.classList.remove(activeBodyClass);\r\n\r\n const panelClosed = new Event(customEventsNames.panelClosed);\r\n document.body.dispatchEvent(panelClosed);\r\n\r\n const overlay = panelDiv.nextElementSibling;\r\n overlay.style.opacity = \"0\";\r\n overlay.style.pointerEvents = \"none\"; // Ensure clicks go through the overlay when it's hidden\r\n\r\n panelOverlayMobileIcon.style.display = \"none\";\r\n\r\n menuButton.style.opacity = \"1\";\r\n\r\n const player = getVimeoPlayer(panelDiv);\r\n if (player) {\r\n player.pause();\r\n }\r\n };\r\n\r\n panelButtons.forEach((panelButton, index) => {\r\n const panelDiv = panelDivs[index];\r\n const panelOverlayMobileIcon = panelOverlayMobileIcons[index];\r\n const panelButtonParent = panelButton.closest('.content-box__panel-button');\r\n\r\n // Register click on the .panel-button itself\r\n panelButton.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n togglePanel(panelDiv, panelOverlayMobileIcon, panelButton);\r\n });\r\n\r\n // Register click on the .content-box__panel-button div\r\n if (panelButtonParent) {\r\n panelButtonParent.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n togglePanel(panelDiv, panelOverlayMobileIcon, panelButton);\r\n });\r\n }\r\n\r\n panelDiv.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n });\r\n\r\n document.body.addEventListener('click', (e) => {\r\n if (e.target.classList.contains('overlay')) {\r\n closePanel(panelDiv, panelOverlayMobileIcon, panelButton);\r\n }\r\n });\r\n\r\n panelOverlayMobileIcon.addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n closePanel(panelDiv, panelOverlayMobileIcon, panelButton);\r\n });\r\n });\r\n };\r\n\r\n init();\r\n}\r\n","/*************************************************/\r\n/* Slider */\r\n/*************************************************/\r\nimport Swiper from 'swiper';\r\nimport { Mousewheel, Keyboard } from 'swiper/modules';\r\nSwiper.use([Mousewheel, Keyboard]);\r\nimport customEventsNames from './../customEventsNames';\r\n\r\n\r\nexport function pageScroll() {\r\n const sectionsSliderSelector = \".slides-container\";\r\n const sectionsSliderWrapperSelector = \".slides-container__wrapper\";\r\n const sectionsSliderSlideSelector = \".scroll\";\r\n const bodyActiveClass = \"page-scroll\";\r\n const swiperSpeed = 1000;\r\n var sectionsSlider;\r\n\r\n var enabled = document.querySelector(sectionsSliderSelector).getAttribute(\"data-scroll\");\r\n // Convert to boolean\r\n var isEnabled = enabled === \"True\" || enabled === \"1\";\r\n\r\n //Method for adding and removing the swiper classes. \r\n const togglePageScrollClasses = function (slider, wrapper, add) {\r\n if (add) {\r\n slider.classList.add('swiper');\r\n wrapper.classList.add('swiper-wrapper');\r\n document.body.classList.add(bodyActiveClass);\r\n\r\n } else {\r\n slider.classList.remove('swiper');\r\n wrapper.classList.remove('swiper-wrapper');\r\n document.body.classList.remove(bodyActiveClass);\r\n\r\n }\r\n };\r\n\r\n //Method for getting the index of a slide from it's hash\r\n const getSlideIndexFromHash = function (hash) {\r\n hash = hash.replace('#', '');\r\n const slides = document.querySelectorAll(`${sectionsSliderSelector} ${sectionsSliderSlideSelector}`);\r\n if (slides) {\r\n return Array.from(slides).findIndex(slide => slide.dataset.hash == hash);\r\n }\r\n return 0;\r\n }\r\n\r\n //Timeout to flag the body as loading, triggering style changes\r\n const flagBodyLoaded = function () {\r\n setTimeout(() => {\r\n document.body.classList.add('loaded');\r\n }, 100);\r\n };\r\n\r\n const getPanelFromHash = (hash) => {\r\n hash = hash.replace('#', '');\r\n const panel = document.getElementById(hash);\r\n if (panel && panel.classList.contains('panel-div')) {\r\n return panel;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const setupPageScroll = function (mediaQuery) {\r\n const initialHash = window.location.hash;\r\n const panel = getPanelFromHash(initialHash);\r\n if (mediaQuery.matches && isEnabled) {\r\n //We are on a large screen, so we initialize Swiper\r\n const sectionsSliderElement = document.querySelector(sectionsSliderSelector);\r\n const sectionsSliderWrapperElement = sectionsSliderElement?.querySelector(sectionsSliderWrapperSelector);\r\n if (sectionsSliderElement && sectionsSliderWrapperElement) {\r\n togglePageScrollClasses(sectionsSliderElement, sectionsSliderWrapperElement, true);\r\n\r\n //Getting the index of the initial slide from the hash\r\n let initialIndex = getSlideIndexFromHash(location.hash);\r\n //If its a panel, get the index from the slide that contains the panel\r\n if (panel) {\r\n initialIndex = getSlideIndexFromHash(panel.closest(sectionsSliderSlideSelector).dataset.hash);\r\n }\r\n\r\n sectionsSlider = new Swiper(sectionsSliderElement, {\r\n slideClass: 'scroll',\r\n direction: 'vertical',\r\n slidesPerView: 1,\r\n initialSlide: initialIndex,\r\n speed: swiperSpeed,\r\n mousewheel: true,\r\n keyboard: {\r\n enabled: true\r\n },\r\n on: {\r\n slideChange: function (swiper) {\r\n //Update the hash\r\n var newHash = swiper.slides[swiper.activeIndex].getAttribute('data-hash');\r\n history.replaceState(null, null, '#' + newHash);\r\n\r\n //Push event to data layer\r\n window.dataLayer.push({\r\n 'event': 'sectionChange',\r\n 'section': newHash\r\n });\r\n\r\n //Hiding the logo if needed\r\n const headerLogo = document.querySelector(\".header__logo\");\r\n if (swiper.activeIndex > 0) {\r\n headerLogo.style.display = \"none\";\r\n } else {\r\n headerLogo.style.display = \"flex\";\r\n }\r\n },\r\n init: (swiper) => {\r\n //We are waiting a bit with revealing the body, so everything looks good when we do so\r\n flagBodyLoaded();\r\n\r\n var initialSlideHash = swiper.slides[swiper.activeIndex].getAttribute('data-hash');\r\n //Push event to data layer\r\n window.dataLayer.push({\r\n 'event': 'sectionChange',\r\n 'section': initialSlideHash\r\n });\r\n\r\n if (panel) {\r\n const buttons = document.querySelector(`.panel-button[data-panel-id=\"${panel.id}\"]`);\r\n const button = panel.closest(sectionsSliderSlideSelector)?.querySelector('.panel-button')\r\n\r\n if (buttons) {\r\n swiper.disable();\r\n buttons.click();\r\n } else if (button) {\r\n swiper.disable();\r\n button.click();\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n\r\n //Handle anchor click\r\n const anchors = document.querySelectorAll('a[href^=\"/#\"], a[href^=\"#\"]');\r\n if (anchors) {\r\n anchors.forEach(item => {\r\n item.addEventListener('click', e => {\r\n if (document.body.classList.contains(bodyActiveClass) && e.target.tagName == 'A' && e.target.hash) {\r\n e.preventDefault();\r\n const targetElement = document.querySelector(e.target.hash);\r\n\r\n if (targetElement && targetElement.classList.contains('panel')) {\r\n const parentElement = targetElement.parentElement;\r\n const panelButton = parentElement.querySelector('.panel-button');\r\n\r\n if (panelButton) {\r\n let newIndex = sectionsSlider.activeIndex;\r\n newIndex = getSlideIndexFromHash(parentElement.parentElement.getAttribute('data-hash'));\r\n sectionsSlider.slideTo(newIndex, swiperSpeed);\r\n panelButton.click();\r\n }\r\n } else {\r\n let newIndex = sectionsSlider.activeIndex;\r\n newIndex = getSlideIndexFromHash(e.target.hash);\r\n sectionsSlider.slideTo(newIndex, swiperSpeed);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n //Handle panel opening\r\n document.body.addEventListener(customEventsNames.panelOpened, e => {\r\n sectionsSlider.disable();\r\n });\r\n\r\n //Handle panel closing\r\n document.body.addEventListener(customEventsNames.panelClosed, e => {\r\n sectionsSlider.enable();\r\n });\r\n }\r\n } else {\r\n //We are on a small screen, so we kill the swiper instance\r\n if (sectionsSlider) {\r\n sectionsSlider.destroy();\r\n }\r\n\r\n const sectionsSliderElement = document.querySelector(sectionsSliderSelector);\r\n const sectionsSliderWrapperElement = sectionsSliderElement?.querySelector(sectionsSliderWrapperSelector);\r\n if (sectionsSliderElement && sectionsSliderWrapperElement) {\r\n togglePageScrollClasses(sectionsSliderElement, sectionsSliderWrapperElement, false);\r\n }\r\n\r\n const headerLogo = document.querySelector(\".header__main\");\r\n headerLogo.style.display = \"flex\";\r\n\r\n flagBodyLoaded();\r\n }\r\n\r\n }\r\n\r\n\r\n const init = function () {\r\n //Setting up a media query for listening to page width\r\n const mediaQuery = window.matchMedia(\"(min-width:992px)\");\r\n mediaQuery.addEventListener(\"change\", function () {\r\n setupPageScroll(mediaQuery);\r\n });\r\n\r\n //Running setup code\r\n setupPageScroll(mediaQuery);\r\n }\r\n\r\n init();\r\n}\r\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { n as nextTick, d as now } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Mousewheel(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {\n return true;\n }\n }\n }\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n targetEl[method]('mouseenter', handleMouseEnter);\n targetEl[method]('mouseleave', handleMouseLeave);\n targetEl[method]('wheel', handle);\n }\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('addEventListener');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('removeEventListener');\n swiper.mousewheel.enabled = false;\n return true;\n }\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}\n\nexport { Mousewheel as default };\n","import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { a as elementParents, b as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const el = swiper.el;\n const swiperWidth = el.clientWidth;\n const swiperHeight = el.clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = elementOffset(el);\n if (rtl) swiperOffset.left -= el.scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n document.addEventListener('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n document.removeEventListener('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}\n\nexport { Keyboard as default };\n","/*************************************************/\r\n/* 3rd Party */\r\n/*************************************************/\r\n\r\n// Passive event listeners\r\ndocument.addEventListener('touchstart', () => { }, { passive: true });\r\ndocument.addEventListener('touchmove', () => { }, { passive: true });\r\n\r\n\r\n/*************************************************/\r\n/* Partials */\r\n/*************************************************/\r\n\r\nimport { intersectionObservation } from \"./partials/intersectionObservation.js\";\r\nimport { video } from \"./partials/video.js\";\r\nimport { modal } from \"./partials/modal.js\";\r\nimport { cookies } from \"./partials/cookies.js\";\r\nimport { chart } from \"./partials/chart.js\";\r\nimport { lottieAnimation } from \"./partials/lottieAnimations.js\";\r\nimport { slider } from \"./partials/slider.js\";\r\nimport { panel } from \"./partials/panel.js\";\r\nimport { pageScroll } from \"./partials/pageScroll.js\";\r\nimport { menu } from \"./partials/menu.js\";\r\nimport { header } from \"./partials/header.js\";\r\nimport { hoverEffects } from \"./partials/hoverEffects.js\";\r\n\r\n/*************************************************/\r\n/* Init */\r\n/*************************************************/\r\n\r\nconst ready = callback => {\r\n if (document.readyState != 'loading') callback();\r\n else document.addEventListener('DOMContentLoaded', callback);\r\n}\r\n\r\nready(() => {\r\n const body = document.querySelector('body');\r\n const bodyLoadingClass = 'is-loading';\r\n\r\n //Handle scroll to submitted form element\r\n const formSubmittedElement = document.getElementById(\"umbraco-forms-form-submitted--clienti\");\r\n if (formSubmittedElement) {\r\n window.scrollTo(0, formSubmittedElement.closest('.form-item').offsetTop);\r\n }\r\n\r\n //Add click listener to skip link\r\n document.querySelector('#skipLink').addEventListener('click', e => {\r\n document.querySelector('#mainContent').focus();\r\n });\r\n\r\n intersectionObservation();\r\n modal(body, bodyLoadingClass);\r\n video();\r\n cookies();\r\n chart();\r\n lottieAnimation();\r\n slider();\r\n panel();\r\n menu();\r\n header();\r\n pageScroll();\r\n hoverEffects();\r\n});\r\n","/*************************************************/\r\n/* INTERSECTION OBSERVATION */\r\n/*************************************************/\r\nimport { Counter } from \"./counter.js\";\r\n\r\nexport function intersectionObservation() {\r\n const activeClass = 'in-view',\r\n targetsClasses = [\".banner\", \".video-item__player\", \".counter\", \".fade-effect\"],\r\n options = {\r\n rootMargin: '200px'\r\n };\r\n const init = function () {\r\n let targets = [];\r\n for (var i = 0; i < targetsClasses.length; i++) {\r\n var targetElements = document.querySelectorAll(targetsClasses[i]);\r\n if (targetElements != null) {\r\n targets.push(...targetElements);\r\n }\r\n }\r\n if ('IntersectionObserver' in window) {\r\n function handleIntersection(entries) {\r\n entries.map((entry) => {\r\n if (entry.isIntersecting) {\r\n if (entry.target.dataset.autoplay) {\r\n entry.target.click();\r\n } else if (entry.target.classList.contains('counter')) {\r\n new Counter(entry.target);\r\n } else if (entry.target.classList.contains('fade-effect')) {\r\n entry.target.classList.add('fade-in');\r\n }\r\n else {\r\n entry.target.classList.add(entry.target.classList[0] + \"--\" + activeClass);\r\n observer.unobserve(entry.target);\r\n }\r\n }\r\n });\r\n }\r\n const observer = new IntersectionObserver(handleIntersection, options);\r\n targets.forEach(target => observer.observe(target));\r\n } else {\r\n targets.forEach(target => {\r\n target.classList.add(target.classList[0] + \"--\" + activeClass);\r\n });\r\n }\r\n };\r\n\r\n init();\r\n}","/*************************************************/\r\n/* MENU */\r\n/*************************************************/\r\nimport customEventsNames from './../customEventsNames';\r\n\r\nexport function menu() {\r\n const menuPanel = document.querySelector(\".menu-panel\");\r\n const menuButton = document.querySelector(\".menu-button\");\r\n const closeButton = document.querySelector(\".menu-panel--icon\");\r\n const overlays = document.querySelectorAll('.overlay');\r\n const panelActiveBodyClass = \"panel-active\";\r\n\r\n const toggleMenuPanel = (event) => {\r\n event.stopPropagation(); // Prevent event bubbling\r\n const isOpen = menuPanel.classList.toggle('open');\r\n document.body.classList.add(panelActiveBodyClass);\r\n\r\n const overlay = menuPanel.nextElementSibling;\r\n overlay.style.opacity = isOpen ? \".6\" : \"0\";\r\n overlay.style.pointerEvents = isOpen ? \"auto\" : \"none\"; // Ensure clicks go through the overlay when it's hidden\r\n };\r\n\r\n const closeMenuPanel = (event) => {\r\n event.stopPropagation(); // Prevent event bubbling\r\n menuPanel.classList.remove('open');\r\n document.body.classList.remove(panelActiveBodyClass);\r\n\r\n const overlay = menuPanel.nextElementSibling;\r\n overlay.style.opacity = \"0\";\r\n overlay.style.pointerEvents = \"none\"; // Ensure clicks go through the overlay when it's hidden\r\n\r\n };\r\n\r\n const handleBodyClick = (event) => {\r\n if (!menuPanel.contains(event.target) && !menuButton.contains(event.target)) {\r\n closeMenuPanel(event);\r\n }\r\n };\r\n\r\n const init = () => {\r\n menuButton.addEventListener('click', toggleMenuPanel);\r\n closeButton.addEventListener('click', closeMenuPanel);\r\n document.body.addEventListener('click', handleBodyClick);\r\n menuPanel.addEventListener('click', (event) => event.stopPropagation()); // Prevent menu item clicks from closing the menu\r\n };\r\n\r\n init();\r\n}\r\n","/*************************************************/\r\n/* HEADER */\r\n/*************************************************/\r\nexport function header(body) {\r\n let headerElement;\r\n const headerLogo = document.querySelector(\".header__main\");\r\n let scrollTimer;\r\n\r\n const setStickyHeader = () => {\r\n const top = window.pageYOffset || document.documentElement.scrollTop\r\n if (top > headerElement.offsetHeight / 2) {\r\n headerLogo.style = \"display: none\";\r\n\r\n } else {\r\n headerLogo.style = \"display: flex\";\r\n }\r\n }\r\n\r\n const init = () => {\r\n headerElement = document.querySelector(\".header\");\r\n\r\n // Sticky header\r\n setStickyHeader();\r\n window.addEventListener('scroll', e => {\r\n clearTimeout(scrollTimer);\r\n scrollTimer = setTimeout(function () {\r\n setStickyHeader();\r\n }, 10);\r\n });\r\n };\r\n\r\n init();\r\n\r\n}\r\n\r\n","/*************************************************/\r\n/* CHART */\r\n/*************************************************/\r\n\r\nimport Chart from 'chart.js/auto';\r\nimport annotationPlugin from 'chartjs-plugin-annotation';\r\n\r\nexport function chart() {\r\n Chart.register(annotationPlugin);\r\n\r\n const generateAnnotations = (coordinates, labels) => {\r\n const annotations = {};\r\n\r\n coordinates.forEach((coordinate, index) => {\r\n if (coordinate.x !== null && coordinate.y !== null) { // Ensure valid coordinates\r\n const labelAnnotation = {\r\n type: 'label',\r\n backgroundColor: '#063a2f',\r\n color: '#ffffff',\r\n content: labels[index],\r\n position: {\r\n x: 'center',\r\n y: 'end'\r\n },\r\n font: {\r\n size: 20,\r\n },\r\n padding: 20,\r\n xValue: coordinate.x,\r\n yValue: coordinate.y,\r\n yAdjust: 0,\r\n display: false, // Initially hidden\r\n id: `label-${index}` // Add ID for reference\r\n };\r\n\r\n annotations[`label-${index}`] = labelAnnotation;\r\n }\r\n });\r\n\r\n return annotations;\r\n };\r\n\r\n const generateMobileAnnotations = (coordinates, labels) => {\r\n const annotations = {};\r\n\r\n coordinates.forEach((coordinate, index) => {\r\n if (coordinate.x !== null && coordinate.y !== null) { // Ensure valid coordinates\r\n const labelAnnotation = {\r\n type: 'label',\r\n backgroundColor: '#063a2f',\r\n color: '#ffffff',\r\n content: labels[index],\r\n position: {\r\n x: 'center',\r\n y: 'end'\r\n },\r\n font: {\r\n size: 13,\r\n },\r\n padding: 10,\r\n xValue: coordinate.x,\r\n yValue: coordinate.y,\r\n yAdjust: 0,\r\n display: false, // Initially hidden\r\n id: `label-${index}` // Add ID for reference\r\n };\r\n\r\n annotations[`label-${index}`] = labelAnnotation;\r\n }\r\n });\r\n\r\n return annotations;\r\n };\r\n\r\n const coordinates = [\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: 25, y: 120 },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: 25, y: 120 },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: 25, y: 120 },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: 25, y: 120 },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: 25, y: 120 },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: 25, y: 120 },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: 25, y: 120 },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: null, y: null },\r\n { x: 25, y: 120 },\r\n { x: null, y: null },\r\n ];\r\n\r\n const mobileCoordinates = [\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n { x: 6, y: 140 },\r\n ];\r\n\r\n const labels = [\r\n [''],\r\n [''],\r\n ['Emerging from the energy crisis,', 'the year started off with high prices', 'reinforced by a cold spell in late 2022. '],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n ['Above average temperatures,', 'demand reduction measures,', 'and high gas storage levels send power', 'and gas prices trending downwards.'],\r\n [''],\r\n [''],\r\n [''],\r\n ['Strike action at French LNG terminals', 'and North Sea Platforms cause supply', 'concern for gas filling season. '],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n ['Markets remain on edge;', 'however, prices continue their downward', 'trend reinforced by high gas storage levels', 'and a strong market outlook. '],\r\n [''],\r\n [''],\r\n ['Markets rally as Eurogas and IEA', 'raise concerns on possible energy', 'supply constraints if Europe faces a hard winter.'],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n ['Strikes at Australian LNG terminals', 'push prices upward.'],\r\n [''],\r\n [''],\r\n [''],\r\n ['Outbreak of war in the Middle East', 'threatens international oil and LNG markets,', 'whilst the Panama Canal is hit by drought.'],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n [''],\r\n ['Prices continue their decline', 'on warmer than forecast weather.'],\r\n [''],\r\n ];\r\n\r\n const mobileLabels = [\r\n ['Emerging from the energy crisis,', 'the year started off with high prices', 'reinforced by a cold spell in late 2022. '],\r\n ['Above average temperatures,', 'demand reduction measures,', 'and high gas storage levels send power', 'and gas prices trending downwards.'],\r\n ['Strike action at French LNG terminals', 'and North Sea Platforms cause supply', 'concern for gas filling season. '],\r\n [''],\r\n ['Markets remain on edge;', 'however, prices continue their downward', 'trend reinforced by high gas storage levels', 'and a strong market outlook. '],\r\n ['Markets rally as Eurogas and IEA', 'raise concerns on possible energy', 'supply constraints if Europe faces', 'a hard winter.'],\r\n [''],\r\n [''],\r\n ['Strikes at Australian LNG terminals', 'push prices upward.'],\r\n ['Outbreak of war in the Middle East', 'threatens international oil and LNG markets,', 'whilst the Panama Canal is hit by drought.'],\r\n [''],\r\n ['Prices continue their decline', 'on warmer than forecast weather.'],\r\n ];\r\n\r\n const init = () => {\r\n // Data for the chart\r\n const data = {\r\n labels: ['Jan.', '', '', '', 'Feb.', '', '', '', 'Mar.', '', '', '', '', 'Apr.', '', '', '', 'May', '', '', '', 'Jun.', '', '', '', '', 'Jul.', '', '', '', 'Aug.', '', '', '', 'Sep.', '', '', '', '', 'Oct.', '', '', '', 'Nov.', '', '', '', 'Dec.', '', '', '', ''],\r\n datasets: [\r\n {\r\n type: 'line',\r\n label: 'Power Price € (EEX)',\r\n backgroundColor: '#013B2F',\r\n borderColor: '#013B2F',\r\n borderWidth: 2.5,\r\n data: [102, 73, 147, 170, 114, 143, 127, 114, 136, 119, 94, 77, 89, 120, 95, 99, 101, 93, 95, 74, 73, 63, 80, 105, 107, 79, 84, 79, 85, 84, 73, 67, 100, 122, 107, 101, 115, 80, 106, 74, 78, 95, 102, 62, 93, 90, 97, 132, 102, 86, 42, 21],\r\n tension: 0.4,\r\n pointStyle: false,\r\n order: 3\r\n },\r\n {\r\n type: 'line',\r\n label: 'Gas Price € (TTF)',\r\n backgroundColor: '#FFD002',\r\n borderColor: '#FFD002',\r\n borderWidth: 2.5,\r\n yAxisID: 'y1',\r\n data: [70, 66, 62, 60, 58, 56, 52, 51, 49, 46, 46, 41, 44, 47, 43, 41, 40, 37, 35, 31, 27, 24, 27, 35, 35, 34, 34, 28, 27, 29, 27, 32, 34, 36, 34, 33, 36, 37, 40, 32, 45, 47, 48, 43, 42, 44, 46, 44, 40, 35, 33, 33],\r\n tension: 0.4,\r\n pointStyle: false,\r\n order: 2\r\n },\r\n {\r\n type: 'line',\r\n data: [null, null, 108, null, null, null, null, 115, null, null, null, 75, null, null, null, null, null, null, 85, null, null, 55, null, null, null, null, null, null, null, null, null, null, null, null, null, 75, null, null, null, 73, null, null, null, null, null, null, null, null, null, 75, null],\r\n showLine: false,\r\n backgroundColor: '#00d161',\r\n borderColor: '#00d161',\r\n borderWidth: 10,\r\n radius: 10,\r\n order: 1,\r\n label: 'Annotations',\r\n hoverRadius: 15,\r\n }\r\n ]\r\n };\r\n\r\n const mobileData = {\r\n labels: ['Jan.', 'Feb.', 'Mar.', 'Apr.', 'May', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.'],\r\n datasets: [\r\n {\r\n type: 'line',\r\n label: 'Power Price (EEX)',\r\n backgroundColor: '#013B2F',\r\n borderColor: '#013B2F',\r\n borderWidth: 2.5,\r\n data: [118, 128, 103, 101, 82, 100, 78, 94, 101, 87, 91, 69],\r\n tension: 0.4,\r\n pointStyle: false,\r\n order: 3\r\n },\r\n {\r\n type: 'line',\r\n label: 'Gas Price (TTF)',\r\n backgroundColor: '#FFD002',\r\n borderColor: '#FFD002',\r\n borderWidth: 2.5,\r\n yAxisID: 'y1',\r\n data: [64, 54, 45, 43, 32, 31, 30, 33, 36, 43, 43, 36],\r\n tension: 0.4,\r\n pointStyle: false,\r\n order: 2\r\n },\r\n {\r\n type: 'line',\r\n data: [110, 115, 75, null, 90, 55, null, null, 65, 75, null, 70],\r\n showLine: false,\r\n backgroundColor: '#00d161',\r\n borderColor: '#00d161',\r\n borderWidth: 7,\r\n radius: 7,\r\n order: 1,\r\n label: 'Annotations',\r\n hoverRadius: 7,\r\n }\r\n ]\r\n };\r\n\r\n // Get the canvas element\r\n if (!document.getElementById('myChart')) {\r\n return\r\n }\r\n const ctx = document.getElementById('myChart').getContext('2d');\r\n\r\n const getResponsiveOptions = () => {\r\n const isMobile = window.innerWidth <= 768;\r\n \r\n const prioritizedLabels = ['Jan.', 'Feb.', 'Mar.', 'Apr.', 'May', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.'];\r\n \r\n const callbackFunction = function (value, index, values) {\r\n const label = this.getLabelForValue(value);\r\n if (prioritizedLabels.includes(label)) {\r\n return label;\r\n }\r\n \r\n if (isMobile) {\r\n // Mobile-specific logic to hide some labels\r\n return '';\r\n }\r\n \r\n return label;\r\n };\r\n \r\n return {\r\n responsive: true,\r\n interaction: {\r\n mode: isMobile ? 'index' : 'nearest',\r\n intersect: false,\r\n },\r\n stacked: false,\r\n plugins: {\r\n legend: {\r\n labels: {\r\n filter: function (legendItem, data) {\r\n // Exclude the \"Annotations\" dataset from the legend\r\n return legendItem.text !== 'Annotations';\r\n },\r\n pointStyle: 'circle',\r\n usePointStyle: true,\r\n padding: isMobile ? 20 : 30,\r\n },\r\n position: 'bottom',\r\n },\r\n tooltip: {\r\n enabled: false,\r\n usePointStyle: true,\r\n callbacks: {\r\n labelPointStyle: function (context) {\r\n return {\r\n pointStyle: 'circle',\r\n rotation: 0,\r\n };\r\n },\r\n },\r\n filter: function (tooltipItem) {\r\n // Exclude the \"Annotations\" dataset from the tooltip entirely\r\n return tooltipItem.dataset.label !== 'Annotations';\r\n },\r\n position: 'nearest',\r\n backgroundColor: '#b2f2d1',\r\n titleColor: '#063A2F',\r\n titleFont: {\r\n size: isMobile ? 13 : 16,\r\n weight: '500'\r\n },\r\n bodyFont: {\r\n size: isMobile ? 13 : 16,\r\n },\r\n bodyColor: '#063A2F',\r\n padding: isMobile ? 10 : 20,\r\n },\r\n annotation: {\r\n annotations: isMobile ? generateMobileAnnotations(mobileCoordinates, mobileLabels) : generateAnnotations(coordinates, labels)\r\n }\r\n },\r\n scales: {\r\n x: {\r\n ticks: {\r\n callback: callbackFunction,\r\n maxRotation: 0, // To prevent rotating labels\r\n autoSkip: false, // Ensure labels are not automatically skipped\r\n },\r\n grid: {\r\n drawOnChartArea: false,\r\n }\r\n },\r\n y: {\r\n type: 'linear',\r\n display: true,\r\n position: 'left',\r\n suggestedMin: 0,\r\n suggestedMax: 180,\r\n title: {\r\n display: !isMobile,\r\n text: 'Power EUR',\r\n font: {\r\n size: isMobile ? 13 : 16,\r\n weight: '900'\r\n }\r\n },\r\n },\r\n y1: {\r\n type: 'linear',\r\n display: true,\r\n position: 'right',\r\n suggestedMin: 0,\r\n suggestedMax: 80,\r\n title: {\r\n display: !isMobile,\r\n text: 'Gas EUR',\r\n font: {\r\n size: isMobile ? 13 : 16,\r\n weight: '900',\r\n },\r\n },\r\n grid: {\r\n drawOnChartArea: false,\r\n },\r\n },\r\n },\r\n onClick: (event) => {\r\n const elements = myChart.getElementsAtEventForMode(event, 'nearest', { intersect: true }, false);\r\n if (elements.length) {\r\n const element = elements[0];\r\n const datasetIndex = element.datasetIndex;\r\n const index = element.index;\r\n \r\n // Check if the clicked point is from the 'Annotations' dataset\r\n if (myChart.data.datasets[datasetIndex].label === 'Annotations') {\r\n // Hide all other annotations first\r\n coordinates.forEach((_, i) => {\r\n const annotationKey = `label-${i}`;\r\n if (myChart.options.plugins.annotation.annotations[annotationKey]) {\r\n myChart.options.plugins.annotation.annotations[annotationKey].display = false;\r\n }\r\n });\r\n \r\n const annotationKey = `label-${index}`;\r\n if (myChart.options.plugins.annotation.annotations[annotationKey]) {\r\n myChart.options.plugins.annotation.annotations[annotationKey].display = true;\r\n myChart.update('none');\r\n }\r\n }\r\n } else {\r\n // Hide all label annotations when not clicking on a point\r\n coordinates.forEach((_, index) => {\r\n const annotationKey = `label-${index}`;\r\n if (myChart.options.plugins.annotation.annotations[annotationKey]) {\r\n myChart.options.plugins.annotation.annotations[annotationKey].display = false;\r\n }\r\n });\r\n myChart.update('none');\r\n }\r\n },\r\n onHover: (event) => {\r\n const elements = myChart.getElementsAtEventForMode(event, 'nearest', { intersect: true }, false);\r\n if (elements.length) {\r\n const element = elements[0];\r\n const datasetIndex = element.datasetIndex;\r\n const index = element.index;\r\n \r\n // Check if the hovered point is from the 'Annotations' dataset\r\n if (myChart.data.datasets[datasetIndex].label === 'Annotations') {\r\n const annotationKey = `label-${index}`;\r\n \r\n // Show the corresponding label annotation without re-triggering the animation\r\n if (myChart.options.plugins.annotation.annotations[annotationKey]) {\r\n myChart.options.plugins.annotation.annotations[annotationKey].display = true;\r\n myChart.update('none'); // Use 'none' to update without animation\r\n }\r\n }\r\n } else {\r\n // Hide all label annotations when not hovering over a point\r\n coordinates.forEach((_, index) => {\r\n const annotationKey = `label-${index}`;\r\n if (myChart.options.plugins.annotation.annotations[annotationKey]) {\r\n myChart.options.plugins.annotation.annotations[annotationKey].display = false;\r\n }\r\n });\r\n myChart.update('none'); // Use 'none' to update without animation\r\n }\r\n },\r\n onLeave: () => {\r\n // Hide all label annotations when leaving the chart area\r\n coordinates.forEach((_, index) => {\r\n const annotationKey = `label-${index}`;\r\n if (myChart.options.plugins.annotation.annotations[annotationKey]) {\r\n myChart.options.plugins.annotation.annotations[annotationKey].display = false;\r\n }\r\n });\r\n myChart.update('none'); // Use 'none' to update without animation\r\n },\r\n };\r\n };\r\n \r\n \r\n const getResponsiveDatasets = () => {\r\n return window.innerWidth <= 768 ? mobileData : data;\r\n };\r\n\r\n // Create the chart\r\n const myChart = new Chart(ctx, {\r\n data: getResponsiveDatasets(),\r\n options: {\r\n // Add animations \r\n animation: false\r\n }\r\n });\r\n\r\n // Intersection Observer callback to enable animations\r\n const observerCallback = (entries, observer) => {\r\n entries.forEach(entry => {\r\n if (entry.isIntersecting) {\r\n myChart.options.animation = {\r\n x: {\r\n type: 'number',\r\n easing: 'easeInOutQuart',\r\n duration: 800,\r\n from: NaN, // the point is initially skipped\r\n delay(ctx) {\r\n if (ctx.type !== 'data' || ctx.xStarted) {\r\n return 0;\r\n }\r\n ctx.xStarted = true;\r\n return ctx.index * 100; // delay based on the index\r\n }\r\n },\r\n };\r\n myChart.update();\r\n observer.unobserve(entry.target); // Stop observing after animation runs\r\n }\r\n });\r\n };\r\n\r\n // Create the Intersection Observer\r\n const observer = new IntersectionObserver(observerCallback, {\r\n threshold: 0.1 // Adjust the threshold as needed\r\n });\r\n\r\n // Observe the chart element\r\n observer.observe(document.getElementById('myChart'));\r\n\r\n // Update chart options on window resize\r\n window.addEventListener('resize', () => {\r\n myChart.options = {\r\n ...myChart.options,\r\n ...getResponsiveOptions()\r\n };\r\n myChart.update();\r\n });\r\n\r\n // Initial setup\r\n myChart.options = {\r\n ...myChart.options,\r\n ...getResponsiveOptions()\r\n };\r\n myChart.update();\r\n };\r\n init();\r\n}\r\n","// /*************************************************/\r\n// /* LOTTIE ANIMATIONS */\r\n// /*************************************************/\r\nimport lottie from \"lottie-web\";\r\n\r\nexport function lottieAnimation() {\r\n const init = function () {\r\n var lottieElements = document.querySelectorAll(\".lottie\");\r\n\r\n lottieElements.forEach(function (element) {\r\n var animationPath = element.getAttribute(\"data-lottie-json\");\r\n var loop = true; // Default loop value\r\n var delay = 0; // Default delay value\r\n\r\n if (element.parentElement.classList.contains('hero__lottie')) {\r\n loop = false; // Set loop to false for hero__lottie elements\r\n delay = 1500; // Set delay to 2 seconds (2000 milliseconds)\r\n }\r\n\r\n // Load animation\r\n var animation = lottie.loadAnimation({\r\n container: element,\r\n renderer: 'svg',\r\n loop: loop,\r\n autoplay: false,\r\n path: animationPath\r\n });\r\n\r\n element.lottieInstance = animation;\r\n\r\n // Create Intersection Observer\r\n const observer = new IntersectionObserver(handleIntersection, { threshold: [0, 0.5, 1] });\r\n\r\n // Observe the element\r\n observer.observe(element);\r\n\r\n function handleIntersection(entries) {\r\n entries.forEach(entry => {\r\n if (entry.isIntersecting) {\r\n if (delay > 0) {\r\n setTimeout(() => {\r\n animation.play();\r\n }, delay);\r\n } else {\r\n animation.play();\r\n }\r\n } else {\r\n animation.pause();\r\n }\r\n });\r\n }\r\n });\r\n };\r\n\r\n init();\r\n}\r\n","/*************************************************/\r\n/* HOVER EFFECTS */\r\n/*************************************************/\r\n\r\nexport function hoverEffects() {\r\n\r\n const init = () => {\r\n document.addEventListener(\"DOMContentLoaded\", function () {\r\n var contentBoxes = document.querySelectorAll(\".content-box__panel-button\");\r\n var imageComponents = document.querySelectorAll(\".image-item\")\r\n\r\n contentBoxes.forEach(function (contentBox) {\r\n var button = contentBox.querySelector(\".panel-button\");\r\n var image = contentBox.querySelector(\".content-box__image-overlay\");\r\n var text = contentBox.querySelector(\".content-box__headline\");\r\n var lightText = contentBox.querySelector(\".content-box__info--light\");\r\n var darkText = contentBox.querySelector(\".content-box__info--dark\");\r\n\r\n if (button) {\r\n contentBox.addEventListener(\"mouseover\", function () {\r\n image.style.opacity = \".3\";\r\n if (darkText) {\r\n text.style.color = \"#063a2f90\";\r\n } else if (lightText) {\r\n text.style.color = \"#FFFFFF90\";\r\n }\r\n });\r\n\r\n contentBox.addEventListener(\"mouseout\", function () {\r\n image.style.opacity = \"0\";\r\n if (darkText) {\r\n text.style.color = \"#063a2f\";\r\n } else if (lightText) {\r\n text.style.color = \"#FFFFFF\";\r\n }\r\n });\r\n }\r\n });\r\n\r\n imageComponents.forEach(function (imageItem) {\r\n var button = imageItem.querySelector(\".panel-button\");\r\n var image = imageItem.querySelector(\".image-item__desktop-overlay\");\r\n var textLight = imageItem.querySelector(\".image-item__text--desktop-color-light\");\r\n var textDark = imageItem.querySelector(\".image-item__text--desktop-color-dark\");\r\n\r\n if (button) {\r\n button.addEventListener(\"mouseover\", function () {\r\n image.style.opacity = \".3\";\r\n if (textLight) {\r\n textLight.style.color = \"#FFFFFF90\";\r\n } else if (textDark) {\r\n textDark.style.color = \"#063a2f90\";\r\n }\r\n });\r\n\r\n button.addEventListener(\"mouseout\", function () {\r\n image.style.opacity = \"0\";\r\n if (textLight) {\r\n textLight.style.color = \"#FFFFFF\";\r\n } else if (textDark) {\r\n textDark.style.color = \"#063a2f\";\r\n }\r\n });\r\n }\r\n });\r\n }); \r\n };\r\n\r\n init();\r\n}\r\n"],"names":["global","isCallable","tryToString","TypeError","module","exports","argument","isConstructor","String","wellKnownSymbol","create","definePropertyModule","UNSCOPABLES","ArrayPrototype","Array","prototype","undefined","f","configurable","value","key","charAt","S","index","unicode","length","isObject","$forEach","STRICT_METHOD","arrayMethodIsStrict","forEach","callbackfn","this","arguments","bind","call","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","lengthOfArrayLike","createProperty","getIterator","getIteratorMethod","arrayLike","O","IS_CONSTRUCTOR","argumentsLength","mapfn","mapping","result","step","iterator","next","iteratorMethod","done","toIndexedObject","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","el","fromIndex","includes","indexOf","uncurryThis","IndexedObject","arraySpeciesCreate","push","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","that","specificCreate","self","boundFunction","target","map","filter","some","every","find","findIndex","filterReject","fails","V8_VERSION","SPECIES","METHOD_NAME","array","constructor","foo","Boolean","method","slice","isArray","originalArray","C","arraySpeciesConstructor","anObject","iteratorClose","fn","ENTRIES","error","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","from","exec","SKIP_CLOSING","ITERATION_SUPPORT","object","toString","stringSlice","it","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","Object","CORRECT_ARGUMENTS","tag","tryGet","callee","hasOwn","ownKeys","getOwnPropertyDescriptorModule","source","keys","defineProperty","getOwnPropertyDescriptor","i","MATCH","regexp","error1","error2","F","getPrototypeOf","IteratorPrototype","createPropertyDescriptor","setToStringTag","Iterators","returnThis","IteratorConstructor","NAME","DESCRIPTORS","bitmap","enumerable","writable","toPropertyKey","propertyKey","$","IS_PURE","FunctionName","createIteratorConstructor","setPrototypeOf","createNonEnumerableProperty","redefine","IteratorsCore","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","name","values","proto","forced","path","wrappedWellKnownSymbolModule","Symbol","get","document","EXISTS","createElement","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","classList","documentCreateElement","DOMTokenListPrototype","getBuiltIn","match","version","userAgent","process","Deno","versions","v8","split","setGlobal","copyConstructorProperties","isForced","options","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","regexpExec","RegExpPrototype","RegExp","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","re","flags","uncurriedNativeRegExpMethod","nativeMethod","str","arg2","forceStringMethod","uncurriedNativeMethod","$exec","FunctionPrototype","Function","apply","Reflect","aCallable","getDescriptor","callBind","aFunction","namespace","classof","getMethod","usingIterator","V","P","func","floor","Math","replace","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","position","captures","namedCaptures","replacement","tailPos","m","symbols","ch","capture","n","check","globalThis","window","g","hasOwnProperty","a","propertyIsEnumerable","store","functionToString","inspectSource","set","has","NATIVE_WEAK_MAP","shared","sharedKey","hiddenKeys","OBJECT_ALREADY_INITIALIZED","WeakMap","state","wmget","wmhas","wmset","metadata","facade","STATE","enforce","getterFor","type","noop","empty","construct","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","feature","detection","data","normalize","POLYFILL","NATIVE","string","toLowerCase","isRegExp","isPrototypeOf","USE_SYMBOL_AS_UID","$Symbol","kind","innerResult","innerError","PrototypeOfArrayIteratorPrototype","arrayIterator","test","toLength","obj","getOwnPropertySymbols","symbol","activeXDocument","defineProperties","enumBugKeys","html","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","domain","style","display","appendChild","src","contentWindow","open","Properties","objectKeys","props","IE8_DOM_DEFINE","$defineProperty","Attributes","propertyIsEnumerableModule","$getOwnPropertyDescriptor","$getOwnPropertyNames","arraySlice","windowNames","getOwnPropertyNames","getWindowNames","internalObjectKeys","concat","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","$propertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","input","pref","val","valueOf","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","InternalStateModule","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","join","R","re1","re2","regexpFlags","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeReplace","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","lastIndex","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","group","raw","groups","sticky","charsAdded","strCopy","multiline","ignoreCase","dotAll","$RegExp","TAG","uid","SHARED","mode","copyright","aConstructor","defaultConstructor","toIntegerOrInfinity","requireObjectCoercible","charCodeAt","CONVERT_TO_STRING","pos","first","second","size","codeAt","RangeError","count","Infinity","max","min","integer","ceil","number","isSymbol","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","toPrimitive","id","postfix","random","NATIVE_SYMBOL","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","description","$filter","arrayMethodHasSpeciesSupport","$findIndex","addToUnscopables","FIND_INDEX","SKIPS_HOLES","checkCorrectnessOfIteration","iterable","$includes","defineIterator","ARRAY_ITERATOR","setInternalState","iterated","Arguments","un$Join","ES3_STRINGS","separator","$map","un$Slice","HAS_SPECIES_SUPPORT","start","end","Constructor","k","fin","FUNCTION_NAME_EXISTS","nameRE","regExpExec","thisNumberValue","$repeat","repeat","un$ToFixed","toFixed","pow","x","acc","multiply","c","c2","divide","dataToString","s","t","fractionDigits","e","z","j","fractDigits","sign","x2","log","nativeGetOwnPropertyDescriptor","FAILS_ON_PRIMITIVES","getOwnPropertyDescriptors","nativeKeys","notARegExp","correctIsRegExpLogic","stringIndexOf","searchString","STRING_ITERATOR","point","fixRegExpWellKnownSymbolLogic","advanceStringIndex","getSubstitution","REPLACE","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","_","maybeCallNative","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","rx","res","functionalReplace","fullUnicode","results","accumulatedResult","nextSourcePosition","replacerArgs","speciesConstructor","callRegExpExec","MAX_UINT32","$push","SPLIT","nativeSplit","internalSplit","limit","lim","lastLength","output","lastLastIndex","separatorCopy","splitter","unicodeMatching","p","q","A","originalExec","NativeSymbol","SymbolPrototype","EmptyStringDescriptionStore","SymbolWrapper","symbolToString","symbolValueOf","desc","defineWellKnownSymbol","$toString","nativeObjectCreate","getOwnPropertyNamesExternal","HIDDEN","QObject","$stringify","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","wrap","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","stringify","space","args","$replacer","hint","DOMIterables","handlePrototype","CollectionPrototype","COLLECTION_NAME","ArrayIteratorMethods","ArrayValues","factory","navigator","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sources","destination","sourcePrototype","len","attr","prop","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","Uint8ClampedArray","Float32Array","Int16Array","createSizedArray","_typeof$6","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","_shouldRoundValues","bmPow","bmSqrt","sqrt","bmFloor","bmMax","bmMin","BMMath","ProjectInterface$1","propertyNames","abs","absArr","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","bmRnd","round","styleDiv","element","top","left","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","v","r","b","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","createElementNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","onmessage","postMessage","_workerSelf","setupWorker","Worker","Blob","blob","url","URL","createObjectURL","createWorker","completeLayers","layers","comps","layerData","jLen","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeText","comp","findComp","__used","JSON","parse","ks","o","checkVersion","minimum","animVersionString","animVersion","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","chars","charData","ip","op","st","sr","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","checkShapes","completeClosingShapes","closed","cl","moduleOb","__complete","completeChars","dataFunctionManager","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","response","responseText","load","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","send","completeData","payload","animation","event","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","width","height","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","getBBox","_imageLoaded","clearInterval","createFootageData","ob","footageData","_footageLoaded","ImagePreloaderFactory","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","destroy","getAsset","createImgData","crossOrigin","addEventListener","createImageData","setAttributeNS","_elementHelper","append","setCacheType","elementHelper","BaseEvent","triggerEvent","eventName","_cbs","callbacks","removeEventListener","splice","markerParser","parsePayloadLines","line","lines","keysCount","trim","Error","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","autoplay","loop","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","wrapper","container","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","parseInt","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","setTimeout","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","Number","isNaN","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","setLoop","isLooping","getPath","getAssetData","hide","show","getDuration","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","searchAnimations","standalone","animElements","getElementsByClassName","lenAnims","setAttribute","body","getElementsByTagName","innerText","div","freeze","unfreeze","getRegisteredAnimations","animations","BezierFactory","beziers","bezEasing","BezierEasing","kSampleStepSize","float32ArraySupported","aA1","aA2","B","calcBezier","aT","getSlope","points","_p","_mSampleValues","_precomputed","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","y2","x3","y3","det1","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","perc","ptDistance","curveSegments","lastPoint","lengthData","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","keyframes","keyframesMetadata","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","y","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quaternionToEuler","slerp","createQuaternion","omega","cosom","sinom","scale0","scale1","out","ax","ay","az","aw","bx","by","bz","bw","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","c1","cos","c3","s1","s2","s3","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","or","os","rad","roundness","perimSegment","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","Matrix","_cos","_sin","_tan","tan","_rnd","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_typeof$3","lottie","setLocation","href","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","useWebWorker","setIDPrefix","__getFactory","scripts","myScript","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","pop","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","ry","rz","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","delta","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","extrema","intersectData","t2","box","boundingBox","cx","cy","splitData","boxIntersect","intersectsImpl","depth","tolerance","intersections","maxRecursion","d1s","d2s","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","hypot","ZigZagModifier","setPoint","outputBezier","amplitude","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","getProjectingAngle","cur","prevIndex","nextIndex","pVector","zigZagCorner","frequency","pointType","prevPoint","nextPoint","prevDist","nextDist","zigZagSegment","dist","normalAngle","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","tangentAngle","angleIn","center","radius","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","right","mid","flex","inflectionPoints","OffsetPathModifier","getFontProperties","fontData","styles","fStyle","fWeight","weight","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","derivative","denom","tcusp","square","root","p10","p11","p20","p21","bounds","bottom","other","shapeSegmentInverted","pointsType","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","FontManager","emptyChar","w","combinedCharacters","BLACK_FLAG_CODE_POINT","surrogateModifiers","setUpNode","font","family","parentNode","fontFamily","node","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","familyArray","enabledFamilies","trimFontOptions","parent","createHelper","def","helper","engine","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measureText","text","getComputedTextLength","getCodePoint","codePoint","isRegionalCode","Font","typekitLoaded","_warned","Date","now","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","isVariationSelector","fontPrototype","found","list","cache","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","querySelectorAll","rel","sc","getCharData","_char","console","warn","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","removeChild","SlotManager","slotFactory","RenderableElement","slots","assign","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","getBlendMode","blendModeEnums","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","BaseElement","FrameElement","FootageElement","imageLoader","initBaseData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","eff","checkMasks","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","layerInterface","maskManager","registerMaskInterface","effectsInterface","createEffectsInterface","registerEffectsInterface","shapeInterface","shapesData","itemsData","textInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","layerId","effectsManager","getType","prepareProperties","isVisible","_isParent","getBaseElement","FootageInterface","getFootageData","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","pendingElements","getElementById","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","effectTypes","TRANSFORM_EFFECT","TransformElement","MaskElement","maskElement","viewData","solidPath","rect","expansor","feMorph","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","mask","createLayerSolidPath","invRect","drawPath","maskedElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","renderLocalTransform","localTransforms","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects$1","idPrefix","SVGEffects","filterManager","createFilter","filters","Effect","effect","countsAsEffect","registerEffect$1","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","getMatte","matteType","useElement","masker","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","initHierarchy","checkParenting","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","of","ms","ost","buildShapeString","_o","_i","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","sw","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","newLineFlag","letters","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","add","anIndexes","animatorJustifyOffset","extra","animatorData","letterData","based","animators","indexes","fh","fs","fb","rn","totalChars","newInd","currentInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","tanAngle","matrixHelper","renderedLettersCount","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","config","svgElement","ariaLabel","title","titleElement","titleId","descElement","descId","preserveAspectRatio","contentVisibility","viewBoxOnly","viewBoxSize","className","focusable","filterSize","runExpressions","destroyed","ShapeTransformManager","sequences","sequenceList","transform_key_count","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","fromCharCode","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","span","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","bbox","renderedLetter","textSpan","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","insertBefore","setElements","getElements","destroyElements","addTransformSequence","sequence","processSequence","processSequences","getNewKey","lumaLoader","lumaBuffer","lumaBufferCtx","svg","loadLuma","_svg","createCanvas","loadLumaCanvas","getLumaCanvas","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","CVBaseElement","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","operationsMap","CVShapeData","transformsManager","styledShapes","styledShape","trNodes","CVShapeElement","CVTextElement","stroke","fill","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","CanvasContext","strokeStyle","lineCap","CVContextData","stack","cArrPos","cTr","nativeContext","transformMat","currentOpacity","currentFillStyle","appliedFillStyle","currentStrokeStyle","appliedStrokeStyle","currentLineWidth","appliedLineWidth","currentLineCap","appliedLineCap","currentLineJoin","appliedLineJoin","appliedMiterLimit","currentMiterLimit","CVCompElement","CanvasRenderer","clearCanvas","context","dpr","devicePixelRatio","currentGlobalAlpha","contextData","ctxTransform","ctxOpacity","ctxFillStyle","ctxStrokeStyle","ctxLineWidth","ctxLineCap","ctxLineJoin","ctxMiterLimit","ctxFill","ctxFillRect","ctxStroke","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","isMasked","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","createElements","buffers","bufferCanvas","bufferCanvas2","_isProxy","transformCanvas","blendMode","globalCompositeOperation","hideElement","showElement","clearRect","prepareLayer","bufferCtx","drawImage","getTransform","exitLayer","buffer","forceRealStack","restore","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","grd","setLineDash","lineDashOffset","closePath","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","globalAlpha","rule","actionFlag","containerStyle","mozTransformOrigin","setContext","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","fillType","duplicate","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","setOpacity","trProps","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","backgroundColor","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","b2ac","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","changed","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","children","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","Image","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","cWidth","cHeight","floatingContainer","_createBaseContainerElements","_thisLayerFunction","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","startdenom","significance","ARC4","keylen","me","copy","flatten","typ","mixkey","seed","smear","stringseed","tostring","shortseed","entropy","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","screen","autoseed","arc4","prng","int32","quick","pass","is_math_call","initialize$2","propTypes","SHAPE","_typeof$1","ExpressionManager","fetch","frames","_lottieGlobal","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","noOp","_value","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","valueAtTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","frameExpressionId","__preventDeadCodeRemoval","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskManagerInterface","MaskInterface","_mask","_data","_masksInterfaces","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","speedAtTime","getSpeedAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","transformInterface","anchorPointDescriptor","anchor_point","startTime","_name","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","createGroupInterface","groupInterface","mn","_propertyGroup","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","effectsData","ShapePathInterface","view","propertyIndex","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","_interfaceFunction","_sourceText","sourceText","stringValue","fillColor","_typeof","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","footage","getInterface","expressionHelpers","searchExpressions","speed","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","addDecorator","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","initialize","SVGComposableEffect","createMergeNode","resultId","ins","feMergeNode","feMerge","linearFilterValue","SVGTintFilter","linearFilter","matrixFilter","SVGFillFilter","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","colorBlack","colorWhite","groupPath","elemChildren","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","TransformEffect","SVGTransformEffect","CVTransformEffect","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","sigma","dimensions","sigmaX","sigmaY","edgeMode","forceFrame","isUniformScale","scaleHeight","scaleWidth","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","getter","__esModule","definition","createClass","protoProps","staticProps","isBoolean","isFunction","isNode","nodeType","isNumber","isPlainObject","isString","isVelocityResult","isWrapped","cloneArray","defineProperty$1","readonly","_len","_key","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","arg","return","getTime","removeClass","Element","remove","Actions","registerAction","internal","DEFAULT_DURATION","Duration","fast","normal","slow","Easings","registerEasing","linearEasing","percentComplete","startValue","fixRange","generateBezier","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","isFinite","precomputed","precompute","getTForX","getControlPoints","calcSampleValues","_i2","lastSample","exp","easeInOut","springAccelerationForState","tension","friction","springEvaluateStateWithDerivative","initialState","dt","dx","dv","springIntegrateState","dxdt","dvdt","generateSpringRK4","initState","parseFloat","haveDuration","timeLapsed","lastState","parseDuration","validateCache","validateBegin","validateComplete","noError","validateDelay","parsed","validateDuration","validateEasing","steps","generateStep","validateFpsLimit","validateLoop","validateProgress","validateQueue","validateRepeat","validateSpeed","validateSync","cache$1","begin","complete","delay","easing","fpsLimit","mobileHA","minFrameTime","promise","promiseRejectEmpty","queue","sync","defaults$1","defaults$$1","instance","classCallCheck","validatePromise","validatePromiseRejectEmpty","Normalizations","NormalizationUnits","NoCacheNormalizations","Set","constructors","constructorCache","Map","dataName","Data","ownerDocument","defaultView","types","_constructor","computedStyle","queueList","lastAnimationList","lastFinishList","isClient","windowScrollAnchor","pageYOffset","State","isMobile","isGingerbread","prefixElement","scrollAnchor","documentElement","scrollPropertyLeft","scrollPropertyTop","isTicking","last","firstNew","animate","prev","_prev","_next","addClass","queue$1","queueName","freeAnimationCall","SequencesObject","completeCall","activeCall","isLoop","isRepeat","isStopped","_flags","_completed","_total","callComplete","resolver","_resolver","timeStart","skip","dequeue","repeatAgain","ellapsedTime","registerNormalization","nextArg","unit","hasNormalization","getNormalization","setPropertyValue","propertyValue","noCache","Velocity$$1","debug","info","removeNestedCalc","tokens","token","cache$2","camelCase","fixed","letter","toUpperCase","rxColor6","rxColor3","rxColorName","rxRGB","rxSpaces","ColorNames","makeRGBA","ignore","fixColors","$0","$1","$2","augmentDimension","wantInner","getPropertyValue","sides","fields","augment","field","getWidthHeight","getBoundingClientRect","computePropertyValue","getComputedStyle","computedValue","skipCache","rxHex","function","elementArrayIndex","tween","getNormalizationUnit","expandProperties","tweens","valueData","explodeTween","rxToken","rxNumber","findPattern","parts","partsLength","numbers","part","pattern","addString","_part","returnStringType","isDisplay","isVisibility","_part2","more","_part3","bits","isUnitless","hasNumbers","_part4","index2","digits","change","changeOrUnit","_unit","_part5","patternCalc","_unit2","_firstLetter","isComplex","isMaths","_part6","bit","inRGB","_text","starting","startNumbers","validateTweens","beginCall","progressCall","progress","tweenValue","lastTick","asyncCallbacks","progressed","clear","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","FRAME_TIME","performance","perf","nowOffset","timing","navigationStart","rAFProxy","rAFShim","ticking","worker","_this","interval","tick","timestamp","timeCurrent","deltaTime","defaultSpeed","defaultEasing","defaultDuration","nextCall","_ready","_options","_timeStart","_started","_first","activeEasing","millisecondsEllapsed","mock","easingComplete","best","tweenFrom","tweenTo","rawPercent","tweenPercent","checkAnimationShouldBeFinished","defaultQueue","endValues","promiseHandler","finishAll","then","animationFlags","isExpanded","isReady","isStarted","isSync","isReverse","checkAnimation","pauseResume","action","propertyAction","_result","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_prop","_result2","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","_element","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","_element2","_iteratorNormalCompletion6","_didIteratorError6","_iteratorError6","_step6","_iterator6","_rejecter","checkAnimationShouldBeStopped","isPercentComplete","_animation","SyntaxError","requireForcefeeding","fakeAnimation","singleResult","maybeSequence","_property","expandSequence","propertyTween","tweenEasing","_property2","colorValues","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","easeOutBouncePercent","easeInBouncePercent","registerBackOut","registerBackInOut","PI2","getDimension","period","registerElasticIn","registerElasticOut","registerElasticInOut","inlineRx","listItemRx","tableRowRx","tableRx","tableRowGroupRx","client","scrollValue","nodeName","scrollWidth","clientWidth","scrollHeight","clientHeight","rxAddPx","getSetPrefixed","unprefixed","getSetStyle","rxVendors","addUnit","_addUnit","getAttribute","base","rxSubtype","rxElement","getDimension$1","subtype","attribute","VelocityStatic","VERSION","Velocity$1","Sequences","defaults","patch","Velocity","documentMode","innerHTML","jQuery","Zepto","_loop","rxPercents","registerSequence","orderedPercents","sort","stepProperties","realSequence","_key2","originalProperty","globalPromise","Promise","_a","noPromiseOption","patchPromise","promiseObject","catch","finally","_ref","args0","syntacticSugar","argumentIndex","propertiesMap","optionsMap","rejecter","isAction","opts","resolve","reject","optionPromiseRejectEmpty","actionArgs","_promise","_ref2","hasValidDuration","validDuration","drag","stagger","visibility","optionsBegin","optionsComplete","optionsProgress","optionsSync","rootAnimation","lastAnimation","optionCallback","option","VelocityStatic$1","Velocity$2","jQuery$1","Zepto$1","_loop$1","property$1","Counter","statisticValueSelector","targetValue","hasDecimals","querySelector","remaining","formattedValue","toLocaleString","openModal","closeModal","playVideoInModal","playYoutubeVideoInModal","videoPlayingInModal","panelClosed","panelOpened","video","videoPlayerSelectors","modalVideoPlayerId","videoPlayerPlayingClasses","playYoutubeVideo","playerId","videoId","loadViewTimer","youtubeLoaded","YT","Player","host","events","onPlayerReady","onPlayerStateChange","playerVars","showinfo","playVideo","player","tagName","videoPlayerElement","closest","cls","videoStartedPlayingInModalEvent","Event","customEventsNames","dispatchEvent","playerInfo","videoData","video_id","dataset","onPlayerReadyVimeo","PlayerState","ENDED","onPlayerStateChangeVimeo","detail","videoPlayerActionHandler","videoItem","preventDefault","vimeoUrl","vimeoVideoUrl","videoSources","videosources","videoTypes","videotypes","imageCoverWrap","videoIcon","modalId","videoElement","controls","muted","playsInline","sourceElement","openModalEvent","CustomEvent","replaceChildren","Cookiebot","consent","marketing","firstScriptTag","CookieConsent","renew","onload","vimeoLoaded","vimeoPlayer","Vimeo","on","playVimeoVideo","videoPlayers","modal","bodyLoadingClass","utils","modals","modalContentClassSelector","mainContentSelector","modalPlayerId","modalShowClass","triggerElement","Modal","OpenModal","activeElement","focus","CloseModal","closeModalEvent","bubbles","Video","AddYoutubeVideoToModal","playYoutubeVideoEvent","AddVideoToModal","playVideoEvent","stopPropagation","cookies","cookiePlaceholderSelector","placeholderSelectors","SetPlaceholderDisplayState","placeholder","displayState","marketingPlaceholders","statisticsPlaceholders","statistics","preferencesPlaceholders","preferences","contains","categories","n2b","b2n","n2p","map$1","D","E","eq","hexString","isShort","alpha","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","hwb2rgb","hsv2rgb","Z","Y","X","W","U","T","Q","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aquamarRe","azuY","blanKedOmond","Xe","XeviTet","bPwn","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","pRk","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","skyXe","UXe","UWay","UgYy","sprRggYF","stAlXe","teO","tEstN","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","nameParse","unpacked","tkeys","ok","nk","unpack","transparent","RGB_RE","modHSL","ratio","tmp","fromObject","functionParse","rgbParse","Color","_rgb","_valid","valid","rgbString","hslString","mix","w2","w1","interpolate","rgb1","rgb2","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","deg","isNullOrUndef","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","toDimension","dimension","endsWith","thisArg","each","loopable","_elementsEqual","a0","ilen","datasetIndex","klen","isValidKey","_merger","tval","sval","merge","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","_splitKey","_getKeyResolver","_capitalize","defined","setsEqual","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","almostEquals","epsilon","niceNum","range","roundedRange","niceRange","fraction","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","distanceBetweenPoints","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","cmp","hi","lo","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","listeners","_arrayUnique","requestAnimFrame","throttled","argsToUse","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","meta","animationsDisabled","pointCount","_sorted","iScale","_parsed","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","atEdge","elasticIn","elasticOut","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","colors","intlCache","formatNumber","locale","cacheKey","formatter","Intl","NumberFormat","getNumberFormat","format","formatters","numeric","tickValue","ticks","chart","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","Ticks","overrides","descriptors","getScope$1","scope","Defaults","_descriptors","_appliers","borderColor","datasets","platform","getDevicePixelRatio","hover","hoverBackgroundColor","hoverBorderColor","hoverColor","indexAxis","interaction","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","responsive","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","appliers","_scriptable","startsWith","_indexable","_fallback","visible","autoPadding","padding","beginAtZero","grace","grid","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","gc","longest","textWidth","_longestText","arrayOfThings","garbageCollect","jlen","thing","nestedThing","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","resetTransform","drawPoint","drawPointLegend","xOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","ellipse","arc","SQRT1_2","borderWidth","_isPointInArea","area","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","drawBackdrop","oldColor","renderText","strokeColor","textAlign","textBaseline","setRenderOpts","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","_readValueToProps","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","fallback","toFontString","inputs","cacheable","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getKeysFromAllScopes","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","receiver","isScriptable","delete","_resolveScriptable","isIndexable","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","EPSILON","getPoint","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","capControlPoint","_updateBezierControlPoints","controlPoints","spanGaps","cubicInterpolationMode","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","positions","getPositionedStyle","suffix","getRelativePosition","borderBox","boxSizing","paddings","borders","touches","offsetX","offsetY","shadowRoot","useOffsetPos","clientX","clientY","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","containerBorder","containerPadding","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","passive","readUsedSize","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalizeSegment","_boundSegment","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","Animator","_request","_charts","_running","_lastDate","_notify","anims","date","numSteps","initial","currentStep","_refresh","_update","running","draw","_active","_getAnims","charts","listen","reduce","_duration","cancel","animator","interpolators","boolean","factor","c0","Animation","cfg","_fn","_easing","_start","_target","_from","_to","_promises","elapsed","wait","promises","rej","resolved","Animations","_properties","configure","animationOptions","animatedProps","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","all","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","DatasetController","static","_cachedDataOpts","getMeta","_type","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","disabled","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","getAllScaleValues","curr","updateMinAndPrev","getPixelForTick","parseValue","entry","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","startEnd","setInflateAmount","inflateAmount","DoughnutController","animateRotate","animateScale","cutout","circumference","spacing","legend","generateLabels","fontColor","getDataVisibility","legendItem","toggleDataVisibility","super","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerX","centerY","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","PolarAreaController","angleLines","circular","pointLabels","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","controllers","BarController","categoryPercentage","barPercentage","grouped","_index_","_value_","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","baseValue","minBarLength","actualBase","floating","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","BubbleController","LineController","_dataset","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","updateControlPoints","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","DateAdapterBase","members","formats","diff","startOf","endOf","adapters","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","handler","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","removeBox","layoutItem","minPadding","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","createAttachObserver","observer","MutationObserver","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","addListener","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","isConnected","tooltipPosition","hasValue","final","tickOpts","determinedMaxTicks","_tickSize","maxScale","maxChart","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","getMajorIndices","numMajorIndices","newTicks","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","positionAxisID","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","gz","axisID","_maxDigits","TypedRegistry","isForType","register","parentScope","isIChartComponent","itemDefaults","defaultRoutes","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","camelMethod","PluginService","_init","notify","hook","_createDescriptors","cancelable","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","determineAxis","scaleOptions","getAxisFromDataset","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","initOptions","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","onAnimationsComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","getSizeForArea","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","_detectPlatform","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","timeout","clearTimeout","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","_drawDatasets","_drawDataset","useClip","getDatasetArea","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","fullCircles","inner","angleMargin","clipArc","setStyle","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","findStartAndEnd","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","inRange$1","hitRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","skipX","skipY","addNormalRectPath","inflateRect","refRect","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","BarElement","addRectPath","mouseX","mouseY","inXRange","inYRange","PointElement","hoverRadius","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","getColorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","containsColorsDefinitions","plugin_colors","forceOverride","_args","chartOptions","colorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","getStartAndCountOfVisiblePointsSimplified","decimated","bucketWidth","sampledIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAy","pointAx","lttbDecimation","minIndex","maxIndex","startIndex","xMin","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","above","clipVertical","doFill","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","handleEvent","onLeave","isListened","hoveredItem","sameItem","plugin_legend","afterEvent","ci","useBorderRadius","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","xSet","eventPosition","nearestElement","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","Colors","Decimation","Filler","SubTitle","findOrAddLabel","addedLabels","addIfString","_getLabelForValue","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","relativeLabelSize","LinearScaleBase","_startValue","_endValue","_valueRange","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","LinearScale","log10Floor","changeExponent","isMajor","tickVal","rangeExp","rangeStep","generateTicks","minExp","startExp","LogarithmicScale","_zero","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","itemOpts","createPointLabelItem","isNotOverlapped","buildPointLabelItems","hLimits","vLimits","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","millisecond","common","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","MAX_SAFE_INTEGER","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","displayFormats","_majorUnit","_offsets","_normalized","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","weekday","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","CategoryScale","_addedLabels","added","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","filterElements","nearestItems","evenPoint","getPointByAxis","_index","getNearestItem","visibleElements","inRangeByAxis","isOlderPart","act","req","clampAll","inBoxRange","hBorderWidth","inRangeX","inRangeY","getElementCenterPoint","isPercentString","toPercent","toPositivePercent","boxAppering","defaultInitAnimation","polygon","getSize","positivePercent","toPosition","isBoundToPoint","xValue","yValue","initAnimationProperties","initAnim","applyDefault","execCallback","loadHooks","hooks","hooksContainer","widthCache","isImageOrCanvas","setBorderStyle","setShadowStyle","shadowColor","backgroundShadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","optFont","mapKey","fontsKey","calculateLabelSize","drawBox","borderShadowColor","drawLabel","elementValue","getOpacity","optColor","calculateTextAlignment","setTextStrokeStyle","lhs","applyLabelDecoration","applyLabelContent","notRadius","drawPointStyle","limitedLineScale","xScaleID","startProp","endProp","yScaleID","scaleValue","retrieveScaleID","axes","getDimensionByScale","getChartPoint","resolveBoxProperties","xDim","getChartDimensionByScale","yDim","yMin","resolvePointProperties","adjustCenterX","xAdjust","adjustCenterY","yAdjust","getChartCircle","resolveLineProperties","resolveFullLineProperties","scaleId","dim","resolveLimitedLineProperties","resolveBoxAndLabelProperties","initProperties","optionScope","resolveLabelElementProperties$1","calculatePosition$1","boxOpts","padStart","padEnd","adjust","callout","labelSize","calculateX","calculateY","rotated","moveHooks","eventHooks","listened","moveListened","hovered","dispatchMoveEvents","handleMoveEvents","click","handleClickEvents","checkElements","elementHooks","invokeHook","hooked","adjustScaleRange","annotations","scaleIDOption","annotation","getScaleLimits","changeScaleLimit","suggestedLimit","scaleLimitDefined","verifyScaleIDs","verifyProperties","BoxAnnotation","resolveElementProperties","LabelAnnotation","_visible","pointX","pointY","calloutPosition","xPoints","yPoints","rotatedPoint","resolveCalloutAutoPosition","resolveCalloutPosition","isPointInRange","separatorStart","separatorEnd","getCalloutSeparatorAdjust","getCalloutSeparatorCoord","sideStart","sideEnd","side","getCalloutSideAdjust","getCalloutSideCoord","drawCallout","getLabelSize","boxSize","calculatePosition","measureRect","pointInLine","interpolateX","interpolateY","sqr","coordInCurve","pointInCurve","coordAngleInCurve","angleInCurve","LineAnnotation","mx","my","isPointInStroke","isOnLabel","dy","lenSq","xx","yy","intersects","rangeLimit","inAxisRange","curve","startOpts","endOpts","startAdjust","endAdjust","getArrowHeads","drawArrowHeadOnCurve","drawCurve","drawArrowHead","isLineInArea","limitPointToArea","limitLineToArea","controlPoint","getControlPoint","labelProperties","sizes","calculateAutoRotation","rotatedSize","spaceAround","calculateTAdjust","calculateT","xCoordinateSizes","yCoordinateSizes","adjustLabelCoordinate","calculateLabelPosition","resolveLabelElementProperties","arrowHeadsDefaults","lineSize","lineW","lineH","coordinate","halfSize","arrowStartOpts","arrowHeads","arrowEndOpts","getLineAdjust","arrowOpts","arrowOffsetX","EllipseAnnotation","xRadius","yRadius","cosAngle","sinAngle","pointInEllipse","PointAnnotation","inPointRange","PolygonAnnotation","isInside","bY","bX","pointIsInPolygon","axisPoints","elProps","buildPointElement","halfBorder","annotationTypes","directUpdater","hooks$1","optDefs","resolveObj","resolveType","animOpts","resolveAnimations","resyncElements","annotationOptions","getOrCreateElement","toSkip","updateSubElements","resolveAnnotationOptions","mainElement","subElements","subElement","subResolver","elementClass","chartStates","beforeRegister","pkg","ver","strict","requireVersion","afterRegister","afterUnregister","beforeInit","verifyScaleOptions","_getElements","updateListeners","updateHooks","afterDatasetsDraw","beforeEvent","afterDestroy","_getState","caller","drawableElements","main","getDrawableElements","drawElement","extend","ssrDocument","blur","createEvent","initEvent","importNode","hash","hostname","protocol","search","doc","ssrWindow","history","replaceState","pushState","go","back","matchMedia","cancelAnimationFrame","win","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","HTMLElement","noExtend","keysArray","nextKey","__swiper__","varName","varValue","animateCSSModeScroll","swiper","targetPosition","startPosition","wrapperEl","scrollSnapType","cssModeFrameID","isOutOfBound","easeProgress","currentPosition","scrollTo","selector","showWarning","classes","elementStyle","child","previousSibling","parents","parentElement","elementOuterSize","includeMargins","support","deviceCached","getSupport","smoothScroll","touch","DocumentTouch","calcSupport","getDevice","_temp","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","calcDevice","getBrowser","needPerspectiveFix","isWebView","isSafariBrowser","need3dFix","calcBrowser","eventsEmitter","priority","eventsListeners","once","onceHandler","off","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","emit","_len2","toggleSlideClasses","slideEl","condition","processLazyPreloader","imageEl","isElement","slideClass","lazyEl","lazyPreloaderClass","unlazy","slides","preload","lazyPreloadPrevNext","slidesPerView","slidesPerViewDynamic","activeIndex","rows","activeColumn","preloadColumns","column","slideIndexLastInView","rewind","realIndex","updateSize","isVertical","updateSlides","getDirectionPropertyValue","getDirectionLabel","slidesEl","swiperSize","rtlTranslate","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","slideSize","initSlides","unsetSlides","shouldResetSlideSize","breakpoints","slide","updateSlide","slideStyles","currentWebKitTransform","roundLengths","swiperSlideSize","slidesPerGroup","slidesPerGroupSkip","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slidesBefore","slidesAfter","groupSize","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","setTransition","getSlideByIndex","getSlideIndexByData","visibleSlides","minusOffset","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","slideVisibleClass","slideFullyVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","activeSlide","prevSlide","nextSlide","nextEls","nextElementSibling","elementNextAll","prevEls","previousElementSibling","elementPrevAll","slideActiveClass","slideNextClass","slidePrevClass","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","firstSlideInColumn","activeSlideIndex","runCallbacksOnInit","updateClickedSlide","pathEl","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","getTranslate","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","previousTranslate","translateTo","runCallbacks","translateBounds","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","transitionDuration","transitionDelay","transitionStart","transitionEnd","slideTo","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","targetSlideIndex","cols","needLoopFix","loopFix","slideRealIndex","slideNext","perGroup","slidesPerGroupAuto","loopPreventsSliding","_clientLeft","clientLeft","slidePrev","normalizedSnapGrid","prevSnap","prevSnapIndex","slideReset","slideToClosest","currentSnap","slideToIndex","slideSelector","loopedSlides","getSlideIndex","loopCreate","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","slideBlankClass","loopAddBlankSlides","recalcSlides","byMousewheel","loopAdditionalSlides","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","__preventObserver__","swiperLoopMoveDOM","prepend","currentSlideTranslate","touchEventsData","startTranslate","control","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","preventEdgeSwipe","edgeSwipeDetection","edgeSwipeThreshold","innerWidth","onTouchStart","originalEvent","pointerId","targetTouches","touchId","identifier","pageX","simulateTouch","pointerType","targetEl","touchEventsTarget","which","button","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","noSwipingSelector","isTargetShadow","noSwiping","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","currentY","pageY","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","previousX","previousY","diffX","diffY","touchAngle","preventTouchMoveFromPointerMove","touchMoveStopPropagation","nested","touchesDiff","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","allowLoopFix","evt","allowMomentumBounce","grabCursor","setGrabCursor","loopSwapReset","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","touchEndTime","timeDiff","pathTree","lastClickTime","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","setBreakpoint","isVirtualLoop","paused","resizeTimeout","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","scrollLeft","scrollTop","onLoad","onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","domMethod","swiperMethod","updateOnWindowResize","isGridEnabled","breakpoint","getBreakpoint","breakpointsBase","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","emitContainerClasses","unsetGrabCursor","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","wasLoop","changeDirection","isEnabled","hasLoop","containerEl","innerHeight","minRatio","swiperElementNodeName","resizeObserver","eventsPrefix","uniqueNavElements","passiveListeners","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","moving","isLocked","attachEvents","detachEvents","wasLocked","lastSlideRightEdge","addClasses","classNames","suffixes","resultClasses","prepareClasses","removeClasses","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","extendParams","swiperParams","passedParams","trunc","clickTimeout","velocities","imagesToLoad","setProgress","getSlideClasses","updates","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","getWrapperSelector","getWrapper","slideSlots","hostEl","lazyElements","deleteInstance","cleanStyles","deleteProps","newDefaults","installModule","checkProps","prototypeGroup","protoMethod","use","animationFrame","resizeHandler","orientationChangeHandler","contentBoxSize","inlineSize","blockSize","unobserve","observers","WebkitMutationObserver","mutations","observerUpdate","characterData","observeParents","observeSlideChildren","containerParents","getEl","toggleEl","subEl","disabledClass","lockClass","onPrevClick","onNextClick","initButton","destroyButton","hideOnClick","hiddenClass","navigationDisabledClass","pagination","clickable","isHidden","toggle","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","onBulletClick","firstIndex","midIndex","classesToRemove","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","progressEl","paginationHTML","numberOfBullets","panel","panelButtons","panelDivs","panelOverlayMobileIcons","openClass","activeBodyClass","menuButton","togglePanel","closePanel","panelDiv","panelOverlayMobileIcon","panelButton","isOpen","overlay","pointerEvents","dataLayer","getVimeoPlayer","panelButtonParent","pageScroll","sectionsSlider","mediaQuery","sectionsSliderSelector","sectionsSliderWrapperSelector","sectionsSliderSlideSelector","bodyActiveClass","swiperSpeed","togglePageScrollClasses","slider","getSlideIndexFromHash","flagBodyLoaded","setupPageScroll","getPanelFromHash","sectionsSliderElement","sectionsSliderWrapperElement","initialIndex","mousewheel","keyboard","slideChange","newHash","headerLogo","initialSlideHash","buttons","anchors","targetElement","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","noMousewheelClass","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","handle","targetElContainsTarget","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","shiftKey","deltaMode","spinX","spinY","pixelX","pixelY","ignoreWheelEvents","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","releaseScroll","returnValue","kc","keyCode","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","clientTop","scrollY","scrollX","swiperCoord","ready","activeClass","targetsClasses","handleSlideChangeTransitionEnd","handleSlideChange","menuPanel","closeButton","panelActiveBodyClass","toggleMenuPanel","closeMenuPanel","handleBodyClick","headerElement","scrollTimer","setStickyHeader","formSubmittedElement","rootMargin","targets","targetElements","IntersectionObserver","isIntersecting","annotationPlugin","generateAnnotations","coordinates","labelAnnotation","generateMobileAnnotations","mobileCoordinates","mobileLabels","mobileData","getResponsiveOptions","prioritizedLabels","myChart","annotationKey","xStarted","animationPath","lottieInstance","nextDuplicateSlide","unloadedSlideImage","contentSlider","contentSliderElements","componentId","slideChangeTransitionEnd","lottieAnimation","contentBoxes","contentBoxesElements","imageComponents","contentBox","image","lightText","darkText","imageItem","textLight","textDark"],"sourceRoot":""}