{"version":3,"file":"CircleElement.cjs","sources":["../../../src/elements/CircleElement.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 paper from '@chnak/paper';\n\n/**\n * 圆形元素\n */\nexport class CircleElement extends BaseElement {\n  constructor(config = {}) {\n    super(config);\n    this.type = ElementType.CIRCLE;\n    // 重新合并配置，确保传入的config优先级最高\n    this.config = deepMerge({}, DEFAULT_ELEMENT_CONFIG, config);\n    this.config.bgcolor = this.config.bgcolor || '#ffffff';\n    this.config.borderWidth = this.config.borderWidth || 0;\n    this.config.borderColor = this.config.borderColor || '#000000';\n    // 圆形使用 width 作为半径\n    if (!this.config.radius) {\n      this.config.radius = Math.min(this.config.width, this.config.height) / 2;\n    }\n  }\n\n  /**\n   * 设置半径\n   */\n  setRadius(radius) {\n    this.config.radius = radius;\n    this.config.width = radius * 2;\n    this.config.height = radius * 2;\n  }\n\n  /**\n   * 设置背景颜色\n   */\n  setBgColor(color) {\n    this.config.bgcolor = color;\n  }\n\n  /**\n   * 设置边框\n   */\n  setBorder(width, color) {\n    this.config.borderWidth = width;\n    this.config.borderColor = color;\n  }\n\n  /**\n   * 渲染圆形元素（使用 Paper.js）\n   * @param {paper.Layer} layer - Paper.js 图层\n   * @param {number} time - 当前时间（秒）\n   * @param {Object} paperInstance - Paper.js 实例 { project, paper }\n   */\n  render(layer, time, paperInstance = null) {\n    if (!this.visible) return null;\n\n    // 获取 Paper.js 实例\n    const { paper: p, project } = this.getPaperInstance(paperInstance);\n\n    const viewSize = project && project.view && project.view.viewSize \n      ? project.view.viewSize \n      : { width: 1920, height: 1080 };\n    const context = { width: viewSize.width, height: viewSize.height };\n    const state = this.getStateAtTime(time, context);\n\n    // 使用 BaseElement 的通用方法转换位置\n    // state.x 和 state.y 已经在 getStateAtTime 中转换了单位\n    const { x, y } = this.convertPosition(state.x, state.y, context);\n\n    // 计算半径\n    let radius = state.radius;\n    if (typeof radius === 'string') {\n      // 半径可以基于宽度或高度，这里使用宽度作为基准\n      radius = toPixels(radius, context, 'x');\n    } else if (!radius) {\n      // 如果没有指定半径，使用 width 和 height 的最小值的一半\n      const { width = 0, height = 0 } = this.convertSize(state.width, state.height, context);\n      radius = Math.min(width, height) / 2;\n    }\n\n    // 创建圆形\n    const circle = new p.Path.Circle({\n      center: new p.Point(x, y),\n      radius: radius,\n    });\n\n    circle.fillColor = state.bgcolor || '#ffffff';\n\n    // 边框\n    if (state.borderWidth > 0) {\n      circle.strokeColor = state.borderColor || '#000000';\n      circle.strokeWidth = state.borderWidth;\n    }\n\n    // 使用统一的变换方法应用动画\n    this.applyTransform(circle, state, {\n      pivot: new p.Point(x, y), // 使用圆心作为变换中心\n      paperInstance: paperInstance,\n    });\n\n    // 添加到 layer\n    layer.addChild(circle);\n    \n    // 调用 onRender 回调，传递 Paper.js 项目引用和 paperInstance\n    this._callOnRender(time, circle, paperInstance);\n    \n    return circle;\n  }\n\n}\n\n"],"names":["BaseElement","ElementType","deepMerge","DEFAULT_ELEMENT_CONFIG","toPixels"],"mappings":"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"}