123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752 |
- /* eslint-disable camelcase */
- import {
- degToRads,
- BMMath,
- } from '../common';
- import {
- createTypedArray,
- } from '../helpers/arrays';
- import BezierFactory from '../../3rd_party/BezierEaser';
- import shapePool from '../pooling/shape_pool';
- import seedrandom from '../../3rd_party/seedrandom';
- import propTypes from '../helpers/propTypes';
- const ExpressionManager = (function () {
- 'use strict';
- var ob = {};
- var Math = BMMath;
- var window = null;
- var document = null;
- var XMLHttpRequest = null;
- var fetch = null;
- var frames = null;
- var _lottieGlobal = {};
- seedrandom(BMMath);
- function resetFrame() {
- _lottieGlobal = {};
- }
- function $bm_isInstanceOfArray(arr) {
- return arr.constructor === Array || arr.constructor === Float32Array;
- }
- function isNumerable(tOfV, v) {
- return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';
- }
- function $bm_neg(a) {
- var tOfA = typeof a;
- if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {
- return -a;
- }
- if ($bm_isInstanceOfArray(a)) {
- var i;
- var lenA = a.length;
- var retArr = [];
- for (i = 0; i < lenA; i += 1) {
- retArr[i] = -a[i];
- }
- return retArr;
- }
- if (a.propType) {
- return a.v;
- }
- return -a;
- }
- var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;
- var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;
- var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;
- function sum(a, b) {
- var tOfA = typeof a;
- var tOfB = typeof b;
- if ((isNumerable(tOfA, a) && isNumerable(tOfB, b)) || tOfA === 'string' || tOfB === 'string') {
- return a + b;
- }
- if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
- a = a.slice(0);
- a[0] += b;
- return a;
- }
- if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
- b = b.slice(0);
- b[0] = a + b[0];
- return b;
- }
- if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {
- var i = 0;
- var lenA = a.length;
- var lenB = b.length;
- var retArr = [];
- while (i < lenA || i < lenB) {
- if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {
- retArr[i] = a[i] + b[i];
- } else {
- retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];
- }
- i += 1;
- }
- return retArr;
- }
- return 0;
- }
- var add = sum;
- function sub(a, b) {
- var tOfA = typeof a;
- var tOfB = typeof b;
- if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
- if (tOfA === 'string') {
- a = parseInt(a, 10);
- }
- if (tOfB === 'string') {
- b = parseInt(b, 10);
- }
- return a - b;
- }
- if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
- a = a.slice(0);
- a[0] -= b;
- return a;
- }
- if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
- b = b.slice(0);
- b[0] = a - b[0];
- return b;
- }
- if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {
- var i = 0;
- var lenA = a.length;
- var lenB = b.length;
- var retArr = [];
- while (i < lenA || i < lenB) {
- if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {
- retArr[i] = a[i] - b[i];
- } else {
- retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];
- }
- i += 1;
- }
- return retArr;
- }
- return 0;
- }
- function mul(a, b) {
- var tOfA = typeof a;
- var tOfB = typeof b;
- var arr;
- if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
- return a * b;
- }
- var i;
- var len;
- if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
- len = a.length;
- arr = createTypedArray('float32', len);
- for (i = 0; i < len; i += 1) {
- arr[i] = a[i] * b;
- }
- return arr;
- }
- if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
- len = b.length;
- arr = createTypedArray('float32', len);
- for (i = 0; i < len; i += 1) {
- arr[i] = a * b[i];
- }
- return arr;
- }
- return 0;
- }
- function div(a, b) {
- var tOfA = typeof a;
- var tOfB = typeof b;
- var arr;
- if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {
- return a / b;
- }
- var i;
- var len;
- if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {
- len = a.length;
- arr = createTypedArray('float32', len);
- for (i = 0; i < len; i += 1) {
- arr[i] = a[i] / b;
- }
- return arr;
- }
- if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {
- len = b.length;
- arr = createTypedArray('float32', len);
- for (i = 0; i < len; i += 1) {
- arr[i] = a / b[i];
- }
- return arr;
- }
- return 0;
- }
- function mod(a, b) {
- if (typeof a === 'string') {
- a = parseInt(a, 10);
- }
- if (typeof b === 'string') {
- b = parseInt(b, 10);
- }
- return a % b;
- }
- var $bm_sum = sum;
- var $bm_sub = sub;
- var $bm_mul = mul;
- var $bm_div = div;
- var $bm_mod = mod;
- function clamp(num, min, max) {
- if (min > max) {
- var mm = max;
- max = min;
- min = mm;
- }
- return Math.min(Math.max(num, min), max);
- }
- function radiansToDegrees(val) {
- return val / degToRads;
- }
- var radians_to_degrees = radiansToDegrees;
- function degreesToRadians(val) {
- return val * degToRads;
- }
- var degrees_to_radians = radiansToDegrees;
- var helperLengthArray = [0, 0, 0, 0, 0, 0];
- function length(arr1, arr2) {
- if (typeof arr1 === 'number' || arr1 instanceof Number) {
- arr2 = arr2 || 0;
- return Math.abs(arr1 - arr2);
- }
- if (!arr2) {
- arr2 = helperLengthArray;
- }
- var i;
- var len = Math.min(arr1.length, arr2.length);
- var addedLength = 0;
- for (i = 0; i < len; i += 1) {
- addedLength += Math.pow(arr2[i] - arr1[i], 2);
- }
- return Math.sqrt(addedLength);
- }
- function normalize(vec) {
- return div(vec, length(vec));
- }
- function rgbToHsl(val) {
- var r = val[0]; var g = val[1]; var b = val[2];
- var max = Math.max(r, g, b);
- var min = Math.min(r, g, b);
- var h;
- var s;
- var l = (max + min) / 2;
- if (max === min) {
- h = 0; // achromatic
- s = 0; // achromatic
- } else {
- var d = max - min;
- s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
- switch (max) {
- case r: h = (g - b) / d + (g < b ? 6 : 0); break;
- case g: h = (b - r) / d + 2; break;
- case b: h = (r - g) / d + 4; break;
- default: break;
- }
- h /= 6;
- }
- return [h, s, l, val[3]];
- }
- function hue2rgb(p, q, t) {
- if (t < 0) t += 1;
- if (t > 1) t -= 1;
- if (t < 1 / 6) return p + (q - p) * 6 * t;
- if (t < 1 / 2) return q;
- if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
- return p;
- }
- function hslToRgb(val) {
- var h = val[0];
- var s = val[1];
- var l = val[2];
- var r;
- var g;
- var b;
- if (s === 0) {
- r = l; // achromatic
- b = l; // achromatic
- g = l; // achromatic
- } else {
- var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
- var p = 2 * l - q;
- r = hue2rgb(p, q, h + 1 / 3);
- g = hue2rgb(p, q, h);
- b = hue2rgb(p, q, h - 1 / 3);
- }
- return [r, g, b, val[3]];
- }
- function linear(t, tMin, tMax, value1, value2) {
- if (value1 === undefined || value2 === undefined) {
- value1 = tMin;
- value2 = tMax;
- tMin = 0;
- tMax = 1;
- }
- if (tMax < tMin) {
- var _tMin = tMax;
- tMax = tMin;
- tMin = _tMin;
- }
- if (t <= tMin) {
- return value1;
- } if (t >= tMax) {
- return value2;
- }
- var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);
- if (!value1.length) {
- return value1 + (value2 - value1) * perc;
- }
- var i;
- var len = value1.length;
- var arr = createTypedArray('float32', len);
- for (i = 0; i < len; i += 1) {
- arr[i] = value1[i] + (value2[i] - value1[i]) * perc;
- }
- return arr;
- }
- function random(min, max) {
- if (max === undefined) {
- if (min === undefined) {
- min = 0;
- max = 1;
- } else {
- max = min;
- min = undefined;
- }
- }
- if (max.length) {
- var i;
- var len = max.length;
- if (!min) {
- min = createTypedArray('float32', len);
- }
- var arr = createTypedArray('float32', len);
- var rnd = BMMath.random();
- for (i = 0; i < len; i += 1) {
- arr[i] = min[i] + rnd * (max[i] - min[i]);
- }
- return arr;
- }
- if (min === undefined) {
- min = 0;
- }
- var rndm = BMMath.random();
- return min + rndm * (max - min);
- }
- function createPath(points, inTangents, outTangents, closed) {
- var i;
- var len = points.length;
- var path = shapePool.newElement();
- path.setPathData(!!closed, len);
- var arrPlaceholder = [0, 0];
- var inVertexPoint;
- var outVertexPoint;
- for (i = 0; i < len; i += 1) {
- inVertexPoint = (inTangents && inTangents[i]) ? inTangents[i] : arrPlaceholder;
- outVertexPoint = (outTangents && outTangents[i]) ? outTangents[i] : arrPlaceholder;
- 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);
- }
- return path;
- }
- function initiateExpression(elem, data, property) {
- // Bail out if we don't want expressions
- function noOp(_value) {
- return _value;
- }
- if (!elem.globalData.renderConfig.runExpressions) {
- return noOp;
- }
- var val = data.x;
- var needsVelocity = /velocity(?![\w\d])/.test(val);
- var _needsRandom = val.indexOf('random') !== -1;
- var elemType = elem.data.ty;
- var transform;
- var $bm_transform;
- var content;
- var effect;
- var thisProperty = property;
- thisProperty._name = elem.data.nm;
- thisProperty.valueAtTime = thisProperty.getValueAtTime;
- Object.defineProperty(thisProperty, 'value', {
- get: function () {
- return thisProperty.v;
- },
- });
- elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;
- elem.comp.displayStartTime = 0;
- var inPoint = elem.data.ip / elem.comp.globalData.frameRate;
- var outPoint = elem.data.op / elem.comp.globalData.frameRate;
- var width = elem.data.sw ? elem.data.sw : 0;
- var height = elem.data.sh ? elem.data.sh : 0;
- var name = elem.data.nm;
- var loopIn;
- var loop_in;
- var loopOut;
- var loop_out;
- var smooth;
- var toWorld;
- var fromWorld;
- var fromComp;
- var toComp;
- var fromCompToSurface;
- var position;
- var rotation;
- var anchorPoint;
- var scale;
- var thisLayer;
- var thisComp;
- var mask;
- var valueAtTime;
- var velocityAtTime;
- var scoped_bm_rt;
- // val = val.replace(/(\\?"|')((http)(s)?(:\/))?\/.*?(\\?"|')/g, "\"\""); // deter potential network calls
- var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval
- var numKeys = property.kf ? data.k.length : 0;
- var active = !this.data || this.data.hd !== true;
- var wiggle = function wiggle(freq, amp) {
- var iWiggle;
- var j;
- var lenWiggle = this.pv.length ? this.pv.length : 1;
- var addedAmps = createTypedArray('float32', lenWiggle);
- freq = 5;
- var iterations = Math.floor(time * freq);
- iWiggle = 0;
- j = 0;
- while (iWiggle < iterations) {
- // var rnd = BMMath.random();
- for (j = 0; j < lenWiggle; j += 1) {
- addedAmps[j] += -amp + amp * 2 * BMMath.random();
- // addedAmps[j] += -amp + amp*2*rnd;
- }
- iWiggle += 1;
- }
- // var rnd2 = BMMath.random();
- var periods = time * freq;
- var perc = periods - Math.floor(periods);
- var arr = createTypedArray('float32', lenWiggle);
- if (lenWiggle > 1) {
- for (j = 0; j < lenWiggle; j += 1) {
- 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;
- // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);
- }
- return arr;
- }
- return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;
- }.bind(this);
- if (thisProperty.loopIn) {
- loopIn = thisProperty.loopIn.bind(thisProperty);
- loop_in = loopIn;
- }
- if (thisProperty.loopOut) {
- loopOut = thisProperty.loopOut.bind(thisProperty);
- loop_out = loopOut;
- }
- if (thisProperty.smooth) {
- smooth = thisProperty.smooth.bind(thisProperty);
- }
- function loopInDuration(type, duration) {
- return loopIn(type, duration, true);
- }
- function loopOutDuration(type, duration) {
- return loopOut(type, duration, true);
- }
- if (this.getValueAtTime) {
- valueAtTime = this.getValueAtTime.bind(this);
- }
- if (this.getVelocityAtTime) {
- velocityAtTime = this.getVelocityAtTime.bind(this);
- }
- var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);
- function lookAt(elem1, elem2) {
- var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];
- var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;
- var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;
- return [yaw, pitch, 0];
- }
- function easeOut(t, tMin, tMax, val1, val2) {
- return applyEase(easeOutBez, t, tMin, tMax, val1, val2);
- }
- function easeIn(t, tMin, tMax, val1, val2) {
- return applyEase(easeInBez, t, tMin, tMax, val1, val2);
- }
- function ease(t, tMin, tMax, val1, val2) {
- return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);
- }
- function applyEase(fn, t, tMin, tMax, val1, val2) {
- if (val1 === undefined) {
- val1 = tMin;
- val2 = tMax;
- } else {
- t = (t - tMin) / (tMax - tMin);
- }
- if (t > 1) {
- t = 1;
- } else if (t < 0) {
- t = 0;
- }
- var mult = fn(t);
- if ($bm_isInstanceOfArray(val1)) {
- var iKey;
- var lenKey = val1.length;
- var arr = createTypedArray('float32', lenKey);
- for (iKey = 0; iKey < lenKey; iKey += 1) {
- arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];
- }
- return arr;
- }
- return (val2 - val1) * mult + val1;
- }
- function nearestKey(time) {
- var iKey;
- var lenKey = data.k.length;
- var index;
- var keyTime;
- if (!data.k.length || typeof (data.k[0]) === 'number') {
- index = 0;
- keyTime = 0;
- } else {
- index = -1;
- time *= elem.comp.globalData.frameRate;
- if (time < data.k[0].t) {
- index = 1;
- keyTime = data.k[0].t;
- } else {
- for (iKey = 0; iKey < lenKey - 1; iKey += 1) {
- if (time === data.k[iKey].t) {
- index = iKey + 1;
- keyTime = data.k[iKey].t;
- break;
- } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {
- if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {
- index = iKey + 2;
- keyTime = data.k[iKey + 1].t;
- } else {
- index = iKey + 1;
- keyTime = data.k[iKey].t;
- }
- break;
- }
- }
- if (index === -1) {
- index = iKey + 1;
- keyTime = data.k[iKey].t;
- }
- }
- }
- var obKey = {};
- obKey.index = index;
- obKey.time = keyTime / elem.comp.globalData.frameRate;
- return obKey;
- }
- function key(ind) {
- var obKey;
- var iKey;
- var lenKey;
- if (!data.k.length || typeof (data.k[0]) === 'number') {
- throw new Error('The property has no keyframe at index ' + ind);
- }
- ind -= 1;
- obKey = {
- time: data.k[ind].t / elem.comp.globalData.frameRate,
- value: [],
- };
- var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;
- lenKey = arr.length;
- for (iKey = 0; iKey < lenKey; iKey += 1) {
- obKey[iKey] = arr[iKey];
- obKey.value[iKey] = arr[iKey];
- }
- return obKey;
- }
- function framesToTime(fr, fps) {
- if (!fps) {
- fps = elem.comp.globalData.frameRate;
- }
- return fr / fps;
- }
- function timeToFrames(t, fps) {
- if (!t && t !== 0) {
- t = time;
- }
- if (!fps) {
- fps = elem.comp.globalData.frameRate;
- }
- return t * fps;
- }
- function seedRandom(seed) {
- BMMath.seedrandom(randSeed + seed);
- }
- function sourceRectAtTime() {
- return elem.sourceRectAtTime();
- }
- function substring(init, end) {
- if (typeof value === 'string') {
- if (end === undefined) {
- return value.substring(init);
- }
- return value.substring(init, end);
- }
- return '';
- }
- function substr(init, end) {
- if (typeof value === 'string') {
- if (end === undefined) {
- return value.substr(init);
- }
- return value.substr(init, end);
- }
- return '';
- }
- function posterizeTime(framesPerSecond) {
- time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;
- value = valueAtTime(time);
- }
- var time;
- var velocity;
- var value;
- var text;
- var textIndex;
- var textTotal;
- var selectorValue;
- var index = elem.data.ind;
- var hasParent = !!(elem.hierarchy && elem.hierarchy.length);
- var parent;
- var randSeed = Math.floor(Math.random() * 1000000);
- var globalData = elem.globalData;
- function executeExpression(_value) {
- // globalData.pushExpression();
- value = _value;
- if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {
- return value;
- }
- if (this.propType === 'textSelector') {
- textIndex = this.textIndex;
- textTotal = this.textTotal;
- selectorValue = this.selectorValue;
- }
- if (!thisLayer) {
- text = elem.layerInterface.text;
- thisLayer = elem.layerInterface;
- thisComp = elem.comp.compInterface;
- toWorld = thisLayer.toWorld.bind(thisLayer);
- fromWorld = thisLayer.fromWorld.bind(thisLayer);
- fromComp = thisLayer.fromComp.bind(thisLayer);
- toComp = thisLayer.toComp.bind(thisLayer);
- mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;
- fromCompToSurface = fromComp;
- }
- if (!transform) {
- transform = elem.layerInterface('ADBE Transform Group');
- $bm_transform = transform;
- if (transform) {
- anchorPoint = transform.anchorPoint;
- /* position = transform.position;
- rotation = transform.rotation;
- scale = transform.scale; */
- }
- }
- if (elemType === 4 && !content) {
- content = thisLayer('ADBE Root Vectors Group');
- }
- if (!effect) {
- effect = thisLayer(4);
- }
- hasParent = !!(elem.hierarchy && elem.hierarchy.length);
- if (hasParent && !parent) {
- parent = elem.hierarchy[0].layerInterface;
- }
- time = this.comp.renderedFrame / this.comp.globalData.frameRate;
- if (_needsRandom) {
- seedRandom(randSeed + time);
- }
- if (needsVelocity) {
- velocity = velocityAtTime(time);
- }
- expression_function();
- this.frameExpressionId = elem.globalData.frameId;
- // TODO: Check if it's possible to return on ShapeInterface the .v value
- // Changed this to a ternary operation because Rollup failed compiling it correctly
- scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE
- ? scoped_bm_rt.v
- : scoped_bm_rt;
- return scoped_bm_rt;
- }
- // Bundlers will see these as dead code and unless we reference them
- 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];
- return executeExpression;
- }
- ob.initiateExpression = initiateExpression;
- 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];
- ob.resetFrame = resetFrame;
- return ob;
- }());
- export default ExpressionManager;
|