{"version":3,"file":"BaseElement.cjs","sources":["../../../src/elements/BaseElement.js"],"sourcesContent":["import { generateId } from '../utils/helpers.js';\nimport { DEFAULT_ELEMENT_CONFIG } from '../types/constants.js';\nimport { deepMerge } from '../utils/helpers.js';\nimport { toPixels, toFontSizePixels } from '../utils/unit-converter.js';\nimport { TransformAnimation } from '../animations/TransformAnimation.js';\nimport { KeyframeAnimation } from '../animations/KeyframeAnimation.js';\nimport { CustomAnimation } from '../animations/CustomAnimation.js';\nimport { AnimationType } from '../types/enums.js';\nimport { ElementType } from '../types/enums.js';\nimport { getPresetAnimation } from '../animations/preset-animations.js';\nimport paper from '@chnak/paper';\nimport got from 'got';\nimport path from 'path';\nimport fs from 'fs';\nimport {pipeline} from 'stream/promises';\nimport {registerFontFile} from '../utils/font-manager.js';\n/**\n * 规范化动画配置为统一格式\n * 将动画实例或配置对象转换为纯配置对象，便于序列化和传递\n * @param {string|Object|Animation} animConfig - 动画配置（字符串、对象或动画实例）\n * @returns {string|Object} 规范化后的动画配置（字符串或配置对象）\n */\nexport function normalizeAnimationConfig(animConfig) {\n  // 如果是字符串（预设动画名称），直接返回\n  if (typeof animConfig === 'string') {\n    return animConfig;\n  }\n\n  // 如果是动画实例，提取其配置信息（避免循环引用）\n  if (animConfig && typeof animConfig.getStateAtTime === 'function') {\n    const config = {};\n    if (animConfig.type) config.type = animConfig.type;\n    if (animConfig.config && animConfig.config.duration !== undefined) config.duration = animConfig.config.duration;\n    if (animConfig.config && animConfig.config.delay !== undefined) config.delay = animConfig.config.delay;\n    if (animConfig.startTime !== undefined) config.startTime = animConfig.startTime;\n    if (animConfig.config && animConfig.config.easing !== undefined) config.easing = animConfig.config.easing;\n    if (animConfig.property !== undefined) config.property = animConfig.property;\n    if (animConfig.from !== undefined) config.from = animConfig.from;\n    if (animConfig.to !== undefined) config.to = animConfig.to;\n    if (animConfig.fromOpacity !== undefined) config.fromOpacity = animConfig.fromOpacity;\n    if (animConfig.toOpacity !== undefined) config.toOpacity = animConfig.toOpacity;\n    if (animConfig.fromX !== undefined) config.fromX = animConfig.fromX;\n    if (animConfig.toX !== undefined) config.toX = animConfig.toX;\n    if (animConfig.fromY !== undefined) config.fromY = animConfig.fromY;\n    if (animConfig.toY !== undefined) config.toY = animConfig.toY;\n    if (animConfig.fromScaleX !== undefined) config.fromScaleX = animConfig.fromScaleX;\n    if (animConfig.toScaleX !== undefined) config.toScaleX = animConfig.toScaleX;\n    if (animConfig.fromScaleY !== undefined) config.fromScaleY = animConfig.fromScaleY;\n    if (animConfig.toScaleY !== undefined) config.toScaleY = animConfig.toScaleY;\n    if (animConfig.fromRotation !== undefined) config.fromRotation = animConfig.fromRotation;\n    if (animConfig.toRotation !== undefined) config.toRotation = animConfig.toRotation;\n    if (animConfig.keyframes) config.keyframes = animConfig.keyframes;\n    if (animConfig.type === 'custom' && typeof animConfig.updateFn === 'function') {\n      config.update = animConfig.updateFn;\n    }\n    return config;\n  }\n\n  // 如果是配置对象，深拷贝基本类型属性（避免循环引用）\n  if (animConfig && typeof animConfig === 'object') {\n    const config = {};\n    for (const key in animConfig) {\n      if (animConfig.hasOwnProperty(key)) {\n        const value = animConfig[key];\n        // 跳过循环引用（如 target）\n        if (key === 'target') continue;\n        // 拷贝基本类型\n        if (value === null || value === undefined || \n            typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean') {\n          config[key] = value;\n        } else if (typeof value === 'function') {\n          config[key] = value;\n        } else if (Array.isArray(value)) {\n          // 拷贝数组\n          config[key] = [...value];\n        } else if (typeof value === 'object' && !value.getStateAtTime) {\n          // 拷贝普通对象（排除动画实例）\n          config[key] = { ...value };\n        }\n      }\n    }\n    return config;\n  }\n\n  return animConfig;\n}\n\n/**\n * 根据动画配置创建动画实例\n * 支持字符串形式的预设动画名称，如 \"fadeIn\", \"fadeOut\"\n * 也支持对象形式的配置，如 {type: \"fadeIn\", duration: 1, delay: 2}\n */\nfunction createAnimationFromConfig(animConfig) {\n  // 如果已经是动画实例，直接返回\n  if (animConfig && typeof animConfig.getStateAtTime === 'function') {\n    return animConfig;\n  }\n\n      // 如果是字符串，尝试获取预设动画\n      if (typeof animConfig === 'string') {\n        const preset = getPresetAnimation(animConfig);\n        if (preset) {\n          // 使用预设动画的默认配置\n          return createAnimationFromConfig(preset);\n        } else {\n          console.warn(`未找到预设动画: ${animConfig}，使用默认 fadeIn`);\n          // 如果找不到预设，使用默认的淡入动画预设\n          return createAnimationFromConfig('fadeIn');\n        }\n      }\n\n  // 如果是对象，检查是否有预设动画名称\n  if (animConfig && typeof animConfig === 'object') {\n    // 检查 type 是否是预设动画名称\n    const presetName = animConfig.type || animConfig.animationType;\n    const preset = getPresetAnimation(presetName);\n    \n    if (preset) {\n      // 合并预设配置和用户配置（用户配置优先级更高）\n      const mergedConfig = { ...preset, ...animConfig };\n      // 移除 type，因为预设配置中已经有 type\n      delete mergedConfig.type;\n      delete mergedConfig.animationType;\n      // 使用合并后的配置创建动画\n      return createAnimationFromConfig(mergedConfig);\n    }\n  }\n\n  // 从配置对象创建动画\n  const type = animConfig.type || animConfig.animationType;\n  const config = { ...animConfig };\n  delete config.type;\n  delete config.animationType;\n\n  switch (type) {\n    case AnimationType.TRANSFORM:\n    case 'transform':\n      return new TransformAnimation(config);\n    case AnimationType.KEYFRAME:\n    case 'keyframe':\n      return new KeyframeAnimation(config);\n    case 'custom':\n      return new CustomAnimation(config);\n    \n    default:\n      // 默认使用淡入动画预设\n      return createAnimationFromConfig({ type: 'transform', from: { opacity: 0 }, to: { opacity: 1 }, ...config });\n  }\n}\n\n\n\n/**\n * 元素基类\n */\nexport class BaseElement {\n  constructor(config = {}) {\n    this.id = generateId('element');\n    this.type = 'base';\n    \n    // 提取 animations 配置（在 deepMerge 之前）\n    const animationsConfig = config.animations || [];\n    delete config.animations; // 从 config 中移除，避免被合并到 this.config\n    \n    this.config = deepMerge({}, DEFAULT_ELEMENT_CONFIG, config);\n    this.animations = [];\n    this.parent = null;\n    this.visible = true;\n    this.createdAt = Date.now();\n    this.zIndex = (config.zIndex !== undefined ? config.zIndex : (this.config.zIndex !== undefined ? this.config.zIndex : 0));\n    this.opacity = (this.config.opacity !== undefined ? this.config.opacity : 1);\n    \n    // 时间范围控制\n    this.startTime = config.startTime !== undefined ? config.startTime : 0;\n    this.endTime = config.endTime !== undefined ? config.endTime : Infinity;\n    this.duration = config.duration !== undefined ? config.duration : undefined;\n\n    // 如果指定了duration但没有endTime，自动计算endTime\n    if (this.duration !== undefined && this.endTime === Infinity) {\n      this.endTime = this.startTime + this.duration;\n    }\n\n    // 从配置中添加动画\n    if (Array.isArray(animationsConfig)) {\n      for (const animConfig of animationsConfig) {\n        if (animConfig) {\n          const animation = createAnimationFromConfig(animConfig);\n          this.addAnimation(animation);\n        }\n      }\n    }\n\n    // 回调函数支持\n    this.onLoaded = config.onLoaded || null; // (element, time) => void\n    this.onRender = config.onRender || null; // (element, time) => void\n    this.onFrame = config.onFrame || null; // (element, event, paperItem) => void\n    this._loadedCallbackCalled = false; // 标记 onLoaded 是否已调用\n    this._paperItem = null; // Paper.js 项目引用（用于 onFrame）\n  }\n\n\n  async ready() {\n    const src=this.config.src || this.config.videoPath || this.config.audioPath || this.config.svgPath || this.config.imagePath || this.config.jsonPath || this.config.fontPath || null;\n    if(this.config.src&&(src.startsWith('http'))) {\n      this.config.src=await this.download(src);\n      this.src=this.config.src;\n    }else if(this.config.videoPath&&(this.config.videoPath.startsWith('http'))) {\n      this.config.videoPath=await this.download(this.config.videoPath);\n      this.videoPath=this.config.videoPath;\n    }else if(this.config.audioPath&&(this.config.audioPath.startsWith('http'))) {\n      this.config.audioPath=await this.download(this.config.audioPath);\n      this.audioPath=this.config.audioPath;\n    }else if(this.config.svgPath&&(this.config.svgPath.startsWith('http'))) {\n      this.config.svgPath=await this.download(this.config.svgPath);\n      this.svgPath=this.config.svgPath;\n    }else if(this.config.imagePath&&(this.config.imagePath.startsWith('http'))) {\n      this.config.imagePath=await this.download(this.config.imagePath);\n      this.imagePath=this.config.imagePath;\n    }else if(this.config.jsonPath&&(this.config.jsonPath.startsWith('http'))) {\n      this.config.jsonPath=await this.download(this.config.jsonPath);\n      this.jsonPath=this.config.jsonPath;\n    }else if(this.config.fontPath&&(this.config.fontPath.startsWith('http'))) {\n      this.config.fontPath=await this.download(this.config.fontPath);\n      this.fontPath=this.config.fontPath;\n    }\n    if(this.config.fontPath){\n      const fontName=path.basename(this.config.fontPath,path.extname(this.config.fontPath));\n      this.fontFamily=this.config.fontFamily=fontName;\n      registerFontFile(this.config.fontPath,fontName);\n    }\n    return true;\n  }\n  /**\n   * 初始化元素（在渲染之前调用）\n   * 子类可以覆盖此方法来实现异步初始化逻辑（如加载资源）\n   * @returns {Promise<void>|void} 如果返回 Promise，渲染器会等待初始化完成\n   */\n  initialize() {\n    return Promise.resolve();\n  }\n\n\n  async downloadWithPipeline(url, outputPath) {\n    try {\n      const writeStream = fs.createWriteStream(outputPath);\n      \n      await pipeline(\n        got.stream(url),\n        writeStream\n      );\n      \n      console.log(`✅ 下载完成: ${outputPath}`);\n      \n      // 验证文件\n      const stats = fs.statSync(outputPath);\n      if (stats.size === 0) {\n        throw new Error('下载的文件为空');\n      }\n      \n      return outputPath;\n      \n    } catch (error) {\n      // 清理不完整文件\n      if (fs.existsSync(outputPath)) {\n        fs.unlinkSync(outputPath);\n      }\n      console.error(`❌ 下载失败: ${error.message}`);\n      throw error;\n    }\n  }\n\n  async download(url,name) {\n    try {\n      // 从 URL 提取文件名（处理查询参数）\n      let filename = name || path.basename(url);\n      \n      // 去除查询参数\n      if (filename.includes('?')) {\n        filename = filename.split('?')[0];\n      }\n      \n      // 如果没有扩展名，添加默认扩展名\n      if (!path.extname(filename)) {\n        // 尝试从 Content-Type 推断扩展名\n        const response = await got.head(url);\n        const contentType = response.headers['content-type'];\n        \n        if (contentType === 'image/jpeg') filename += '.jpg';\n        else if (contentType === 'image/png') filename += '.png';\n        else if (contentType === 'video/mp4') filename += '.mp4';\n        else if (contentType === 'video/avi') filename += '.avi';\n        else if (contentType === 'video/quicktime') filename += '.mov';\n        else if (contentType === 'video/x-ms-wmv') filename += '.wmv';\n        else if (contentType === 'video/x-flv') filename += '.flv';\n        else if (contentType === 'video/x-matroska') filename += '.mkv';\n        else if (contentType === 'video/webm') filename += '.webm';\n        else if (contentType === 'audio/mpeg') filename += '.mp3';\n        else if (contentType === 'audio/wav') filename += '.wav';\n        else if (contentType === 'audio/flac') filename += '.flac';\n        else if (contentType === 'audio/aac') filename += '.aac';\n        else if (contentType === 'audio/ogg') filename += '.ogg';\n        else if (contentType === 'audio/x-ms-wma') filename += '.wma';\n        else if (contentType === 'audio/mp4') filename += '.m4a';\n        else if (contentType === 'font/ttf') filename += '.ttf';\n        else if (contentType === 'font/otf') filename += '.otf';\n        else if (contentType === 'font/woff') filename += '.woff';\n        else if (contentType === 'font/woff2') filename += '.woff2';\n        else if (contentType === 'application/vnd.ms-fontobject') filename += '.eot';\n        else if (contentType === 'application/font-sfnt') filename += '.sfnt';\n        else if (contentType === 'application/json') filename += '.json';\n        else if (contentType === 'application/xml') filename += '.xml';\n        else if (contentType === 'application/x-font-ttf') filename += '.ttf';\n        else if (contentType === 'application/x-font-otf') filename += '.otf';\n        else if (contentType === 'application/x-font-woff') filename += '.woff';\n        else if (contentType === 'application/x-font-woff2') filename += '.woff2';\n        else if (contentType === 'application/x-font-eot') filename += '.eot';\n        else if (contentType === 'application/x-font-sfnt') filename += '.sfnt';\n        else if (contentType === 'application/x-font-opentype') filename += '.otf';\n        else if (contentType === 'application/x-font-truetype') filename += '.ttf';\n        else if (contentType === 'application/x-font-woff') filename += '.woff';\n        else filename += '.bin';\n      }\n      \n      const outputPath = path.join(this.cacheDir, filename);\n      \n      const result=await this.downloadWithPipeline(url,outputPath);\n\n      return result;\n    } catch (error) {\n      console.error('下载失败:', error.message);\n      throw error;\n    }\n  }\n\n  \n  /**\n   * 获取元素类型\n   */\n  getType() {\n    return this.type;\n  }\n\n  /**\n   * 获取配置\n   */\n  getConfig() {\n    return { ...this.config };\n  }\n\n  /**\n   * 更新配置\n   */\n  updateConfig(newConfig) {\n    this.config = deepMerge(this.config, newConfig);\n  }\n\n  /**\n   * 设置位置\n   */\n  setPosition(x, y) {\n    this.config.x = x;\n    this.config.y = y;\n  }\n\n  /**\n   * 设置尺寸\n   */\n  setSize(width, height) {\n    this.config.width = width;\n    this.config.height = height;\n  }\n\n  /**\n   * 设置透明度\n   */\n  setOpacity(opacity) {\n    this.config.opacity = Math.max(0, Math.min(1, opacity));\n  }\n\n  /**\n   * 设置旋转角度（度）\n   */\n  setRotation(rotation) {\n    this.config.rotation = rotation;\n  }\n\n  /**\n   * 设置缩放\n   */\n  setScale(scaleX, scaleY = scaleX) {\n    this.config.scaleX = scaleX;\n    this.config.scaleY = scaleY;\n  }\n\n  /**\n   * 设置锚点\n   */\n  setAnchor(x, y) {\n    this.config.anchor = [x, y];\n  }\n\n  /**\n   * 添加动画\n   */\n  addAnimation(animation) {\n    this.animations.push(animation);\n    animation.setTarget(this);\n  }\n\n  /**\n   * 移除动画\n   */\n  removeAnimation(animationId) {\n    this.animations = this.animations.filter(anim => anim.id !== animationId);\n  }\n\n  /**\n   * 显示元素\n   */\n  show() {\n    this.visible = true;\n  }\n\n  /**\n   * 隐藏元素\n   */\n  hide() {\n    this.visible = false;\n  }\n\n  /**\n   * 判断元素在指定时间是否激活\n   * @param {number} time - 时间（秒）\n   * @returns {boolean}\n   */\n  isActiveAtTime(time) {\n    // 使用 <= 确保动画在结束时刻也能被应用\n    return this.visible && time >= this.startTime && time <= this.endTime;\n  }\n\n  /**\n   * 获取元素在指定时间的进度（0-1）\n   * @param {number} time - 时间（秒）\n   * @returns {number} 进度值，范围 0-1\n   */\n  getProgressAtTime(time) {\n    if (!this.isActiveAtTime(time)) {\n      return 0;\n    }\n    \n    const elapsed = time - this.startTime;\n    const duration = this.duration || (this.endTime - this.startTime);\n    \n    if (duration <= 0) {\n      return 0;\n    }\n    \n    return Math.max(0, Math.min(1, elapsed / duration));\n  }\n\n  /**\n   * 设置时间范围\n   * @param {number} startTime - 开始时间（秒）\n   * @param {number} endTime - 结束时间（秒），如果未指定则使用duration计算\n   */\n  setTimeRange(startTime, endTime) {\n    this.startTime = startTime;\n    if (endTime !== undefined) {\n      this.endTime = endTime;\n    } else if (this.duration !== undefined) {\n      this.endTime = startTime + this.duration;\n    }\n  }\n\n  /**\n   * 设置持续时间\n   * @param {number} duration - 持续时间（秒）\n   */\n  setDuration(duration) {\n    this.duration = duration;\n    if (this.endTime === Infinity) {\n      this.endTime = this.startTime + duration;\n    }\n  }\n\n  /**\n   * 在指定时间获取元素状态\n   * @param {number} time - 时间（秒）\n   * @param {Object} context - 上下文对象 { width, height } 用于单位转换\n   * @returns {Object} 元素状态\n   */\n  getStateAtTime(time, context = {}) {\n    // 检查时间范围\n    if (!this.isActiveAtTime(time)) {\n      // 如果不在时间范围内，返回隐藏状态\n      return { ...this.config, opacity: 0, visible: false };\n    }\n    \n    // 深拷贝 config，避免修改原始配置\n    // 注意：不能使用 JSON.stringify，因为 config 中可能包含循环引用（如 parent、layer 等）\n    // 使用深合并来创建一个新的对象，只拷贝基本类型的属性\n    let state = deepMerge({}, this.config);\n\n    // 应用所有动画\n    // 注意：动画的 startTime 是相对于元素自己的 startTime 的\n    // 如果 delay 为负数，则从元素的结束时间往前计算\n    if (this.animations.length === 0) {\n      // 如果没有动画，直接返回状态\n      return state;\n    }\n    \n    // 按开始时间排序动画，确保先应用先开始的动画\n    const sortedAnimations = [...this.animations].map(anim => {\n      const delay = anim.config.delay !== undefined ? anim.config.delay : 0;\n      // 对于负 delay 的动画，从元素的结束时间往前计算\n      let effectiveEndTime = this.endTime;\n      \n      // 对于分割片段，需要调整 endTime 使退出动画按 splitDelay 错开\n      // 这样每个片段的退出动画会提前 segmentDelay 开始\n      if (delay < 0 && this.isSegment && this.parentElement) {\n        const segmentDelay = this.startTime - this.parentElement.startTime;\n        // 调整 endTime，使每个片段的退出动画提前 segmentDelay 开始\n        // 例如：父元素 endTime=5, delay=-1，动画开始时间=4\n        // 片段0（segmentDelay=0）：effectiveEndTime=5，动画开始时间=4\n        // 片段1（segmentDelay=0.1）：effectiveEndTime=4.9，动画开始时间=3.9\n        // 片段2（segmentDelay=0.2）：effectiveEndTime=4.8，动画开始时间=3.8\n        effectiveEndTime = this.endTime - segmentDelay;\n      }\n      \n      const startTime = delay < 0 ? effectiveEndTime + delay : this.startTime + delay;\n      return { animation: anim, startTime, delay };\n    }).sort((a, b) => a.startTime - b.startTime);\n    \n    for (let i = 0; i < sortedAnimations.length; i++) {\n      const { animation, startTime: animationAbsoluteStartTime, delay } = sortedAnimations[i];\n      const animationAbsoluteEndTime = animationAbsoluteStartTime + animation.config.duration;\n      \n      // 调试信息（仅在开发时启用）\n      // if (this.type === 'text' && animation.type === 'transform' && time < 0.1) {\n      //   console.log(`[Animation] ${animation.type || 'unknown'}, delay: ${delay}, duration: ${animation.config.duration}, element startTime: ${this.startTime}, element endTime: ${this.endTime}, current time: ${time}, animationAbsoluteStartTime: ${animationAbsoluteStartTime}`);\n      // }\n      \n      // 获取动画的初始状态（from 值）和结束状态（to 值）\n      let animationState = {};\n      \n      // 使用一个小的阈值（1ms）来处理浮点数精度问题\n      const epsilon = 0.001;\n      \n      // 判断动画在当前时间是否应该应用\n      // 只有在动画进行中或刚结束时才应用，避免未开始的动画覆盖已开始的动画\n      const isAnimationActive = time >= animationAbsoluteStartTime - epsilon && time <= animationAbsoluteEndTime + epsilon;\n      const isAnimationBeforeStart = time < animationAbsoluteStartTime - epsilon;\n      const isAnimationAfterEnd = time > animationAbsoluteEndTime + epsilon;\n      \n      // 检查这是否是第一个动画（按开始时间排序）\n      const isFirstAnimation = i === 0;\n      \n      if (isAnimationBeforeStart) {\n        // 动画还未开始\n        // 如果是第一个动画，应用初始状态（确保动画从正确的初始状态开始）\n        // 否则不应用任何状态（避免覆盖其他动画）\n        if (isFirstAnimation) {\n          animationState = animation.getInitialState ? animation.getInitialState() : {};\n        } else {\n          animationState = {};\n        }\n      } else if (time <= animationAbsoluteStartTime + epsilon) {\n        // 动画刚开始，应用初始状态（from 值）\n        animationState = animation.getInitialState ? animation.getInitialState() : {};\n      } else if (isAnimationAfterEnd) {\n        // 动画已结束，应用结束状态（to 值）\n        animationState = animation.getFinalState ? animation.getFinalState() : {};\n      } else {\n        // 动画进行中，计算当前状态\n        const animationRelativeTime = time - animationAbsoluteStartTime;\n        // getStateAtTime 接收的时间会被用来计算进度\n        // Animation.getProgress 使用 time - this.startTime 来计算经过的时间\n        // 所以需要传递 animation.startTime + animationRelativeTime\n        // 这样动画内部计算时：elapsed = (animation.startTime + animationRelativeTime) - animation.startTime = animationRelativeTime\n        // 同时传递当前的 state，以便 CustomAnimation 可以基于当前状态进行计算\n        animationState = animation.getStateAtTime(animation.startTime + animationRelativeTime, state);\n      }\n      \n      // 合并动画状态到元素状态（只合并非 undefined 的值）\n      // 注意：如果动画还未开始，不应用状态，避免覆盖其他动画\n      if (isAnimationActive || isAnimationAfterEnd) {\n        for (const key in animationState) {\n          if (animationState.hasOwnProperty(key) && animationState[key] !== undefined) {\n            state[key] = animationState[key];\n            // 调试信息（仅在开发时启用）\n            // if (this.type === 'text' && (key === 'scaleX' || key === 'scaleY') && time < 0.1) {\n            //   console.log(`[Animation] Applied ${key} = ${animationState[key]} at time ${time}, animationState:`, animationState);\n            // }\n          }\n        }\n      }\n    }\n\n    // 处理 translateX 和 translateY（相对偏移量）\n    // 这些属性来自 KeyframeAnimation，表示相对于元素原始位置的偏移\n    if (state.translateX !== undefined) {\n      // translateX 是相对于原始 x 的偏移量\n      const baseX = typeof this.config.x === 'string' \n        ? toPixels(this.config.x, { width: context.width || 1920, height: context.height || 1080 }, 'x')\n        : (this.config.x || 0);\n      state.x = baseX + (state.translateX || 0);\n      delete state.translateX;\n    }\n    if (state.translateY !== undefined) {\n      // translateY 是相对于原始 y 的偏移量\n      const baseY = typeof this.config.y === 'string'\n        ? toPixels(this.config.y, { width: context.width || 1920, height: context.height || 1080 }, 'y')\n        : (this.config.y || 0);\n      state.y = baseY + (state.translateY || 0);\n      delete state.translateY;\n    }\n\n    // 转换单位（x, y, width, height）\n    const { width = 1920, height = 1080 } = context;\n    const unitContext = { width, height };\n\n    // 只对字符串类型进行单位转换，数字类型直接使用\n    // 注意：x和width基于宽度，y和height基于高度\n    if (typeof state.x === 'string') {\n      state.x = toPixels(state.x, unitContext, 'x');\n    }\n    if (typeof state.y === 'string') {\n      state.y = toPixels(state.y, unitContext, 'y');\n    }\n    if (typeof state.width === 'string') {\n      state.width = toPixels(state.width, unitContext, 'width');\n    }\n    if (typeof state.height === 'string') {\n      state.height = toPixels(state.height, unitContext, 'height');\n    }\n\n    return state;\n  }\n\n  /**\n   * 转换位置值（x, y）为像素值\n   * @param {string|number} x - X 坐标\n   * @param {string|number} y - Y 坐标\n   * @param {Object} context - 上下文对象 { width, height }\n   * @returns {{x: number, y: number}} 转换后的像素坐标\n   */\n  convertPosition(x, y, context = {}) {\n    const { width = 1920, height = 1080 } = context;\n    const unitContext = { width, height };\n    \n    return {\n      x: typeof x === 'string' ? toPixels(x, unitContext, 'x') : (x || 0),\n      y: typeof y === 'string' ? toPixels(y, unitContext, 'y') : (y || 0),\n    };\n  }\n\n  /**\n   * 转换尺寸值（width, height）为像素值\n   * @param {string|number} width - 宽度\n   * @param {string|number} height - 高度\n   * @param {Object} context - 上下文对象 { width, height }\n   * @returns {{width: number, height: number}} 转换后的像素尺寸\n   */\n  convertSize(width, height, context = {}) {\n    const { width: canvasWidth = 1920, height: canvasHeight = 1080 } = context;\n    const unitContext = { width: canvasWidth, height: canvasHeight };\n    \n    return {\n      width: typeof width === 'string' ? toPixels(width, unitContext, 'width') : (width || 0),\n      height: typeof height === 'string' ? toPixels(height, unitContext, 'height') : (height || 0),\n    };\n  }\n\n  /**\n   * 转换字体大小为像素值\n   * @param {string|number} fontSize - 字体大小\n   * @param {Object} context - 上下文对象 { width, height, baseFontSize }\n   * @param {number} defaultSize - 默认字体大小（如果转换失败）\n   * @returns {number} 转换后的像素值\n   */\n  convertFontSize(fontSize, context = {}, defaultSize = 24) {\n    if (!fontSize) return defaultSize;\n    \n    const { width = 1920, height = 1080, baseFontSize = 16 } = context;\n    const unitContext = { width, height, baseFontSize };\n    \n    const pixelSize = typeof fontSize === 'string' \n      ? toFontSizePixels(fontSize, unitContext)\n      : fontSize;\n    \n    return pixelSize > 0 ? pixelSize : defaultSize;\n  }\n\n  /**\n   * 计算元素的最终位置（包括 anchor 对齐）\n   * @param {Object} state - 元素状态（从 getStateAtTime 获取，已转换单位）\n   * @param {Object} context - 上下文对象 { width, height }\n   * @param {Object} options - 选项\n   * @param {Array<number>} options.anchor - 锚点 [x, y]，默认使用 state.anchor\n   * @param {number} options.elementWidth - 元素宽度（用于 anchor 对齐），可选\n   * @param {number} options.elementHeight - 元素高度（用于 anchor 对齐），可选\n   * @returns {{x: number, y: number}} 最终位置（像素值）\n   */\n  calculatePosition(state, context = {}, options = {}) {\n    const anchor = options.anchor || state.anchor || [0.5, 0.5];\n    const { elementWidth, elementHeight } = options;\n    \n    // state.x 和 state.y 已经在 getStateAtTime 中转换了单位\n    let x = typeof state.x === 'number' ? state.x : (typeof state.x === 'string' ? toPixels(state.x, context, 'x') : 0);\n    let y = typeof state.y === 'number' ? state.y : (typeof state.y === 'string' ? toPixels(state.y, context, 'y') : 0);\n    \n    // 如果有元素尺寸，根据 anchor 调整位置\n    if (elementWidth !== undefined || elementHeight !== undefined) {\n      if (elementWidth !== undefined) {\n        x = x - (elementWidth * anchor[0]);\n      }\n      if (elementHeight !== undefined) {\n        y = y - (elementHeight * anchor[1]);\n      }\n    }\n    \n    return { x, y };\n  }\n\n  /**\n   * 计算分割文本片段的位置（特殊处理）\n   * @param {Object} state - 元素状态（从 getStateAtTime 获取）\n   * @param {Object} context - 上下文对象 { width, height }\n   * @param {Object} segmentConfig - 分割片段配置\n   * @returns {{x: number, y: number, baseline: string}} 最终位置和 baseline\n   */\n  calculateSegmentPosition(state, context = {}, segmentConfig = {}) {\n    const {\n      parentX,\n      parentY,\n      parentAnchor = [0.5, 0.5],\n      parentTextAlign = 'center',\n      totalTextWidth = 0,\n      totalTextHeight = 0,\n      segmentOffsetX = 0,\n      segmentOffsetY = 0,\n    } = segmentConfig;\n    \n    // 转换父元素位置单位\n    const { x: parentXPixels, y: parentYPixels } = this.convertPosition(parentX, parentY, context);\n    \n    // 计算文本基准位置（考虑 anchor 和 textAlign）\n    let baseX = parentXPixels;\n    let baseY = parentYPixels;\n    \n    // 根据 anchor 调整水平位置\n    if (parentAnchor[0] === 0.5) {\n      // 水平居中\n      if (parentTextAlign === 'center') {\n        baseX = baseX - totalTextWidth / 2;\n      } else if (parentTextAlign === 'right') {\n        baseX = baseX - totalTextWidth;\n      }\n    } else if (parentAnchor[0] === 1) {\n      // 右对齐\n      if (parentTextAlign === 'center') {\n        baseX = baseX - totalTextWidth / 2;\n      } else if (parentTextAlign === 'right') {\n        baseX = baseX - totalTextWidth;\n      }\n    }\n    \n    // 根据 anchor 调整垂直位置（segmentOffsetY 是相对于文本顶部的）\n    if (parentAnchor[1] === 0.5) {\n      // 垂直居中：baseY 应该指向文本顶部\n      baseY = baseY - totalTextHeight / 2;\n    } else if (parentAnchor[1] === 1) {\n      // 底部对齐：baseY 应该指向文本顶部\n      baseY = baseY - totalTextHeight;\n    }\n    // 顶部对齐：baseY 就是文本顶部，不需要调整\n    \n    // 计算动画偏移量（state.x 和 state.y 已经包含了动画偏移）\n    const { x: originalConfigX, y: originalConfigY } = this.convertPosition(\n      this.config.x || parentX,\n      this.config.y || parentY,\n      context\n    );\n    \n    const animatedX = (state.x !== undefined && typeof state.x === 'number') \n      ? state.x \n      : originalConfigX;\n    const animatedY = (state.y !== undefined && typeof state.y === 'number')\n      ? state.y\n      : originalConfigY;\n    \n    const animOffsetX = animatedX - originalConfigX;\n    const animOffsetY = animatedY - originalConfigY;\n    \n    // 最终位置 = 基准位置 + 片段偏移 + 动画偏移\n    const x = baseX + segmentOffsetX + animOffsetX;\n    const y = baseY + segmentOffsetY + animOffsetY;\n    \n    return {\n      x,\n      y,\n      baseline: 'top', // 分割片段使用 top baseline\n    };\n  }\n\n\n  \n\n  /**\n   * 检查元素是否已初始化\n   * 子类可以覆盖此方法来自定义初始化状态检查\n   * @returns {boolean} 是否已初始化\n   */\n  isInitialized() {\n    // 默认返回 true，子类可以覆盖\n    return true;\n  }\n\n  /**\n   * 将状态中的变换应用到 Paper.js 对象\n   * 这是一个统一的动画应用方法，所有元素都应该使用它来应用变换\n   * @param {Object} item - Paper.js 对象（Path, Raster, Group, PointText 等）\n   * @param {Object} state - 元素状态（从 getStateAtTime 获取）\n   * @param {Object} options - 选项\n   * @param {paper.Point} options.pivot - 变换的中心点（用于 rotation 和 scale），如果不提供则使用 item.position\n   * @param {boolean} options.applyPosition - 是否应用位置（x, y），默认 true\n   * @param {boolean} options.applyOpacity - 是否应用透明度，默认 true\n   * @param {boolean} options.applyRotation - 是否应用旋转，默认 true\n   * @param {boolean} options.applyScale - 是否应用缩放，默认 true\n   * @param {Object} options.paperInstance - Paper.js 实例 { project, paper }（可选）\n   */\n  applyTransform(item, state, options = {}) {\n    if (!item) return;\n\n    const {\n      pivot = null,\n      applyPosition = true,\n      applyOpacity = true,\n      applyRotation = true,\n      applyScale = true,\n      paperInstance = null,\n    } = options;\n    \n    // 获取 Paper.js 实例\n    const { paper: p } = this.getPaperInstance(paperInstance);\n\n    // 快速路径：检查是否有需要应用的变换\n    const needsPosition = applyPosition && state.x !== undefined && typeof state.x === 'number' && state.y !== undefined && typeof state.y === 'number';\n    const needsOpacity = applyOpacity && state.opacity !== undefined;\n    const needsRotation = applyRotation && state.rotation !== undefined && state.rotation !== 0;\n    const needsScale = applyScale && (state.scaleX !== undefined || state.scaleY !== undefined) && \n                       ((state.scaleX !== undefined && state.scaleX !== 1) || (state.scaleY !== undefined && state.scaleY !== 1));\n    \n    if (!needsPosition && !needsOpacity && !needsRotation && !needsScale) {\n      return; // 没有需要应用的变换，直接返回\n    }\n\n    // 应用位置（x, y）\n    if (needsPosition) {\n      // 如果 item 有 position 属性，直接设置\n      if (item.position !== undefined) {\n        item.position = new p.Point(state.x, state.y);\n      } else if (item.center !== undefined) {\n        // 对于 Path 等对象，使用 center\n        item.center = new p.Point(state.x, state.y);\n      }\n    }\n\n    // 应用透明度\n    if (needsOpacity) {\n      item.opacity = state.opacity;\n    }\n\n    // 确定变换中心点（只在需要旋转或缩放时计算）\n    if (needsRotation || needsScale) {\n      let transformPivot;\n      if (pivot) {\n        transformPivot = pivot;\n      } else if (item.position) {\n        transformPivot = item.position;\n      } else if (item.center) {\n        transformPivot = item.center;\n      } else {\n        transformPivot = new p.Point(0, 0);\n      }\n\n      // 应用旋转\n      if (needsRotation) {\n        item.rotate(state.rotation, transformPivot);\n      }\n\n      // 应用缩放\n      if (needsScale) {\n        const scaleX = state.scaleX !== undefined ? state.scaleX : 1;\n        const scaleY = state.scaleY !== undefined ? state.scaleY : 1;\n        \n        // 只有当 scaleX 或 scaleY 不等于 1 时才应用缩放（包括 0 的情况）\n        if (scaleX !== 1 || scaleY !== 1) {\n          // 如果 scaleX 或 scaleY 为 0，需要先设置一个很小的值，否则 Paper.js 可能无法正确渲染\n          const finalScaleX = scaleX === 0 ? 0.001 : scaleX;\n          const finalScaleY = scaleY === 0 ? 0.001 : scaleY;\n          item.scale(finalScaleX, finalScaleY, transformPivot);\n        }\n      }\n    }\n  }\n\n  /**\n   * 渲染元素到 Paper.js 图层（子类实现）\n   * @param {Object} layer - Paper.js 图层对象\n   * @param {number} time - 当前时间（秒）\n   */\n  render(layer, time) {\n    // 子类实现具体渲染逻辑\n    throw new Error('render method must be implemented by subclass');\n  }\n\n\n  /**\n   * 调用 onLoaded 回调（如果存在且未调用过）\n   * @param {number} time - 当前时间（秒）\n   * @param {paper.Item} paperItem - Paper.js 项目（如果已创建）\n   * @param {Object} paperInstance - Paper.js 实例 { project, paper }\n   */\n  _callOnLoaded(time, paperItem = null, paperInstance = null) {\n    if (this.onLoaded && !this._loadedCallbackCalled) {\n      try {\n        // 获取正确的 Paper.js 实例\n        const { paper: p, project } = this.getPaperInstance(paperInstance || this._paperInstance);\n        \n        // 临时设置全局 paper.project 为当前实例的 project\n        const originalProject = paper.project;\n        if (project && paper) {\n          paper.project = project;\n        }\n        \n        try {\n          // 调用 onLoaded 回调\n          // 如果回调接受 3 个参数，传递 paperItem 作为第三个参数\n          // 如果回调接受 4 个参数，传递 paperInstance 作为第四个参数\n          if (this.onLoaded.length >= 4) {\n            this.onLoaded(this, time, paperItem, { paper: p, project });\n          } else if (this.onLoaded.length >= 3) {\n            this.onLoaded(this, time, paperItem);\n          } else {\n            this.onLoaded(this, time);\n          }\n          this._loadedCallbackCalled = true;\n        } finally {\n          // 恢复原始的 project\n          if (originalProject !== undefined) {\n            paper.project = originalProject;\n          }\n        }\n      } catch (e) {\n        console.warn(`[${this.type}] onLoaded 回调执行失败:`, e);\n      }\n    }\n  }\n\n  /**\n   * 调用 onRender 回调（如果存在）\n   * @param {number} time - 当前时间（秒）\n   * @param {paper.Item} paperItem - Paper.js 项目（如果已创建）\n   * @param {Object} paperInstance - Paper.js 实例 { project, paper }\n   */\n  _callOnRender(time, paperItem = null, paperInstance = null) {\n    // 如果元素有 _paperItem 属性，更新它（用于 onFrame 中访问）\n    if (paperItem && this._paperItem !== paperItem) {\n      this._paperItem = paperItem;\n    }\n    \n    if (this.onRender) {\n      try {\n        // 获取正确的 Paper.js 实例\n        const { paper: p, project } = this.getPaperInstance(paperInstance || this._paperInstance);\n        \n        // 临时设置全局 paper.project 为当前实例的 project\n        const originalProject = paper.project;\n        if (project && paper) {\n          paper.project = project;\n        }\n        \n        try {\n          // 调用 onRender 回调\n          // 如果回调接受 3 个参数，传递 paperItem 作为第三个参数\n          // 如果回调接受 4 个参数，传递 paperInstance 作为第四个参数\n          if (this.onRender.length >= 4) {\n            this.onRender(this, time, paperItem, { paper: p, project });\n          } else if (this.onRender.length >= 3) {\n            this.onRender(this, time, paperItem);\n          } else {\n            this.onRender(this, time);\n          }\n        } finally {\n          // 恢复原始的 project\n          if (originalProject !== undefined) {\n            paper.project = originalProject;\n          }\n        }\n      } catch (e) {\n        console.warn(`[${this.type}] onRender 回调执行失败:`, e);\n      }\n    }\n  }\n\n  /**\n   * 调用 onFrame 回调（如果存在）\n   * @param {Object} event - Paper.js onFrame 事件对象 { count, time, delta }\n   * @param {paper.Item} paperItem - Paper.js 项目（如果已创建）\n   * @param {Object} paperInstance - Paper.js 实例 { project, paper }\n   */\n  _callOnFrame(event, paperItem = null, paperInstance = null) {\n    // 更新 Paper.js 项目引用\n    if (paperItem && this._paperItem !== paperItem) {\n      this._paperItem = paperItem;\n    }\n    \n    // 保存 paperInstance 以便在 onFrame 回调中使用\n    if (paperInstance && !this._paperInstance) {\n      this._paperInstance = paperInstance;\n    }\n    \n    if (this.onFrame) {\n      try {\n        // 获取正确的 Paper.js 实例\n        const { paper: p, project } = this.getPaperInstance(paperInstance || this._paperInstance);\n        \n        // 临时设置全局 paper.project 为当前实例的 project\n        // 这样用户在 onFrame 回调中使用 paper. 时，可以访问到正确的 project\n        const originalProject = paper.project;\n        if (project && paper) {\n          paper.project = project;\n        }\n        \n        try {\n          // 调用 onFrame 回调\n          // 如果回调接受 4 个参数，传递 paperInstance 作为第四个参数\n          // 否则只传递 3 个参数（保持向后兼容）\n          if (this.onFrame.length >= 4) {\n            this.onFrame(this, event, this._paperItem || paperItem, { paper: p, project });\n          } else {\n            this.onFrame(this, event, this._paperItem || paperItem);\n          }\n        } finally {\n          // 恢复原始的 project\n          if (originalProject !== undefined) {\n            paper.project = originalProject;\n          }\n        }\n      } catch (e) {\n        console.warn(`[${this.type}] onFrame 回调执行失败:`, e);\n      }\n    }\n  }\n\n  /**\n   * 获取 Paper.js 实例（辅助方法，用于在 render 方法中获取 paper 和 project）\n   * @param {Object} paperInstance - Paper.js 实例 { project, paper }\n   * @returns {Object} { paper, project } - Paper.js 对象和项目\n   */\n  getPaperInstance(paperInstance = null) {\n    // 如果没有传入 paperInstance，尝试使用全局 paper（向后兼容）\n    if (!paperInstance) {\n      return {\n        paper: paper,\n        project: paper.project || null,\n      };\n    }\n    return {\n      paper: paperInstance.paper || paper,\n      project: paperInstance.project || (paper.project || null),\n    };\n  }\n\n  /**\n   * 销毁元素\n   */\n  destroy() {\n    // 视频元素需要先 close（kill FFmpeg 进程）\n    if (this.type === ElementType.VIDEO && typeof this.close === 'function') {\n      this.close();\n    }\n    // Spine 元素有 destroy 方法会处理自己的清理\n    try { if (this._paperItem && typeof this._paperItem.remove === 'function') this._paperItem.remove(); } catch (_) {}\n    if (Array.isArray(this.segments)) {\n      for (const s of this.segments) { try { if (s && typeof s.destroy === 'function') s.destroy(); } catch (_) {} }\n      this.segments = [];\n    }\n    try { if (this._cursorItem && typeof this._cursorItem.remove === 'function') this._cursorItem.remove(); } catch (_) {}\n    this._cursorItem = null;\n    try { if (typeof this.clearFrameCache === 'function') this.clearFrameCache(); } catch (_) {}\n    try { if (this._echarts && typeof this._echarts.dispose === 'function') this._echarts.dispose(); } catch (_) {}\n    this._echarts = null;\n    this._canvas = null;\n    this.animations = [];\n    this.config = {};\n    this.parent = null;\n    this.onLoaded = null;\n    this.onRender = null;\n    this._loadedCallbackCalled = false;\n    this._paperItem = null;\n    this._paperInstance = null;\n    this.visible = false;\n    this._destroyed = true;\n  }\n}\n\n"],"names":["getPresetAnimation","AnimationType","TransformAnimation","KeyframeAnimation","CustomAnimation","generateId","deepMerge","DEFAULT_ELEMENT_CONFIG","registerFontFile","pipeline","toPixels","toFontSizePixels","ElementType"],"mappings":"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"}