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