UNPKG

@lordicon/internal

Version:

Minimalistic internal animation player.

1 lines 778 kB
{"version":3,"file":"index.mjs","sources":["../src/utils/helpers/html_elements.js","../src/utils/functionExtensions.js","../src/utils/helpers/arrays.js","../src/utils/common.js","../src/utils/BaseEvent.js","../src/global.js","../src/utils/DataManager.js","../src/utils/markers/markerParser.js","../src/utils/expressions/ProjectInterface.js","../src/renderers/renderersManager.js","../src/animation/AnimationItem.js","../src/animation/AnimationManager.js","../src/3rd_party/BezierEaser.js","../src/utils/pooling/pooling.js","../src/utils/pooling/pool_factory.js","../src/utils/pooling/bezier_length_pool.js","../src/utils/pooling/segments_length_pool.js","../src/utils/bez.js","../src/utils/PropertyFactory.js","../src/utils/helpers/dynamicProperties.js","../src/utils/pooling/point_pool.js","../src/utils/shapes/ShapePath.js","../src/utils/pooling/shape_pool.js","../src/utils/shapes/ShapeCollection.js","../src/utils/pooling/shapeCollection_pool.js","../src/utils/shapes/ShapeProperty.js","../src/3rd_party/transformation-matrix.js","../src/modules/main.js","../src/utils/shapes/ShapeModifiers.js","../src/utils/shapes/TrimModifier.js","../src/utils/shapes/PuckerAndBloatModifier.js","../src/utils/TransformProperty.js","../src/utils/shapes/RepeaterModifier.js","../src/utils/shapes/RoundCornersModifier.js","../src/utils/PolynomialBezier.js","../src/utils/shapes/ZigZagModifier.js","../src/utils/shapes/OffsetPathModifier.js","../src/utils/helpers/svg_elements.js","../src/renderers/BaseRenderer.js","../src/utils/helpers/blendModes.js","../src/effects/SliderEffect.js","../src/effects/EffectsManager.js","../src/elements/BaseElement.js","../src/utils/helpers/effectTypes.js","../src/elements/helpers/TransformElement.js","../src/elements/mask.js","../src/utils/filters.js","../src/utils/featureSupport.js","../src/elements/svgElements/SVGEffects.js","../src/elements/svgElements/SVGBaseElement.js","../src/elements/helpers/HierarchyElement.js","../src/elements/helpers/FrameElement.js","../src/elements/helpers/RenderableElement.js","../src/elements/helpers/RenderableDOMElement.js","../src/elements/helpers/shapes/ProcessedElement.js","../src/elements/ShapeElement.js","../src/utils/helpers/shapeEnums.js","../src/elements/helpers/shapes/SVGShapeData.js","../src/elements/helpers/shapes/SVGStyleData.js","../src/utils/shapes/DashProperty.js","../src/elements/helpers/shapes/SVGStrokeStyleData.js","../src/elements/helpers/shapes/SVGFillStyleData.js","../src/elements/helpers/shapes/SVGNoStyleData.js","../src/utils/shapes/GradientProperty.js","../src/elements/helpers/shapes/SVGGradientFillStyleData.js","../src/elements/helpers/shapes/SVGGradientStrokeStyleData.js","../src/elements/helpers/shapes/ShapeGroupData.js","../src/elements/helpers/shapes/SVGTransformData.js","../src/utils/shapes/shapePathBuilder.js","../src/elements/helpers/shapes/SVGElementsRenderer.js","../src/elements/svgElements/SVGShapeElement.js","../src/elements/SolidElement.js","../src/elements/NullElement.js","../src/renderers/SVGRendererBase.js","../src/elements/CompElement.js","../src/elements/svgElements/SVGCompElement.js","../src/renderers/SVGRenderer.js","../src/modules/svg_light.js","../src/utils/expressions/CompInterface.js","../src/utils/helpers/propTypes.js","../src/eval/eval.ts","../src/utils/expressions/ExpressionManager.js","../src/utils/expressions/Expressions.js","../src/utils/expressions/MaskInterface.js","../src/utils/expressions/ExpressionValueFactory.js","../src/utils/expressions/TransformInterface.js","../src/utils/expressions/LayerInterface.js","../src/utils/expressions/PropertyGroupFactory.js","../src/utils/expressions/PropertyInterface.js","../src/utils/expressions/EffectInterface.js","../src/utils/expressions/shapes/ShapePathInterface.js","../src/utils/expressions/ShapeInterface.js","../src/utils/expressions/FootageInterface.js","../src/utils/expressions/InterfacesProvider.js","../src/utils/expressions/expressionHelpers.js","../src/utils/expressions/ExpressionPropertyDecorator.js","../src/elements/svgElements/effects/SVGComposableEffect.js","../src/elements/svgElements/effects/SVGTintEffect.js","../src/elements/svgElements/effects/SVGFillFilter.js","../src/elements/svgElements/effects/SVGStrokeEffect.js","../src/elements/svgElements/effects/SVGTritoneFilter.js","../src/elements/svgElements/effects/SVGProLevelsFilter.js","../src/elements/svgElements/effects/SVGDropShadowEffect.js","../src/elements/svgElements/effects/SVGMatte3Effect.js","../src/elements/svgElements/effects/SVGGaussianBlurEffect.js","../src/effects/TransformEffect.js","../src/elements/svgElements/effects/SVGTransformEffect.js","../src/modules/svg.js","../src/index.ts"],"sourcesContent":["function createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n}\n\nexport default createTag;\n","function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n}\n\nfunction getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n}\n\nfunction createProxyFunction(prototype) {\n function ProxyFunction() { }\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n}\n\nexport {\n extendPrototype,\n getDescriptor,\n createProxyFunction,\n};\n","const createTypedArray = (function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n default:\n value = 1.1;\n break;\n }\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n return arr;\n }\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n } if (type === 'int16') {\n return new Int16Array(len);\n } if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n return createRegularArray(type, len);\n }\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n return createRegularArray;\n}());\n\nfunction createSizedArray(len) {\n return Array.apply(null, { length: len });\n}\n\nexport {\n createTypedArray,\n createSizedArray,\n};\n","import {\n createSizedArray,\n} from './helpers/arrays';\n\nlet subframeEnabled = true;\nlet expressionsPlugin = null;\nlet expressionsInterfaces = null;\nlet idPrefix = '';\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nlet _shouldRoundValues = false;\nconst bmPow = Math.pow;\nconst bmSqrt = Math.sqrt;\nconst bmFloor = Math.floor;\nconst bmMax = Math.max;\nconst bmMin = Math.min;\n\nconst BMMath = {};\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 for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n}());\n\nfunction ProjectInterface() { return {}; }\nBMMath.random = Math.random;\nBMMath.abs = function (val) {\n var tOfVal = typeof val;\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n return absArr;\n }\n return Math.abs(val);\n};\nlet defaultCurveSegments = 150;\nconst degToRads = Math.PI / 180;\nconst roundCorner = 0.5519;\n\nfunction roundValues(flag) {\n _shouldRoundValues = !!flag;\n}\n\nfunction bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n return value;\n}\n\nfunction 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\nfunction 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\nfunction BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n}\n\nfunction 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\nfunction BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n}\n\nfunction BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n}\n\nfunction BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n}\n\nfunction BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n}\n\nfunction BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n}\n\nconst createElementID = (function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix + '__lottie_element_' + _count;\n };\n}());\n\nfunction 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 switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n default: break;\n }\n return [r,\n g,\n b];\n}\n\nfunction 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: h = 0; break;\n case r: h = (g - b) + d * (g < b ? 6 : 0); h /= 6 * d; break;\n case g: h = (b - r) + d * 2; h /= 6 * d; break;\n case b: h = (r - g) + d * 4; h /= 6 * d; break;\n default: break;\n }\n\n return [\n h,\n s,\n v,\n ];\n}\n\nfunction addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n}\n\nfunction addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n}\n\nfunction addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n}\n\nconst rgbToHex = (function () {\n var colorMap = [];\n var i;\n var hex;\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 if (g < 0) {\n g = 0;\n }\n if (b < 0) {\n b = 0;\n }\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n}());\n\nconst setSubframeEnabled = (flag) => { subframeEnabled = !!flag; };\nconst getSubframeEnabled = () => subframeEnabled;\nconst setExpressionsPlugin = (value) => { expressionsPlugin = value; };\nconst getExpressionsPlugin = () => expressionsPlugin;\nconst setExpressionInterfaces = (value) => { expressionsInterfaces = value; };\nconst getExpressionInterfaces = () => expressionsInterfaces;\nconst setDefaultCurveSegments = (value) => { defaultCurveSegments = value; };\nconst getDefaultCurveSegments = () => defaultCurveSegments;\nconst setIdPrefix = (value) => { idPrefix = value; };\nconst getIdPrefix = () => idPrefix;\n\nexport {\n setSubframeEnabled,\n getSubframeEnabled,\n setExpressionsPlugin,\n getExpressionsPlugin,\n setExpressionInterfaces,\n getExpressionInterfaces,\n setDefaultCurveSegments,\n getDefaultCurveSegments,\n isSafari,\n bmPow,\n bmSqrt,\n bmFloor,\n bmMax,\n bmMin,\n degToRads,\n roundCorner,\n styleDiv,\n bmRnd,\n roundValues,\n BMEnterFrameEvent,\n BMCompleteEvent,\n BMCompleteLoopEvent,\n BMSegmentStartEvent,\n BMDestroyEvent,\n BMRenderFrameErrorEvent,\n BMConfigErrorEvent,\n BMAnimationConfigErrorEvent,\n createElementID,\n addSaturationToRGB,\n addBrightnessToRGB,\n addHueToRGB,\n rgbToHex,\n setIdPrefix,\n getIdPrefix,\n BMMath,\n ProjectInterface,\n};\n","function BaseEvent() { }\nBaseEvent.prototype = {\n triggerEvent: function (eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function (eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n this._cbs[eventName].push(callback);\n\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function (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 while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n i -= 1;\n len -= 1;\n }\n i += 1;\n }\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n },\n};\n\nexport default BaseEvent;\n","const svgNS = 'http://www.w3.org/2000/svg';\n\nlet locationHref = '';\nlet _useWebWorker = false;\n\nconst initialDefaultFrame = -999999;\n\nconst setWebWorker = (flag) => { _useWebWorker = !!flag; };\nconst getWebWorker = () => _useWebWorker;\n\nconst setLocationHref = (value) => { locationHref = value; };\nconst getLocationHref = () => locationHref;\n\nexport {\n svgNS,\n initialDefaultFrame,\n setWebWorker,\n getWebWorker,\n setLocationHref,\n getLocationHref,\n};\n","import { getWebWorker } from '../global';\n\nconst dataManager = (function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function () {\n\n },\n postMessage: function (path) {\n workerFn({\n data: path,\n });\n },\n };\n var _workerSelf = {\n postMessage: function (data) {\n workerProxy.onmessage({\n data: data,\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()], { type: 'text/javascript' });\n // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n var url = URL.createObjectURL(blob);\n return new Worker(url);\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 for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (('ks' in layerData) && !layerData.completed) {\n layerData.completed = true;\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\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 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 if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\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 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);\n // 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 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 while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n i += 1;\n }\n return null;\n }\n\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n return JSON.parse(JSON.stringify(comp.layers));\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 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 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 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 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 if (minimum[0] > animVersion[0]) {\n return true;\n } if (animVersion[0] > minimum[0]) {\n return false;\n }\n if (minimum[1] > animVersion[1]) {\n return true;\n } if (animVersion[1] > minimum[1]) {\n return false;\n }\n if (minimum[2] > animVersion[2]) {\n return true;\n } if (animVersion[2] > minimum[2]) {\n return false;\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 {\n s: documentData,\n t: 0,\n },\n ],\n };\n }\n\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\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 if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\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 for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\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: { k: [0, 0], a: 0 },\n s: { k: [100, 100], a: 0 },\n a: { k: [0, 0], a: 0 },\n r: { k: 0, a: 0 },\n o: { k: 100, a: 0 },\n };\n if (!animationData.chars[i].t) {\n charData.data.shapes.push(\n {\n ty: 'no',\n }\n );\n charData.data.shapes[0].it.push(\n {\n p: { k: [0, 0], a: 0 },\n s: { k: [100, 100], a: 0 },\n a: { k: [0, 0], a: 0 },\n r: { k: 0, a: 0 },\n o: { k: 100, a: 0 },\n sk: { k: 0, a: 0 },\n sa: { k: 0, a: 0 },\n ty: 'tr',\n }\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 if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a,\n };\n }\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p,\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 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 if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\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 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 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 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 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 if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\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 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 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 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 for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\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 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 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 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 if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\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 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)) {\n // 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\n return moduleOb;\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 if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n if (xhr.response && typeof xhr.response === 'object') {\n return xhr.response;\n } if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n } if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n return null;\n }\n\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n // set responseType after calling open or IE will break.\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) { } // eslint-disable-line no-empty\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 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 xhr.send();\n }\n return {\n load: loadAsset,\n };\n }());\n }\n\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(\n e.data.path,\n e.data.fullPath,\n function (data) {\n _workerSelf.dataManager.completeData(data);\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success',\n });\n },\n function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error',\n });\n }\n );\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n _workerSelf.dataManager.completeData(animation);\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(\n e.data.path,\n e.data.fullPath,\n function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success',\n });\n },\n function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error',\n });\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 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\nexport default dataManager;\n","const markerParser = (\n\n function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n if (keysCount === 0) {\n throw new Error();\n }\n return keys;\n }\n\n return function (_markers) {\n var markers = [];\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 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 };\