UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 4.91 kB
{"version":3,"file":"ColorAnimation.mjs","sources":["../../../../src/util/animation/ColorAnimation.ts"],"sourcesContent":["import { Color } from '../../color/Color';\nimport type { TRGBAColorSource } from '../../color/typedefs';\nimport { halfPI } from '../../constants';\nimport { capValue } from '../misc/capValue';\nimport { AnimationBase } from './AnimationBase';\nimport type {\n ColorAnimationOptions,\n TEasingFunction,\n TOnAnimationChangeCallback,\n} from './types';\n\nconst defaultColorEasing: TEasingFunction = (\n timeElapsed,\n startValue,\n byValue,\n duration,\n) => {\n const durationProgress = 1 - Math.cos((timeElapsed / duration) * halfPI);\n return startValue + byValue * durationProgress;\n};\n\nconst wrapColorCallback = <R>(\n callback?: TOnAnimationChangeCallback<string, R>,\n) =>\n callback &&\n ((rgba: TRGBAColorSource, valueProgress: number, durationProgress: number) =>\n callback(new Color(rgba).toRgba(), valueProgress, durationProgress));\n\nexport class ColorAnimation extends AnimationBase<TRGBAColorSource> {\n constructor({\n startValue,\n endValue,\n easing = defaultColorEasing,\n onChange,\n onComplete,\n abort,\n ...options\n }: ColorAnimationOptions) {\n const startColor = new Color(startValue).getSource();\n const endColor = new Color(endValue).getSource();\n super({\n ...options,\n startValue: startColor,\n byValue: endColor.map(\n (value, i) => value - startColor[i],\n ) as TRGBAColorSource,\n easing,\n onChange: wrapColorCallback(onChange),\n onComplete: wrapColorCallback(onComplete),\n abort: wrapColorCallback(abort),\n });\n }\n protected calculate(timeElapsed: number) {\n const [r, g, b, a] = this.startValue.map((value, i) =>\n this.easing(timeElapsed, value, this.byValue[i], this.duration, i),\n ) as TRGBAColorSource;\n const value = [\n ...[r, g, b].map(Math.round),\n capValue(0, a, 1),\n ] as TRGBAColorSource;\n return {\n value,\n valueProgress:\n // to correctly calculate the change ratio we must find a changed value\n value\n .map((p, i) =>\n this.byValue[i] !== 0\n ? Math.abs((p - this.startValue[i]) / this.byValue[i])\n : 0,\n )\n .find((p) => p !== 0) || 0,\n };\n }\n}\n"],"names":["defaultColorEasing","timeElapsed","startValue","byValue","duration","durationProgress","Math","cos","halfPI","wrapColorCallback","callback","rgba","valueProgress","Color","toRgba","ColorAnimation","AnimationBase","constructor","_ref","endValue","easing","onChange","onComplete","abort","options","_objectWithoutProperties","_excluded","startColor","getSource","endColor","_objectSpread","map","value","i","calculate","r","g","b","a","round","capValue","p","abs","find"],"mappings":"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"}