{"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"}