{"version":3,"file":"JSONElement.cjs","sources":["../../../src/elements/JSONElement.js"],"sourcesContent":["import { BaseElement } from './BaseElement.js';\nimport { DEFAULT_ELEMENT_CONFIG } from '../types/constants.js';\nimport { deepMerge } from '../utils/helpers.js';\nimport { ElementType } from '../types/enums.js';\nimport { toPixels } from '../utils/unit-converter.js';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport paper from '@chnak/paper';\n\n/**\n * JSON 元素 - 支持导入 Paper.js JSON 格式\n * 可以用于导入从 Adobe Illustrator 或其他工具导出的 Paper.js JSON 格式\n */\nexport class JSONElement extends BaseElement {\n  constructor(config = {}) {\n    super(config);\n    this.type = ElementType.JSON;\n    // 重新合并配置\n    this.config = deepMerge({}, DEFAULT_ELEMENT_CONFIG, config);\n    \n    // JSON 文件路径或 JSON 对象/字符串\n    this.src = config.src || config.path || '';\n    this.jsonData = config.jsonData || null;\n    this.jsonString = config.jsonString || null;\n    \n    // 加载状态\n    this.loaded = false;\n    this.loading = false;\n    this.jsonItem = null;\n    \n    // 尺寸和位置\n    this.width = config.width || 100;\n    this.height = config.height || 100;\n    \n    // 缩放和适配\n    this.fit = config.fit || 'contain'; // contain, cover, fill, scale-down, none\n    this.preserveAspectRatio = config.preserveAspectRatio !== undefined ? config.preserveAspectRatio : true;\n  }\n\n  /**\n   * 加载 JSON 文件或解析 JSON 字符串\n   */\n  async load() {\n    if (this.loaded || this.loading) {\n      return;\n    }\n\n    this.loading = true;\n\n    try {\n      // 如果提供了 JSON 对象，直接使用\n      if (this.jsonData && typeof this.jsonData === 'object') {\n        // JSON 对象已提供\n      } else if (this.jsonString) {\n        // 解析 JSON 字符串\n        this.jsonData = JSON.parse(this.jsonString);\n      } else if (this.src) {\n        // 从文件加载\n        const jsonPath = path.isAbsolute(this.src) ? this.src : path.resolve(this.src);\n        if (await fs.pathExists(jsonPath)) {\n          const jsonContent = await fs.readFile(jsonPath, 'utf-8');\n          this.jsonData = JSON.parse(jsonContent);\n        } else {\n          throw new Error(`JSON 文件不存在: ${jsonPath}`);\n        }\n      } else {\n        throw new Error('JSON 元素需要提供 src、jsonString 或 jsonData');\n      }\n\n      this.loaded = true;\n      this.loading = false;\n      \n      // 调用 onLoaded 回调（注意：此时还没有 paperItem，所以传递 null）\n      this._callOnLoaded(this.startTime || 0, null, null);\n    } catch (error) {\n      this.loading = false;\n      console.error('[JSONElement] 加载 JSON 失败:', error);\n      throw error;\n    }\n  }\n\n  /**\n   * 检查是否已初始化\n   */\n  isInitialized() {\n    return this.loaded && this.jsonData !== null;\n  }\n\n  /**\n   * 初始化 JSON（同步方式，在渲染时调用）\n   */\n  async initialize() {\n    if (!this.loaded) {\n      await this.load();\n    }\n  }\n\n  /**\n   * 渲染 JSON 元素（使用 Paper.js）\n   * @param {paper.Layer} layer - Paper.js 图层\n   * @param {number} time - 当前时间（秒）\n   * @param {Object} paperInstance - Paper.js 实例 { project, paper }\n   */\n  async render(layer, time, paperInstance = null) {\n    if (!this.visible) return null;\n\n    // 检查时间范围\n    if (!this.isActiveAtTime(time)) {\n      return null;\n    }\n\n    // 如果还没加载，尝试加载\n    if (!this.loaded) {\n      await this.initialize();\n    }\n\n    if (!this.jsonData) {\n      return null;\n    }\n\n    // 获取 Paper.js 实例\n    const { paper: p, project } = this.getPaperInstance(paperInstance);\n\n    // 优先使用元素的 canvasWidth/canvasHeight，如果没有则使用 project.view.viewSize\n    const viewSize = project && project.view && project.view.viewSize \n      ? project.view.viewSize \n      : { width: 1920, height: 1080 };\n    const context = { \n      width: this.canvasWidth || viewSize.width, \n      height: this.canvasHeight || viewSize.height \n    };\n    const state = this.getStateAtTime(time, context);\n\n    // 使用 BaseElement 的通用方法转换尺寸\n    let width = state.width || this.width;\n    let height = state.height || this.height;\n    const size = this.convertSize(width, height, context);\n    width = size.width;\n    height = size.height;\n    \n    // state.x 和 state.y 已经在 getStateAtTime 中转换了单位\n    const x = state.x || 0;\n    const y = state.y || 0;\n\n    // 使用 BaseElement 的通用方法计算位置（包括 anchor 对齐）\n    const { x: rectX, y: rectY } = this.calculatePosition(state, context, {\n      elementWidth: width,\n      elementHeight: height,\n    });\n\n    try {\n      // 使用 Paper.js 导入 JSON\n      // 注意：paper.project.importJSON 可能不存在，需要手动创建\n      let jsonItem;\n      \n      // 检查 JSON 数据的格式\n      // Paper.js JSON 格式通常包含 children 数组或其他项目数据\n      if (typeof project.importJSON === 'function') {\n        try {\n          // 方法1：使用 importJSON（如果可用）\n          jsonItem = project.importJSON(this.jsonData);\n          // 验证返回的对象是否是有效的 Paper.js 项目\n          if (!jsonItem || typeof jsonItem._remove !== 'function') {\n            jsonItem = null;\n          }\n        } catch (e) {\n          console.warn('[JSONElement] importJSON 失败，尝试手动创建:', e.message);\n          jsonItem = null;\n        }\n      }\n      \n      // 如果 importJSON 不可用或失败，手动创建\n      if (!jsonItem) {\n        if (this.jsonData.children && Array.isArray(this.jsonData.children)) {\n          // 方法2：手动创建项目（如果 importJSON 不可用）\n          // 尝试从 JSON 数据中恢复项目\n          jsonItem = this._createItemFromJSON(this.jsonData, paperInstance);\n        } else if (this.jsonData.svg) {\n          // 方法3：如果 JSON 包含 SVG 数据，使用 SVG 导入\n          if (typeof project.importSVG === 'function') {\n            try {\n              jsonItem = project.importSVG(this.jsonData.svg);\n            } catch (e) {\n              console.warn('[JSONElement] SVG 导入失败:', e.message);\n            }\n          }\n        } else {\n          // 方法4：尝试直接创建路径（如果 JSON 包含路径数据）\n          jsonItem = this._createItemFromJSON(this.jsonData, paperInstance);\n        }\n      }\n\n      // 验证创建的对象是否是有效的 Paper.js 项目\n      if (!jsonItem || typeof jsonItem._remove !== 'function') {\n        console.warn('[JSONElement] JSON 导入失败：创建的对象不是有效的 Paper.js 项目');\n        return null;\n      }\n\n      // 获取 JSON 项目的原始尺寸\n      // 检查 bounds 是否存在且有效\n      let jsonWidth = width;\n      let jsonHeight = height;\n      \n      if (jsonItem.bounds && typeof jsonItem.bounds.width === 'number' && typeof jsonItem.bounds.height === 'number') {\n        jsonWidth = jsonItem.bounds.width;\n        jsonHeight = jsonItem.bounds.height;\n      } else {\n        // 如果 bounds 无效，尝试获取内部尺寸\n        try {\n          if (jsonItem.children && jsonItem.children.length > 0) {\n            // 如果是 Group，计算所有子元素的边界\n            const groupBounds = jsonItem.children.reduce((bounds, child) => {\n              if (child.bounds) {\n                return bounds ? bounds.unite(child.bounds) : child.bounds;\n              }\n              return bounds;\n            }, null);\n            if (groupBounds) {\n              jsonWidth = groupBounds.width;\n              jsonHeight = groupBounds.height;\n            }\n          }\n        } catch (e) {\n          console.warn('[JSONElement] 无法获取 JSON 项目尺寸，使用默认尺寸:', e.message);\n        }\n      }\n      \n      // 确保尺寸有效\n      if (!jsonWidth || jsonWidth <= 0) jsonWidth = width;\n      if (!jsonHeight || jsonHeight <= 0) jsonHeight = height;\n\n      // 根据 fit 模式计算缩放\n      let scaleX = 1;\n      let scaleY = 1;\n\n      if (this.fit === 'contain') {\n        // 保持宽高比，完整显示\n        const scale = Math.min(width / jsonWidth, height / jsonHeight);\n        scaleX = scaleY = scale;\n      } else if (this.fit === 'cover') {\n        // 保持宽高比，填充整个区域\n        const scale = Math.max(width / jsonWidth, height / jsonHeight);\n        scaleX = scaleY = scale;\n      } else if (this.fit === 'fill') {\n        // 拉伸填充\n        scaleX = width / jsonWidth;\n        scaleY = height / jsonHeight;\n      } else if (this.fit === 'scale-down') {\n        // 如果 JSON 项目比容器大，则缩小；否则保持原尺寸\n        const scale = Math.min(1, Math.min(width / jsonWidth, height / jsonHeight));\n        scaleX = scaleY = scale;\n      }\n      // 'none' 模式保持原始尺寸\n\n      // 应用缩放\n      if (scaleX !== 1 || scaleY !== 1) {\n        jsonItem.scale(scaleX, scaleY);\n      }\n\n      // 计算位置（考虑 anchor）\n      const scaledWidth = jsonWidth * scaleX;\n      const scaledHeight = jsonHeight * scaleY;\n      const itemX = rectX + width * anchor[0] - scaledWidth * 0.5;\n      const itemY = rectY + height * anchor[1] - scaledHeight * 0.5;\n\n      jsonItem.position = new p.Point(itemX + scaledWidth / 2, itemY + scaledHeight / 2);\n\n      // 应用变换（旋转、缩放等，位置已经设置了）\n      this.applyTransform(jsonItem, state, {\n        applyPosition: false, // 位置已经设置了\n        paperInstance: paperInstance,\n      });\n\n      // 添加到 layer\n      layer.addChild(jsonItem);\n\n      // 保存引用以便后续清理\n      this.jsonItem = jsonItem;\n\n      // 调用 onRender 回调（传递 paperItem 和 paperInstance）\n      this._callOnRender(time, jsonItem, paperInstance);\n\n      return jsonItem;\n    } catch (error) {\n      console.error('[JSONElement] 渲染 JSON 失败:', error);\n      return null;\n    }\n  }\n\n  /**\n   * 从 JSON 数据创建 Paper.js 项目（辅助方法）\n   * 支持 Paper.js JSON 格式和简化的路径格式\n   * @param {Object} jsonData - JSON 数据\n   * @param {Object} paperInstance - Paper.js 实例 { project, paper }\n   */\n  _createItemFromJSON(jsonData, paperInstance = null) {\n    if (!jsonData || typeof jsonData !== 'object') {\n      return null;\n    }\n    \n    // 获取 Paper.js 实例\n    const { paper: p } = this.getPaperInstance(paperInstance);\n    \n    // 如果包含 children 数组，创建 Group\n    if (jsonData.children && Array.isArray(jsonData.children)) {\n      const group = new p.Group();\n      \n      // 递归处理子元素\n      for (const childData of jsonData.children) {\n        const childItem = this._createItemFromJSON(childData, paperInstance);\n        if (childItem && typeof childItem._remove === 'function') {\n          group.addChild(childItem);\n        }\n      }\n      \n      // 如果 Group 有子元素，返回它\n      if (group.children.length > 0) {\n        return group;\n      } else {\n        group.remove();\n        return null;\n      }\n    }\n    \n    // 如果包含 className 和 data，尝试创建对应的 Paper.js 对象\n    if (jsonData.className && jsonData.data) {\n      return this._createItemFromClassData(jsonData.className, jsonData.data, paperInstance);\n    }\n    \n    // 如果包含 segments 或 points，创建路径\n    if (jsonData.segments || jsonData.points) {\n      return this._createPathFromData(jsonData, paperInstance);\n    }\n    \n    return null;\n  }\n\n  /**\n   * 根据 className 和 data 创建 Paper.js 对象\n   * @param {string} className - 类名\n   * @param {Object} data - 数据\n   * @param {Object} paperInstance - Paper.js 实例 { project, paper }\n   */\n  _createItemFromClassData(className, data, paperInstance = null) {\n    // 获取 Paper.js 实例\n    const { paper: p } = this.getPaperInstance(paperInstance);\n    \n    if (className === 'Path' || className === 'path') {\n      return this._createPathFromData(data, paperInstance);\n    } else if (className === 'Group' || className === 'group') {\n      if (data.children && Array.isArray(data.children)) {\n        const group = new p.Group();\n        for (const childData of data.children) {\n          const childItem = this._createItemFromJSON(childData, paperInstance);\n          if (childItem && typeof childItem._remove === 'function') {\n            group.addChild(childItem);\n          }\n        }\n        return group.children.length > 0 ? group : null;\n      }\n    } else if (className === 'Circle' || className === 'circle') {\n      if (data.center && data.radius) {\n        const center = new p.Point(data.center[0] || data.center.x, data.center[1] || data.center.y);\n        const circle = new p.Path.Circle(center, data.radius);\n        this._applyStyleToItem(circle, data);\n        return circle;\n      }\n    } else if (className === 'Rectangle' || className === 'rect') {\n      if (data.rectangle || data.rect) {\n        const rect = data.rectangle || data.rect;\n        const rectangle = new p.Rectangle(\n          rect.x || rect[0] || 0,\n          rect.y || rect[1] || 0,\n          rect.width || rect[2] || 100,\n          rect.height || rect[3] || 100\n        );\n        const path = new p.Path.Rectangle(rectangle);\n        this._applyStyleToItem(path, data);\n        return path;\n      }\n    }\n    \n    return null;\n  }\n\n  /**\n   * 从数据创建路径\n   * @param {Object} data - 路径数据\n   * @param {Object} paperInstance - Paper.js 实例 { project, paper }\n   */\n  _createPathFromData(data, paperInstance = null) {\n    // 获取 Paper.js 实例\n    const { paper: p } = this.getPaperInstance(paperInstance);\n    \n    const path = new p.Path();\n    \n    // 处理 segments 或 points\n    if (data.segments && Array.isArray(data.segments)) {\n      // segments 格式：[[x, y], [x, y], ...] 或 [[x, y, handleIn, handleOut], ...]\n      for (const segment of data.segments) {\n        if (Array.isArray(segment) && segment.length >= 2) {\n          const point = new p.Point(segment[0], segment[1]);\n          if (segment.length >= 6) {\n            // 有控制点\n            const handleIn = new p.Point(segment[2], segment[3]);\n            const handleOut = new p.Point(segment[4], segment[5]);\n            path.add(new p.Segment(point, handleIn, handleOut));\n          } else {\n            path.add(point);\n          }\n        }\n      }\n    } else if (data.points && Array.isArray(data.points)) {\n      // points 格式：[[x, y], [x, y], ...] 或 [{x, y}, {x, y}, ...]\n      for (const pointData of data.points) {\n        let point;\n        if (Array.isArray(pointData)) {\n          point = new p.Point(pointData[0], pointData[1]);\n        } else if (pointData && typeof pointData.x === 'number' && typeof pointData.y === 'number') {\n          point = new p.Point(pointData.x, pointData.y);\n        }\n        if (point) {\n          path.add(point);\n        }\n      }\n    }\n    \n    // 应用样式\n    this._applyStyleToPath(path, data);\n    \n    // 如果路径没有点，返回 null\n    if (path.segments.length === 0) {\n      path.remove();\n      return null;\n    }\n    \n    return path;\n  }\n\n  /**\n   * 应用样式到路径\n   */\n  _applyStyleToPath(path, data) {\n    // 闭合路径\n    if (data.closed === true) {\n      path.closePath();\n    }\n    \n    // 平滑路径\n    if (data.smooth === true) {\n      path.smooth();\n    }\n    \n    // 应用样式\n    this._applyStyleToItem(path, data);\n  }\n\n  /**\n   * 应用样式到 Paper.js 项目\n   */\n  _applyStyleToItem(item, data) {\n    // 填充颜色\n    if (data.fillColor) {\n      if (typeof data.fillColor === 'string') {\n        item.fillColor = data.fillColor;\n      } else if (data.fillColor.hue !== undefined) {\n        // HSL 格式\n        item.fillColor = {\n          hue: data.fillColor.hue,\n          saturation: data.fillColor.saturation || 1,\n          brightness: data.fillColor.brightness || 1,\n          alpha: data.fillColor.alpha !== undefined ? data.fillColor.alpha : 1,\n        };\n      } else if (data.fillColor.r !== undefined) {\n        // RGB 格式\n        item.fillColor = {\n          r: data.fillColor.r,\n          g: data.fillColor.g,\n          b: data.fillColor.b,\n          alpha: data.fillColor.alpha !== undefined ? data.fillColor.alpha : 1,\n        };\n      }\n    } else if (data.fillColor === null) {\n      item.fillColor = null;\n    }\n    \n    // 描边颜色\n    if (data.strokeColor) {\n      if (typeof data.strokeColor === 'string') {\n        item.strokeColor = data.strokeColor;\n      } else if (data.strokeColor.hue !== undefined) {\n        item.strokeColor = {\n          hue: data.strokeColor.hue,\n          saturation: data.strokeColor.saturation || 1,\n          brightness: data.strokeColor.brightness || 1,\n          alpha: data.strokeColor.alpha !== undefined ? data.strokeColor.alpha : 1,\n        };\n      } else if (data.strokeColor.r !== undefined) {\n        item.strokeColor = {\n          r: data.strokeColor.r,\n          g: data.strokeColor.g,\n          b: data.strokeColor.b,\n          alpha: data.strokeColor.alpha !== undefined ? data.strokeColor.alpha : 1,\n        };\n      }\n    }\n    \n    // 描边宽度\n    if (typeof data.strokeWidth === 'number') {\n      item.strokeWidth = data.strokeWidth;\n    }\n    \n    // 不透明度\n    if (typeof data.opacity === 'number') {\n      item.opacity = data.opacity;\n    }\n  }\n\n  /**\n   * 销毁元素\n   */\n  destroy() {\n    if (this.jsonItem) {\n      this.jsonItem.remove();\n      this.jsonItem = null;\n    }\n    this.jsonData = null;\n    this.loaded = false;\n    this.loading = false;\n    super.destroy();\n  }\n}\n\n"],"names":["BaseElement","ElementType","deepMerge","DEFAULT_ELEMENT_CONFIG"],"mappings":"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"}