{"version":3,"file":"Component.cjs","sources":["../../../src/builder/Component.js"],"sourcesContent":["/**\r\n * 组件类 - 可复用的元素容器\r\n * 组件有自己的宽高和时间控制，可以包含多个元素\r\n * 组件内的元素使用相对坐标（相对于组件）\r\n * 组件可以添加到轨道或场景中进行复用\r\n */\r\nimport { TextElement } from '../elements/TextElement.js';\r\nimport { ImageElement } from '../elements/ImageElement.js';\r\nimport { VideoElement } from '../elements/VideoElement.js';\r\nimport { RectElement } from '../elements/RectElement.js';\r\nimport { CircleElement } from '../elements/CircleElement.js';\r\nimport { PathElement } from '../elements/PathElement.js';\r\nimport { SVGElement } from '../elements/SVGElement.js';\r\nimport { JSONElement } from '../elements/JSONElement.js';\r\nimport { AudioElement } from '../elements/AudioElement.js';\r\nimport { SubtitleElement } from '../elements/SubtitleElement.js';\r\nimport { OscilloscopeElement } from '../elements/OscilloscopeElement.js';\r\nimport { CodeElement } from '../elements/CodeElement.js';\r\nimport { EChartsElement } from '../elements/EChartsElement.js';\r\nimport { toPixels, toFontSizePixels } from '../utils/unit-converter.js';\r\n\r\n/**\r\n * 组件类\r\n */\r\nexport class Component {\r\n  constructor(config = {}) {\r\n    this.id = config.id || `component-${Date.now()}`;\r\n    this.name = config.name || `Component-${this.id}`;\r\n    \r\n    // 组件的尺寸（相对于父容器）\r\n    this.width = config.width || 1920;\r\n    this.height = config.height || 1080;\r\n    \r\n    // 组件的时间控制（相对于父容器）\r\n    this.startTime = config.startTime !== undefined ? config.startTime : 0;\r\n    this.duration = config.duration || 5;\r\n    this.endTime = this.startTime + this.duration;\r\n    \r\n    // 组件的位置（相对于父容器，默认居中）\r\n    this.x = config.x !== undefined ? config.x : '50%';\r\n    this.y = config.y !== undefined ? config.y : '50%';\r\n    this.anchor = config.anchor || [0.5, 0.5]; // 锚点，默认中心\r\n    \r\n    // 组件的其他属性\r\n    this.zIndex = config.zIndex || 0;\r\n    this.opacity = config.opacity !== undefined ? config.opacity : 1;\r\n    this.visible = config.visible !== undefined ? config.visible : true;\r\n    \r\n    // 存储组件内的元素\r\n    this.elements = [];\r\n    this.backgroundLayer = null;\r\n    \r\n    // 父容器引用（Track 或 Scene）\r\n    this.parent = null;\r\n    this.parentType = null; // 'track' 或 'scene'\r\n  }\r\n\r\n  /**\r\n   * 添加背景\r\n   * @param {Object} config - 背景配置 { color, image, ... }\r\n   * @returns {Component} 返回自身以支持链式调用\r\n   */\r\n  addBackground(config = {}) {\r\n    const presetColors = [\r\n      \"#4ecdc4\", \"#45b7d1\", \"#f39c12\", \"#e74c3c\", \"#9b59b6\",\r\n      \"#1abc9c\", \"#2ecc71\", \"#f1c40f\", \"#34495e\", \"#16a085\",\r\n    ];\r\n    \r\n    let backgroundColor = config.color || config.backgroundColor;\r\n    if (!backgroundColor) {\r\n      const randomIndex = Math.floor(Math.random() * presetColors.length);\r\n      backgroundColor = presetColors[randomIndex];\r\n    }\r\n    \r\n    if (!this.backgroundLayer) {\r\n      this.backgroundLayer = {\r\n        type: 'background',\r\n        config: {\r\n          backgroundColor: backgroundColor,\r\n          ...config,\r\n        },\r\n      };\r\n    } else {\r\n      this.backgroundLayer.config = {\r\n        ...this.backgroundLayer.config,\r\n        backgroundColor: backgroundColor,\r\n        ...config,\r\n      };\r\n    }\r\n    \r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加文本元素（相对于组件）\r\n   */\r\n  addText(config = {}) {\r\n    this.elements.push({\r\n      type: 'text',\r\n      element: new TextElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加图片元素（相对于组件）\r\n   */\r\n  addImage(config = {}) {\r\n    this.elements.push({\r\n      type: 'image',\r\n      element: new ImageElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加视频元素（相对于组件）\r\n   */\r\n  addVideo(config = {}) {\r\n    this.elements.push({\r\n      type: 'video',\r\n      element: new VideoElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加矩形元素（相对于组件）\r\n   */\r\n  addRect(config = {}) {\r\n    this.elements.push({\r\n      type: 'rect',\r\n      element: new RectElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加圆形元素（相对于组件）\r\n   */\r\n  addCircle(config = {}) {\r\n    this.elements.push({\r\n      type: 'circle',\r\n      element: new CircleElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加路径元素（相对于组件）\r\n   */\r\n  addPath(config = {}) {\r\n    this.elements.push({\r\n      type: 'path',\r\n      element: new PathElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加 SVG 元素（相对于组件）\r\n   */\r\n  addSVG(config = {}) {\r\n    this.elements.push({\r\n      type: 'svg',\r\n      element: new SVGElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加 JSON 元素（相对于组件）\r\n   */\r\n  addJSON(config = {}) {\r\n    this.elements.push({\r\n      type: 'json',\r\n      element: new JSONElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加音频元素（相对于组件）\r\n   */\r\n  addAudio(config = {}) {\r\n    this.elements.push({\r\n      type: 'audio',\r\n      element: new AudioElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加字幕元素（相对于组件）\r\n   */\r\n  addSubtitle(config = {}) {\r\n    this.elements.push({\r\n      type: 'subtitle',\r\n      element: new SubtitleElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 添加示波器元素（相对于组件）\r\n   */\r\n  addOscilloscope(config = {}) {\r\n    this.elements.push({\r\n      type: 'oscilloscope',\r\n      element: new OscilloscopeElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  addCode(config = {}) {\r\n    this.elements.push({\r\n      type: 'code',\r\n      element: new CodeElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  addECharts(config = {}) {\r\n    this.elements.push({\r\n      type: 'echarts',\r\n      element: new EChartsElement(config),\r\n    });\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * 初始化组件（预加载需要异步加载的元素）\r\n   * @returns {Promise<void>}\r\n   */\r\n  async initialize() {\r\n    for (const { element } of this.elements) {\r\n      if (element && typeof element.initialize === 'function') {\r\n        try {\r\n          const initResult = element.initialize();\r\n          if (initResult && typeof initResult.then === 'function') {\r\n            await initResult;\r\n          }\r\n        } catch (err) {\r\n          console.warn(`[Component] 元素 ${element.type} 初始化失败:`, err);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * 构建组件（将组件内的元素转换为绝对坐标的元素）\r\n   * @param {number} parentStartTime - 父容器的开始时间（绝对时间）\r\n   * @param {number} parentWidth - 父容器的宽度\r\n   * @param {number} parentHeight - 父容器的高度\r\n   * @returns {Array<BaseElement>} 转换后的元素实例数组\r\n   */\r\n  build(parentStartTime = 0, parentWidth = 1920, parentHeight = 1080) {\r\n    const elementInstances = [];\r\n    \r\n    // 计算组件在父容器中的绝对位置\r\n    const parentUnitContext = { width: parentWidth, height: parentHeight };\r\n    const componentAbsoluteX = typeof this.x === 'string'\r\n      ? toPixels(this.x, parentUnitContext, 'x')\r\n      : (this.x || parentWidth / 2);\r\n    const componentAbsoluteY = typeof this.y === 'string'\r\n      ? toPixels(this.y, parentUnitContext, 'y')\r\n      : (this.y || parentHeight / 2);\r\n    \r\n    // 转换组件的尺寸（支持百分比、vw、vh 等单位）\r\n    const componentWidth = typeof this.width === 'string'\r\n      ? toPixels(this.width, parentUnitContext, 'width')\r\n      : (this.width || parentWidth);\r\n    const componentHeight = typeof this.height === 'string'\r\n      ? toPixels(this.height, parentUnitContext, 'height')\r\n      : (this.height || parentHeight);\r\n    \r\n    // 计算锚点偏移（使用转换后的像素值）\r\n    const anchorOffsetX = componentWidth * this.anchor[0];\r\n    const anchorOffsetY = componentHeight * this.anchor[1];\r\n    \r\n    // 组件的左上角位置（绝对坐标）\r\n    const componentLeft = componentAbsoluteX - anchorOffsetX;\r\n    const componentTop = componentAbsoluteY - anchorOffsetY;\r\n    \r\n    // 计算组件的绝对开始时间\r\n    const componentAbsoluteStartTime = parentStartTime + this.startTime;\r\n    \r\n    // 添加背景（作为矩形元素，相对于组件）\r\n    if (this.backgroundLayer) {\r\n      const backgroundElement = new RectElement({\r\n        x: componentLeft + componentWidth / 2, // 组件中心 X（绝对坐标）\r\n        y: componentTop + componentHeight / 2, // 组件中心 Y（绝对坐标）\r\n        width: componentWidth,\r\n        height: componentHeight,\r\n        anchor: [0.5, 0.5],\r\n        bgcolor: this.backgroundLayer.config.backgroundColor,\r\n        startTime: componentAbsoluteStartTime,\r\n        duration: this.duration,\r\n        zIndex: this.zIndex - 9999,\r\n        opacity: this.opacity,\r\n      });\r\n      elementInstances.push(backgroundElement);\r\n    }\r\n\r\n    // 转换所有元素\r\n    for (const { element } of this.elements) {\r\n      if (element) {\r\n        // 创建元素的副本（避免修改原始元素）\r\n        // 注意：元素的属性可能在 element.config 中，也可能直接在 element 上\r\n        const elementConfig = { ...element.config };\r\n        \r\n        // 如果元素有直接属性（不在 config 中），也需要复制\r\n        // 例如 visible 可能在 element.visible 而不是 element.config.visible\r\n        if (element.visible !== undefined && elementConfig.visible === undefined) {\r\n          elementConfig.visible = element.visible;\r\n        }\r\n        \r\n        // 转换元素的位置（从相对坐标转换为绝对坐标）\r\n        // 元素的位置是相对于组件的，需要转换为相对于父容器的绝对位置\r\n        // 使用 toPixels 来处理各种单位（%, px, vw, vh, rpx 等）\r\n        // 使用转换后的组件尺寸作为单位上下文\r\n        const unitContext = { width: componentWidth, height: componentHeight };\r\n        let elementRelativeX = 0;\r\n        let elementRelativeY = 0;\r\n        \r\n        if (elementConfig.x !== undefined) {\r\n          elementRelativeX = typeof elementConfig.x === 'string' \r\n            ? toPixels(elementConfig.x, unitContext, 'x')\r\n            : (elementConfig.x || 0);\r\n        }\r\n        if (elementConfig.y !== undefined) {\r\n          elementRelativeY = typeof elementConfig.y === 'string'\r\n            ? toPixels(elementConfig.y, unitContext, 'y')\r\n            : (elementConfig.y || 0);\r\n        }\r\n        \r\n        // 转换元素的尺寸属性（使用组件的尺寸作为单位上下文）\r\n        // width, height 等尺寸属性应该相对于组件的尺寸\r\n        let elementWidth = elementConfig.width;\r\n        let elementHeight = elementConfig.height;\r\n        \r\n        if (elementConfig.width !== undefined) {\r\n          elementWidth = typeof elementConfig.width === 'string'\r\n            ? toPixels(elementConfig.width, unitContext, 'width')\r\n            : elementConfig.width;\r\n          elementConfig.width = elementWidth;\r\n        }\r\n        if (elementConfig.height !== undefined) {\r\n          elementHeight = typeof elementConfig.height === 'string'\r\n            ? toPixels(elementConfig.height, unitContext, 'height')\r\n            : elementConfig.height;\r\n          elementConfig.height = elementHeight;\r\n        }\r\n        \r\n        // 获取元素的 anchor（默认 [0.5, 0.5]），保持不变\r\n        // 元素的位置（x, y）是 anchor 点的位置，不是左上角位置\r\n        // render 方法中的 calculatePosition 会根据 anchor 和元素尺寸计算出左上角位置\r\n        \r\n        // 计算元素的绝对位置（组件左上角 + 元素 anchor 点相对位置）\r\n        // elementRelativeX 和 elementRelativeY 是 anchor 点在组件中的位置\r\n        elementConfig.x = componentLeft + elementRelativeX;\r\n        elementConfig.y = componentTop + elementRelativeY;\r\n        \r\n        // 保持元素的 anchor 不变（默认 [0.5, 0.5]）\r\n        // render 时会根据 anchor 和元素尺寸自动计算左上角位置\r\n        \r\n        // 转换字体大小（使用组件的尺寸作为单位上下文）\r\n        if (elementConfig.fontSize !== undefined) {\r\n          elementConfig.fontSize = typeof elementConfig.fontSize === 'string'\r\n            ? toFontSizePixels(elementConfig.fontSize, unitContext)\r\n            : elementConfig.fontSize;\r\n        }\r\n        \r\n        // 转换圆形半径（使用组件的尺寸作为单位上下文）\r\n        if (elementConfig.radius !== undefined) {\r\n          elementConfig.radius = typeof elementConfig.radius === 'string'\r\n            ? toPixels(elementConfig.radius, unitContext, 'width') // 半径通常基于宽度\r\n            : elementConfig.radius;\r\n        }\r\n        \r\n        // 转换描边宽度（使用组件的尺寸作为单位上下文）\r\n        if (elementConfig.strokeWidth !== undefined) {\r\n          elementConfig.strokeWidth = typeof elementConfig.strokeWidth === 'string'\r\n            ? toPixels(elementConfig.strokeWidth, unitContext, 'width')\r\n            : elementConfig.strokeWidth;\r\n        }\r\n        \r\n        // 转换元素的时间（从相对时间转换为绝对时间）\r\n        // 元素的时间是相对于组件的，需要转换为绝对时间\r\n        const elementRelativeStartTime = element.startTime !== undefined ? element.startTime : 0;\r\n        elementConfig.startTime = componentAbsoluteStartTime + elementRelativeStartTime;\r\n        \r\n        // 保持其他属性\r\n        if (element.duration !== undefined) {\r\n          elementConfig.duration = element.duration;\r\n          // 如果元素有 duration，计算 endTime\r\n          elementConfig.endTime = elementConfig.startTime + element.duration;\r\n        } else if (element.endTime !== undefined && element.endTime !== Infinity) {\r\n          // 如果元素有 endTime（相对于组件的），转换为绝对时间\r\n          const elementRelativeEndTime = element.endTime;\r\n          elementConfig.endTime = componentAbsoluteStartTime + (elementRelativeEndTime - elementRelativeStartTime);\r\n        } else {\r\n          // 如果元素没有 duration 和 endTime，使用组件的 duration\r\n          elementConfig.duration = this.duration - elementRelativeStartTime;\r\n          elementConfig.endTime = componentAbsoluteStartTime + this.duration;\r\n        }\r\n        \r\n        if (elementConfig.zIndex !== undefined) {\r\n          elementConfig.zIndex = (this.zIndex - 1) + elementConfig.zIndex;\r\n        } else {\r\n          elementConfig.zIndex = (this.zIndex - 1);\r\n        }\r\n        \r\n        // 合并 opacity（组件的 opacity * 元素的 opacity）\r\n        if (elementConfig.opacity !== undefined) {\r\n          elementConfig.opacity = this.opacity * elementConfig.opacity;\r\n        } else {\r\n          elementConfig.opacity = this.opacity;\r\n        }\r\n        \r\n        // 合并 visible（组件和元素都必须可见）\r\n        if (element.visible !== undefined) {\r\n          elementConfig.visible = this.visible && element.visible;\r\n        } else {\r\n          elementConfig.visible = this.visible;\r\n        }\r\n        \r\n        // 复制其他属性\r\n        for (const key in element.config) {\r\n          if (!['x', 'y', 'startTime', 'endTime', 'zIndex', 'opacity', 'visible'].includes(key)) {\r\n            if (elementConfig[key] === undefined) {\r\n              elementConfig[key] = element.config[key];\r\n            }\r\n          }\r\n        }\r\n        \r\n        // 如果元素有直接属性（不在 config 中），也需要复制\r\n        if (element.visible !== undefined && elementConfig.visible === undefined) {\r\n          elementConfig.visible = this.visible && element.visible;\r\n        }\r\n        \r\n        // 复制动画\r\n        if (element.animations && element.animations.length > 0) {\r\n          elementConfig.animations = element.animations;\r\n        }\r\n        \r\n        // 复制回调函数\r\n        if (element.onFrame) {\r\n          elementConfig.onFrame = element.onFrame;\r\n        }\r\n        if (element.onRender) {\r\n          elementConfig.onRender = element.onRender;\r\n        }\r\n        if (element.onLoaded) {\r\n          elementConfig.onLoaded = element.onLoaded;\r\n        }\r\n        \r\n        // 创建新元素实例\r\n        let newElement;\r\n        switch (element.type) {\r\n          case 'text':\r\n            newElement = new TextElement(elementConfig);\r\n            break;\r\n          case 'image':\r\n            newElement = new ImageElement(elementConfig);\r\n            break;\r\n          case 'video':\r\n            newElement = new VideoElement(elementConfig);\r\n            break;\r\n          case 'rect':\r\n            newElement = new RectElement(elementConfig);\r\n            break;\r\n          case 'circle':\r\n            newElement = new CircleElement(elementConfig);\r\n            break;\r\n          case 'path':\r\n            newElement = new PathElement(elementConfig);\r\n            break;\r\n          case 'svg':\r\n            newElement = new SVGElement(elementConfig);\r\n            break;\r\n          case 'json':\r\n            newElement = new JSONElement(elementConfig);\r\n            break;\r\n          case 'audio':\r\n            newElement = new AudioElement(elementConfig);\r\n            break;\r\n          case 'subtitle':\r\n            newElement = new SubtitleElement(elementConfig);\r\n            break;\r\n          case 'oscilloscope':\r\n            newElement = new OscilloscopeElement(elementConfig);\r\n            break;\r\n          case 'code':\r\n            newElement = new CodeElement(elementConfig);\r\n            break;\r\n          case 'echarts':\r\n            newElement = new EChartsElement(elementConfig);\r\n            break;\r\n          default:\r\n            console.warn(`[Component] 未知的元素类型: ${element.type}`);\r\n            continue;\r\n        }\r\n        \r\n        elementInstances.push(newElement);\r\n      }\r\n    }\r\n\r\n    return elementInstances;\r\n  }\r\n\r\n\r\n  /**\r\n   * 销毁组件\r\n   */\r\n  destroy() {\r\n    for (const { element } of this.elements) {\r\n      if (element.destroy) {\r\n        element.destroy();\r\n      }\r\n    }\r\n    this.elements = [];\r\n    this.backgroundLayer = null;\r\n    this.parent = null;\r\n  }\r\n}\r\n\r\n"],"names":["TextElement","ImageElement","VideoElement","RectElement","CircleElement","PathElement","SVGElement","JSONElement","AudioElement","SubtitleElement","OscilloscopeElement","CodeElement","EChartsElement","toPixels","toFontSizePixels"],"mappings":"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"}