| import { |
| createSizedArray, |
| } from './helpers/arrays'; |
| |
| let subframeEnabled = true; |
| let expressionsPlugin = null; |
| let idPrefix = ''; |
| const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); |
| let _shouldRoundValues = false; |
| const bmPow = Math.pow; |
| const bmSqrt = Math.sqrt; |
| const bmFloor = Math.floor; |
| const bmMax = Math.max; |
| const bmMin = Math.min; |
| |
| const BMMath = {}; |
| (function () { |
| 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']; |
| var i; |
| var len = propertyNames.length; |
| for (i = 0; i < len; i += 1) { |
| BMMath[propertyNames[i]] = Math[propertyNames[i]]; |
| } |
| }()); |
| |
| function ProjectInterface() { return {}; } |
| BMMath.random = Math.random; |
| BMMath.abs = function (val) { |
| var tOfVal = typeof val; |
| if (tOfVal === 'object' && val.length) { |
| var absArr = createSizedArray(val.length); |
| var i; |
| var len = val.length; |
| for (i = 0; i < len; i += 1) { |
| absArr[i] = Math.abs(val[i]); |
| } |
| return absArr; |
| } |
| return Math.abs(val); |
| }; |
| let defaultCurveSegments = 150; |
| const degToRads = Math.PI / 180; |
| const roundCorner = 0.5519; |
| |
| function roundValues(flag) { |
| _shouldRoundValues = !!flag; |
| } |
| |
| function bmRnd(value) { |
| if (_shouldRoundValues) { |
| return Math.round(value); |
| } |
| return value; |
| } |
| |
| function styleDiv(element) { |
| element.style.position = 'absolute'; |
| element.style.top = 0; |
| element.style.left = 0; |
| element.style.display = 'block'; |
| element.style.transformOrigin = '0 0'; |
| element.style.webkitTransformOrigin = '0 0'; |
| element.style.backfaceVisibility = 'visible'; |
| element.style.webkitBackfaceVisibility = 'visible'; |
| element.style.transformStyle = 'preserve-3d'; |
| element.style.webkitTransformStyle = 'preserve-3d'; |
| element.style.mozTransformStyle = 'preserve-3d'; |
| } |
| |
| function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) { |
| this.type = type; |
| this.currentTime = currentTime; |
| this.totalTime = totalTime; |
| this.direction = frameMultiplier < 0 ? -1 : 1; |
| } |
| |
| function BMCompleteEvent(type, frameMultiplier) { |
| this.type = type; |
| this.direction = frameMultiplier < 0 ? -1 : 1; |
| } |
| |
| function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) { |
| this.type = type; |
| this.currentLoop = currentLoop; |
| this.totalLoops = totalLoops; |
| this.direction = frameMultiplier < 0 ? -1 : 1; |
| } |
| |
| function BMSegmentStartEvent(type, firstFrame, totalFrames) { |
| this.type = type; |
| this.firstFrame = firstFrame; |
| this.totalFrames = totalFrames; |
| } |
| |
| function BMDestroyEvent(type, target) { |
| this.type = type; |
| this.target = target; |
| } |
| |
| function BMRenderFrameErrorEvent(nativeError, currentTime) { |
| this.type = 'renderFrameError'; |
| this.nativeError = nativeError; |
| this.currentTime = currentTime; |
| } |
| |
| function BMConfigErrorEvent(nativeError) { |
| this.type = 'configError'; |
| this.nativeError = nativeError; |
| } |
| |
| function BMAnimationConfigErrorEvent(type, nativeError) { |
| this.type = type; |
| this.nativeError = nativeError; |
| } |
| |
| const createElementID = (function () { |
| var _count = 0; |
| return function createID() { |
| _count += 1; |
| return idPrefix + '__lottie_element_' + _count; |
| }; |
| }()); |
| |
| function HSVtoRGB(h, s, v) { |
| var r; |
| var g; |
| var b; |
| var i; |
| var f; |
| var p; |
| var q; |
| var t; |
| i = Math.floor(h * 6); |
| f = h * 6 - i; |
| p = v * (1 - s); |
| q = v * (1 - f * s); |
| t = v * (1 - (1 - f) * s); |
| switch (i % 6) { |
| case 0: r = v; g = t; b = p; break; |
| case 1: r = q; g = v; b = p; break; |
| case 2: r = p; g = v; b = t; break; |
| case 3: r = p; g = q; b = v; break; |
| case 4: r = t; g = p; b = v; break; |
| case 5: r = v; g = p; b = q; break; |
| default: break; |
| } |
| return [r, |
| g, |
| b]; |
| } |
| |
| function RGBtoHSV(r, g, b) { |
| var max = Math.max(r, g, b); |
| var min = Math.min(r, g, b); |
| var d = max - min; |
| var h; |
| var s = (max === 0 ? 0 : d / max); |
| var v = max / 255; |
| |
| switch (max) { |
| case min: h = 0; break; |
| case r: h = (g - b) + d * (g < b ? 6 : 0); h /= 6 * d; break; |
| case g: h = (b - r) + d * 2; h /= 6 * d; break; |
| case b: h = (r - g) + d * 4; h /= 6 * d; break; |
| default: break; |
| } |
| |
| return [ |
| h, |
| s, |
| v, |
| ]; |
| } |
| |
| function addSaturationToRGB(color, offset) { |
| var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); |
| hsv[1] += offset; |
| if (hsv[1] > 1) { |
| hsv[1] = 1; |
| } else if (hsv[1] <= 0) { |
| hsv[1] = 0; |
| } |
| return HSVtoRGB(hsv[0], hsv[1], hsv[2]); |
| } |
| |
| function addBrightnessToRGB(color, offset) { |
| var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); |
| hsv[2] += offset; |
| if (hsv[2] > 1) { |
| hsv[2] = 1; |
| } else if (hsv[2] < 0) { |
| hsv[2] = 0; |
| } |
| return HSVtoRGB(hsv[0], hsv[1], hsv[2]); |
| } |
| |
| function addHueToRGB(color, offset) { |
| var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); |
| hsv[0] += offset / 360; |
| if (hsv[0] > 1) { |
| hsv[0] -= 1; |
| } else if (hsv[0] < 0) { |
| hsv[0] += 1; |
| } |
| return HSVtoRGB(hsv[0], hsv[1], hsv[2]); |
| } |
| |
| const rgbToHex = (function () { |
| var colorMap = []; |
| var i; |
| var hex; |
| for (i = 0; i < 256; i += 1) { |
| hex = i.toString(16); |
| colorMap[i] = hex.length === 1 ? '0' + hex : hex; |
| } |
| |
| return function (r, g, b) { |
| if (r < 0) { |
| r = 0; |
| } |
| if (g < 0) { |
| g = 0; |
| } |
| if (b < 0) { |
| b = 0; |
| } |
| return '#' + colorMap[r] + colorMap[g] + colorMap[b]; |
| }; |
| }()); |
| |
| const setSubframeEnabled = (flag) => { subframeEnabled = !!flag; }; |
| const getSubframeEnabled = () => subframeEnabled; |
| const setExpressionsPlugin = (value) => { expressionsPlugin = value; }; |
| const getExpressionsPlugin = () => expressionsPlugin; |
| const setDefaultCurveSegments = (value) => { defaultCurveSegments = value; }; |
| const getDefaultCurveSegments = () => defaultCurveSegments; |
| const setIdPrefix = (value) => { idPrefix = value; }; |
| const getIdPrefix = () => idPrefix; |
| |
| export { |
| setSubframeEnabled, |
| getSubframeEnabled, |
| setExpressionsPlugin, |
| getExpressionsPlugin, |
| setDefaultCurveSegments, |
| getDefaultCurveSegments, |
| isSafari, |
| bmPow, |
| bmSqrt, |
| bmFloor, |
| bmMax, |
| bmMin, |
| degToRads, |
| roundCorner, |
| styleDiv, |
| bmRnd, |
| roundValues, |
| BMEnterFrameEvent, |
| BMCompleteEvent, |
| BMCompleteLoopEvent, |
| BMSegmentStartEvent, |
| BMDestroyEvent, |
| BMRenderFrameErrorEvent, |
| BMConfigErrorEvent, |
| BMAnimationConfigErrorEvent, |
| createElementID, |
| addSaturationToRGB, |
| addBrightnessToRGB, |
| addHueToRGB, |
| rgbToHex, |
| setIdPrefix, |
| getIdPrefix, |
| BMMath, |
| ProjectInterface, |
| }; |