UNPKG

fabric

Version:

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

1 lines 4.71 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","startColor","getSource","endColor","map","value","i","calculate","r","g","b","a","round","capValue","p","abs","find"],"mappings":";;;;;AAWA,MAAMA,kBAAmC,GAAGA,CAC1CC,WAAW,EACXC,UAAU,EACVC,OAAO,EACPC,QAAQ,KACL;AACH,EAAA,MAAMC,gBAAgB,GAAG,CAAC,GAAGC,IAAI,CAACC,GAAG,CAAEN,WAAW,GAAGG,QAAQ,GAAII,MAAM,CAAC;AACxE,EAAA,OAAON,UAAU,GAAGC,OAAO,GAAGE,gBAAgB;AAChD,CAAC;AAED,MAAMI,iBAAiB,GACrBC,QAAgD,IAEhDA,QAAQ,KACP,CAACC,IAAsB,EAAEC,aAAqB,EAAEP,gBAAwB,KACvEK,QAAQ,CAAC,IAAIG,KAAK,CAACF,IAAI,CAAC,CAACG,MAAM,EAAE,EAAEF,aAAa,EAAEP,gBAAgB,CAAC,CAAC;AAEjE,MAAMU,cAAc,SAASC,aAAa,CAAmB;EAClEC,WAAWA,CAAAC,IAAA,EAQe;IAAA,IARd;MACVhB,UAAU;MACViB,QAAQ;AACRC,MAAAA,MAAM,GAAGpB,kBAAkB;MAC3BqB,QAAQ;MACRC,UAAU;MACVC,KAAK;MACL,GAAGC;AACkB,KAAC,GAAAN,IAAA;IACtB,MAAMO,UAAU,GAAG,IAAIZ,KAAK,CAACX,UAAU,CAAC,CAACwB,SAAS,EAAE;IACpD,MAAMC,QAAQ,GAAG,IAAId,KAAK,CAACM,QAAQ,CAAC,CAACO,SAAS,EAAE;AAChD,IAAA,KAAK,CAAC;AACJ,MAAA,GAAGF,OAAO;AACVtB,MAAAA,UAAU,EAAEuB,UAAU;AACtBtB,MAAAA,OAAO,EAAEwB,QAAQ,CAACC,GAAG,CACnB,CAACC,KAAK,EAAEC,CAAC,KAAKD,KAAK,GAAGJ,UAAU,CAACK,CAAC,CACpC,CAAqB;MACrBV,MAAM;AACNC,MAAAA,QAAQ,EAAEZ,iBAAiB,CAACY,QAAQ,CAAC;AACrCC,MAAAA,UAAU,EAAEb,iBAAiB,CAACa,UAAU,CAAC;MACzCC,KAAK,EAAEd,iBAAiB,CAACc,KAAK;AAChC,KAAC,CAAC;AACJ,EAAA;EACUQ,SAASA,CAAC9B,WAAmB,EAAE;AACvC,IAAA,MAAM,CAAC+B,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC,GAAG,IAAI,CAACjC,UAAU,CAAC0B,GAAG,CAAC,CAACC,KAAK,EAAEC,CAAC,KAChD,IAAI,CAACV,MAAM,CAACnB,WAAW,EAAE4B,KAAK,EAAE,IAAI,CAAC1B,OAAO,CAAC2B,CAAC,CAAC,EAAE,IAAI,CAAC1B,QAAQ,EAAE0B,CAAC,CACnE,CAAqB;IACrB,MAAMD,KAAK,GAAG,CACZ,GAAG,CAACG,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC,CAACN,GAAG,CAACtB,IAAI,CAAC8B,KAAK,CAAC,EAC5BC,QAAQ,CAAC,CAAC,EAAEF,CAAC,EAAE,CAAC,CAAC,CACE;IACrB,OAAO;MACLN,KAAK;MACLjB,aAAa;AACX;MACAiB,KAAK,CACFD,GAAG,CAAC,CAACU,CAAC,EAAER,CAAC,KACR,IAAI,CAAC3B,OAAO,CAAC2B,CAAC,CAAC,KAAK,CAAC,GACjBxB,IAAI,CAACiC,GAAG,CAAC,CAACD,CAAC,GAAG,IAAI,CAACpC,UAAU,CAAC4B,CAAC,CAAC,IAAI,IAAI,CAAC3B,OAAO,CAAC2B,CAAC,CAAC,CAAC,GACpD,CACN,CAAC,CACAU,IAAI,CAAEF,CAAC,IAAKA,CAAC,KAAK,CAAC,CAAC,IAAI;KAC9B;AACH,EAAA;AACF;;;;"}