{"version":3,"file":"EChartsElement.cjs","sources":["../../../src/elements/EChartsElement.js"],"sourcesContent":["import { BaseElement } from './BaseElement.js';\nimport { deepMerge } from '../utils/helpers.js';\nimport { ElementType } from '../types/enums.js';\nimport paper from '@chnak/paper';\nimport { createCanvas, loadImage } from '@napi-rs/canvas';\nimport fs from 'fs';\nimport path from 'path';\nimport * as ECharts from 'echarts';\nconst echartsPolyfill = () => {\n  ECharts.Model.prototype.isAnimationEnabled = () => true;\n  ECharts.SeriesModel.prototype.isAnimationEnabled = () => true;\n  //echarts.PictorialBarView.prototype.isAnimationEnabled = () => true;\n};\nechartsPolyfill();\nexport class EChartsElement extends BaseElement {\n  constructor(config = {}) {\n    super(config);\n    this.type = 'echarts';\n    this.config = deepMerge({}, { option: {}, renderer: 'canvas', theme: null }, config);\n    this.option = this.config.option || {};\n    this.theme = this.config.theme || null;\n    this.backgroundColor = this.config.backgroundColor || this.config.bgcolor || undefined;\n    this._canvas = null;\n    this._echarts = null;\n    this._ready = false;\n    this._firstFrameSaved = false;\n    this._firstFrameSaved = false;\n  }\n\n  async initialize() {\n    await super.initialize();\n    // 初始使用最小画布（实际尺寸由 render 时根据上下文计算），防止 config 中使用百分比导致 Number() 解析失败\n    const w = 1;\n    const h = 1;\n    this._canvas = paper.createCanvas(w, h);\n    this._echarts = ECharts.init(this._canvas, this.theme, { renderer: this.config.renderer, devicePixelRatio: 1, width: w, height: h });\n    // 先做一次基础 setOption，后续在 render 中当尺寸确定后会重新 apply\n    try {\n      this._echarts.setOption({ animation: true, ...this.option, backgroundColor: this.backgroundColor }, true);\n    } catch (e) {\n      // 某些 option 在小画布上可能出错，忽略安全降级\n    }\n    \n  }\n\n\n  isInitialized() {\n    return !!this._ready;\n  }\n\n  echartsUpdate(chart, time, delta) {\n    const animation = chart._zr.animation;\n    if (animation._running && !animation._paused) {\n      animation.update(false, time, delta);\n    }\n\n  }\n\n  fixZrender(chart) {\n    const animation = chart._zr.animation;\n    //console.log(animation)\n    animation._startLoop = () => (animation._running = true);\n    animation.update = function(notTriggerFrameAndStageUpdate, time, delta) {\n      let clip = this._head;\n      //console.log(this)\n      while (clip) {\n        const nextClip = clip.next;\n        let finished = clip.onframe(time, delta);\n        if (finished) {\n          clip.ondestroy && clip.ondestroy();\n          this.removeClip(clip);\n          clip = nextClip;\n        } else {\n          clip = nextClip;\n        }\n      }\n      \n      if (!notTriggerFrameAndStageUpdate) {\n        //clip.onframe(delta);\n        this.trigger('frame', delta);\n        this.stage.update && this.stage.update();\n      }\n    };\n  }\n\n  async render(layer, time, paperInstance = null) {\n    if (!this.visible) return null;\n    if (!this.isActiveAtTime(time)) return null;\n    const { paper: p, project } = this.getPaperInstance(paperInstance);\n    const viewSize = project?.view?.viewSize || { width: 1920, height: 1080 };\n    const context = { width: viewSize.width, height: viewSize.height };\n    \n    const state = this.getStateAtTime(time, context);\n    const size = this.convertSize(state.width, state.height, context);\n    const width = size.width || viewSize.width;\n    const height = size.height || viewSize.height;\n    // 目标像素尺寸（向上取整至少为 1）\n    const targetW = Math.max(1, Math.round(width));\n    const targetH = Math.max(1, Math.round(height));\n    // 如果画布或 chart 尺寸与目标不一致，则重建 canvas 与 echarts 实例（确保百分比尺寸生效）\n    if (!this._canvas || this._canvas.width !== targetW || this._canvas.height !== targetH) {\n      try {\n        if (this._echarts && typeof this._echarts.dispose === 'function') {\n          this._echarts.dispose();\n        }\n      } catch (_) {}\n      this._canvas = paper.createCanvas(targetW, targetH);\n      this._echarts = ECharts.init(this._canvas, this.theme, { renderer: this.config.renderer, devicePixelRatio: 1, width: targetW, height: targetH });\n      try {\n        this._echarts.setOption({ animation: true, ...this.option, backgroundColor: this.backgroundColor }, true);\n      } catch (e) {\n        // 忽略初始化时可能的错误，render 时继续尝试\n      }\n    }\n    if (!this._ready) {\n      this.fixZrender(this._echarts);\n      this._ready = true;\n    }\n    const rel = time - this.startTime                // 相对秒\n    const relClamped = Math.max(0, Math.min(rel, this.duration || (this.endTime - this.startTime)));\n    const ts = Math.max(0, Math.floor(relClamped * 1000));\n    const delta = Math.max(0, ts - (this._lastTimestamp || ts));\n    this.echartsUpdate(this._echarts, relClamped, delta);\n    \n    \n    const raster = new p.Raster(this._canvas);\n    const srcW = this._canvas.width || width;\n    const srcH = this._canvas.height || height;\n    const { x, y } = this.calculatePosition(state, context, { width, height });\n    raster.position = new p.Point(x, y);\n    if (srcW > 0 && srcH > 0) {\n      const scaleX = width / srcW;\n      const scaleY = height / srcH;\n      raster.scale(scaleX, scaleY, raster.position);\n    }\n    raster.opacity = state.opacity !== undefined ? state.opacity : 1;\n    this.applyTransform(raster, state, { applyPosition: false, paperInstance: p });\n    if (layer) layer.addChild(raster);\n    this._paperItem = raster;\n    this._lastTimestamp = ts;\n    return raster;\n  }\n\n  destroy() {\n    try { if (this._echarts && typeof this._echarts.dispose === 'function') this._echarts.dispose(); } catch (_) {}\n    this._echarts = null;\n    this._canvas = null;\n    super.destroy();\n  }\n}\n"],"names":["ECharts","BaseElement","deepMerge"],"mappings":"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"}