fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 3.88 kB
Source Map (JSON)
{"version":3,"file":"ColorAnimation.min.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","Math","cos","halfPI","wrapColorCallback","callback","rgba","valueProgress","durationProgress","Color","toRgba","ColorAnimation","AnimationBase","constructor","_ref","endValue","easing","onChange","onComplete","abort","options","_objectWithoutProperties","_excluded","startColor","getSource","endColor","super","_objectSpread","map","value","i","calculate","r","g","b","a","this","round","capValue","p","abs","find"],"mappings":"2YAWMA,EAAsCA,CAC1CC,EACAC,EACAC,EACAC,IAGOF,EAAaC,GADK,EAAIE,KAAKC,IAAKL,EAAcG,EAAYG,IAI7DC,EACJC,GAEAA,GAAQ,EACNC,EAAwBC,EAAuBC,IAC/CH,EAAS,IAAII,EAAMH,GAAMI,SAAUH,EAAeC,IAE/C,MAAMG,UAAuBC,EAClCC,WAAAA,CAAWC,GAQe,IARdhB,WACVA,EAAUiB,SACVA,EAAQC,OACRA,EAASpB,EAAkBqB,SAC3BA,EAAQC,WACRA,EAAUC,MACVA,GAEsBL,EADnBM,EAAOC,EAAAP,EAAAQ,GAEV,MAAMC,EAAa,IAAId,EAAMX,GAAY0B,YACnCC,EAAW,IAAIhB,EAAMM,GAAUS,YACrCE,MAAKC,EAAAA,KACAP,GAAO,CAAA,EAAA,CACVtB,WAAYyB,EACZxB,QAAS0B,EAASG,KAChB,CAACC,EAAOC,IAAMD,EAAQN,EAAWO,KAEnCd,SACAC,SAAUb,EAAkBa,GAC5BC,WAAYd,EAAkBc,GAC9BC,MAAOf,EAAkBe,KAE7B,CACUY,SAAAA,CAAUlC,GAClB,MAAOmC,EAAGC,EAAGC,EAAGC,GAAKC,KAAKtC,WAAW8B,KAAI,CAACC,EAAOC,IAC/CM,KAAKpB,OAAOnB,EAAagC,EAAOO,KAAKrC,QAAQ+B,GAAIM,KAAKpC,SAAU8B,KAE5DD,EAAQ,IACT,CAACG,EAAGC,EAAGC,GAAGN,IAAI3B,KAAKoC,OACtBC,EAAS,EAAGH,EAAG,IAEjB,MAAO,CACLN,QACAtB,cAEEsB,EACGD,KAAI,CAACW,EAAGT,IACa,IAApBM,KAAKrC,QAAQ+B,GACT7B,KAAKuC,KAAKD,EAAIH,KAAKtC,WAAWgC,IAAMM,KAAKrC,QAAQ+B,IACjD,IAELW,MAAMF,GAAY,IAANA,KAAY,EAEjC"}