{"version":3,"file":"tween.mjs","sources":["../../../../src/_common/js/statistic/tween.ts"],"sourcesContent":["/**\n * Inspired by https://github.com/PengJiyuan/b-tween\n * requestAnimationFrame https://caniuse.com/requestanimationframe\n * TDesign vue 2 need to ensure compatibility with users who are using IE and Vue2,\n * it is necessary to use setInterval instead of requestAnimationFrame when the browser version is less than 9\n */\nimport { getIEVersion } from '../utils/helper';\n\nexport interface TweenSettings {\n  from: Record<string, number>;\n  to: Record<string, number>;\n  duration?: number;\n  delay?: number;\n  onStart?: (keys: Record<string, number>) => void;\n  onUpdate?: (keys: Record<string, number>) => void;\n  onFinish?: (keys: Record<string, number>) => void;\n}\n\nconst quartOut = (t: number) => 1 - Math.abs((t - 1) ** 4);\n\nexport default class Tween {\n  private from: Record<string, number>;\n\n  private to: Record<string, number>;\n\n  private duration: number;\n\n  private onStart?: (keys: Record<string, number>) => void;\n\n  private onUpdate: (keys: Record<string, number>) => void;\n\n  private onFinish?: (keys: Record<string, number>) => void;\n\n  private startTime: number;\n\n  private started: boolean;\n\n  private finished: boolean;\n\n  private timer: number | NodeJS.Timer | null;\n\n  private keys: Record<string, number>;\n\n  constructor({\n    from,\n    to,\n    duration = 200,\n    onStart,\n    onUpdate = () => {},\n    onFinish,\n  }: TweenSettings) {\n    this.from = from;\n    this.to = to;\n    this.duration = duration;\n    this.onStart = onStart;\n    this.onUpdate = onUpdate;\n    this.onFinish = onFinish;\n    this.startTime = Date.now();\n    this.started = false;\n    this.finished = false;\n    this.timer = null;\n    this.keys = {};\n    Object.entries(from).forEach(([key, value]) => {\n      if (this.to[key] === undefined) {\n        this.to[key] = value;\n      }\n    });\n\n    Object.entries(to).forEach(([key, value]) => {\n      if (this.from[key] === undefined) {\n        this.from[key] = value;\n      }\n    });\n  }\n\n  private time = 0;\n\n  private elapsed = 0;\n\n  private update() {\n    this.time = Date.now();\n    if (this.time < this.startTime || this.finished) return;\n\n    if (this.elapsed >= this.duration) {\n      this.finished = true;\n      this.onFinish?.(this.keys);\n      return;\n    }\n    const elapsed = Math.min(this.time - this.startTime, this.duration);\n    this.elapsed = elapsed;\n    const progress = quartOut(elapsed / this.duration);\n\n    Object.keys(this.to).forEach((key) => {\n      const delta = this.to[key] - this.from[key];\n      this.keys[key] = this.from[key] + delta * progress;\n    });\n\n    if (!this.started) {\n      this.onStart?.(this.keys);\n      this.started = true;\n    }\n\n    this.onUpdate(this.keys);\n  }\n\n  private polyfillStart() {\n    const elapsed = Date.now() - this.startTime;\n    const interval = quartOut(elapsed / this.duration);\n\n    this.timer = setInterval(() => {\n      this.update();\n      if (this.finished) {\n        clearInterval(this.timer as number);\n      }\n    }, interval);\n  }\n\n  private normalStart() {\n    const tick = () => {\n      this.update();\n      this.timer = requestAnimationFrame(tick);\n\n      if (this.finished) {\n        cancelAnimationFrame(this.timer);\n        this.timer = null;\n      }\n    };\n    tick();\n  }\n\n  public start() {\n    this.startTime = Date.now();\n    // IE < 10\n    if (getIEVersion() < 10) this.polyfillStart();\n    else this.normalStart();\n  }\n\n  public stop() {\n    // IE < 10\n    if (getIEVersion() < 10) clearInterval(this.timer as number);\n    else cancelAnimationFrame(this.timer as number);\n    this.timer = null;\n  }\n}\n"],"names":["quartOut","t","Math","abs","pow","Tween","_ref","_this","from","to","_ref$duration","duration","onStart","_ref$onUpdate","onUpdate","onFinish","_classCallCheck","_defineProperty","startTime","Date","now","started","finished","timer","keys","Object","entries","forEach","_ref2","_ref3","_slicedToArray","key","value","_ref4","_ref5","_createClass","update","_this2","time","elapsed","_this$onFinish","call","min","progress","delta","_this$onStart","polyfillStart","_this3","interval","setInterval","clearInterval","normalStart","_this4","tick","requestAnimationFrame","cancelAnimationFrame","start","getIEVersion","stop"],"mappings":"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"}