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