{"version":3,"file":"Animation.cjs","sources":["../../../src/animations/Animation.js"],"sourcesContent":["import { generateId } from '../utils/helpers.js';\nimport { DEFAULT_ANIMATION_CONFIG } from '../types/constants.js';\nimport { deepMerge, applyEasing } from '../utils/helpers.js';\n\n/**\n * 动画基类\n */\nexport class Animation {\n  constructor(config = {}) {\n    this.id = generateId('animation');\n    this.type = 'base';\n    this.config = deepMerge({}, DEFAULT_ANIMATION_CONFIG, config);\n    this.target = null; // 目标元素\n    // startTime 优先使用 config.startTime，如果没有则使用 delay\n    // 注意：delay 可能是负数，负数 delay 会在 BaseElement 中从元素结束时间计算\n    this.startTime = config.startTime !== undefined ? config.startTime : (this.config.delay || 0);\n    this.endTime = this.startTime + this.config.duration;\n    this.iterations = this.config.iterations || 1;\n    this.currentIteration = 0;\n  }\n\n  /**\n   * 设置目标元素\n   */\n  setTarget(target) {\n    this.target = target;\n  }\n\n  /**\n   * 获取目标元素\n   */\n  getTarget() {\n    return this.target;\n  }\n\n  /**\n   * 设置开始时间\n   */\n  setStartTime(time) {\n    this.startTime = time;\n    this.endTime = this.startTime + this.config.duration;\n  }\n\n  /**\n   * 设置持续时间\n   */\n  setDuration(duration) {\n    this.config.duration = duration;\n    this.endTime = this.startTime + duration;\n  }\n\n  /**\n   * 判断动画在指定时间是否激活\n   */\n  isActiveAtTime(time) {\n    if (time < this.startTime) return false;\n    if (this.iterations === 1) {\n      return time <= this.endTime;\n    }\n    // 循环动画\n    const cycleDuration = this.config.duration;\n    const cycleTime = (time - this.startTime) % cycleDuration;\n    return cycleTime <= cycleDuration;\n  }\n\n  /**\n   * 获取动画进度（0-1）\n   */\n  getProgress(time) {\n    if (time <= this.startTime) return 0; // 使用 <= 确保在开始时刻返回 0\n    if (time >= this.endTime && this.iterations === 1) return 1;\n\n    const elapsed = time - this.startTime;\n    const cycleDuration = this.config.duration;\n    \n    if (this.iterations === 1) {\n      const progress = elapsed / cycleDuration;\n      return Math.min(1, Math.max(0, progress));\n    }\n\n    // 循环动画\n    const cycleProgress = (elapsed % cycleDuration) / cycleDuration;\n    return cycleProgress;\n  }\n\n  /**\n   * 获取应用缓动后的进度\n   */\n  getEasedProgress(time) {\n    const progress = this.getProgress(time);\n    return applyEasing(progress, this.config.easing);\n  }\n\n  /**\n   * 在指定时间获取动画状态（子类实现）\n   */\n  getStateAtTime(time) {\n    // 子类实现具体逻辑\n    return {};\n  }\n\n  /**\n   * 重置动画\n   */\n  reset() {\n    this.currentIteration = 0;\n  }\n}\n\n"],"names":["generateId","deepMerge","DEFAULT_ANIMATION_CONFIG","applyEasing"],"mappings":"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"}