{"version":3,"file":"HTMLElement.cjs","sources":["../../../src/elements/HTMLElement.js"],"sourcesContent":["/**\n * HTMLElement - 使用 Takumi 渲染任意 HTML/CSS 为 FKbuilder 元素\n *\n * 支持:\n * - html 字符串输入\n * - node tree 对象输入(直接 Takumi 节点树)\n * - x/y/width/height/opacity/rotation 基础变换\n * - FKbuilder 预设动画 (fadeIn, slideInLeft ...)\n * - 节点内 CSS @keyframes 动画(通过 timeMs 注入)\n * - 自定义字体注册\n * - 自定义 stylesheets\n */\nimport { BaseElement } from './BaseElement.js';\nimport { ElementType } from '../types/enums.js';\nimport { DEFAULT_ELEMENT_CONFIG } from '../types/constants.js';\nimport { deepMerge } from '../utils/helpers.js';\nimport { toPixels } from '../utils/unit-converter.js';\nimport { renderHtmlFrame } from '../utils/takumi-renderer.js';\nimport { getTailwindCss } from '../utils/tailwind.js';\nimport paper from '@chnak/paper';\nimport fs from 'fs';\nimport path from 'path';\nimport os from 'os';\n\n/**\n * 获取默认字体配置（跨平台）\n * 加载顺序:\n *   1. 微软雅黑（中文首选，所有平台都有对应字体）\n *   2. 系统其他中文字体（备份）\n *   3. 系统 Emoji 字体（让 emoji 渲染为彩色图形，如 Segoe UI Emoji / Apple Color Emoji）\n *   4. 系统英文字体（Latin 字符）\n */\nfunction getDefaultFonts() {\n  const fonts = [];\n\n  if (process.platform === 'win32') {\n    // Windows\n    const winFonts = [\n      // === 微软雅黑（中文首选） ===\n      { path: 'C:/Windows/Fonts/msyh.ttc', family: 'Microsoft YaHei' },\n      { path: 'C:/Windows/Fonts/msyhbd.ttc', family: 'Microsoft YaHei', weight: 'bold' },\n      { path: 'C:/Windows/Fonts/msyhl.ttc', family: 'Microsoft YaHei Light' },\n\n      // === 其他中文字体（备份） ===\n      { path: 'C:/Windows/Fonts/simhei.ttf', family: 'SimHei' },\n      { path: 'C:/Windows/Fonts/simsun.ttc', family: 'SimSun' },\n      { path: 'C:/Windows/Fonts/simkai.ttf', family: 'KaiTi' },\n      { path: 'C:/Windows/Fonts/simfang.ttf', family: 'FangSong' },\n\n      // === Emoji 字体（让 🚀🎨 等彩色显示） ===\n      { path: 'C:/Windows/Fonts/seguiemj.ttf', family: 'Segoe UI Emoji' },\n      { path: 'C:/Windows/Fonts/segoeprb.ttf', family: 'Segoe Print' },\n      { path: 'C:/Windows/Fonts/segoesc.ttf', family: 'Segoe Script' },\n\n      // === 英文字体 ===\n      { path: 'C:/Windows/Fonts/segoeui.ttf', family: 'Segoe UI' },\n      { path: 'C:/Windows/Fonts/arial.ttf', family: 'Arial' },\n    ];\n    for (const font of winFonts) {\n      try {\n        if (fs.existsSync(font.path)) {\n          fonts.push(font);\n        }\n      } catch (e) {}\n    }\n  } else if (process.platform === 'darwin') {\n    // macOS\n    const macFonts = [\n      // === 苹方（中文首选） ===\n      { path: '/System/Library/Fonts/PingFang.ttc', family: 'PingFang SC' },\n      { path: '/Library/Fonts/PingFang.ttc', family: 'PingFang SC' },\n\n      // === 华文黑体（备份） ===\n      { path: '/System/Library/Fonts/STHeiti Light.ttc', family: 'STHeiti' },\n      { path: '/System/Library/Fonts/STHeiti Medium.ttc', family: 'STHeiti' },\n      { path: '/Library/Fonts/Songti.ttc', family: 'Songti SC' },\n\n      // === Apple Color Emoji（让 🍎🎉 等彩色显示） ===\n      { path: '/System/Library/Fonts/Apple Color Emoji.ttc', family: 'Apple Color Emoji' },\n\n      // === 英文字体 ===\n      { path: '/System/Library/Fonts/Helvetica.ttc', family: 'Helvetica' },\n      { path: '/Library/Fonts/Arial.ttf', family: 'Arial' },\n    ];\n    for (const font of macFonts) {\n      try {\n        if (fs.existsSync(font.path)) {\n          fonts.push(font);\n        }\n      } catch (e) {}\n    }\n  } else {\n    // Linux\n    const linuxFonts = [\n      // === Noto Sans CJK（中文首选） ===\n      { path: '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc', family: 'Noto Sans CJK SC' },\n      { path: '/usr/share/fonts/opentype/noto/NotoSansCJK-Bold.ttc', family: 'Noto Sans CJK SC', weight: 'bold' },\n      { path: '/usr/share/fonts/truetype/wqy/wqy-microhei.ttc', family: 'WenQuanYi Micro Hei' },\n      { path: '/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc', family: 'WenQuanYi Zen Hei' },\n      { path: '/usr/share/fonts/truetype/arphic/uming.ttc', family: 'AR PL UMing CN' },\n\n      // === Noto Color Emoji（让 🎨🚀 等彩色显示） ===\n      { path: '/usr/share/fonts/truetype/noto/NotoColorEmoji.ttf', family: 'Noto Color Emoji' },\n\n      // === 英文字体 ===\n      { path: '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf', family: 'DejaVu Sans' },\n      { path: '/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf', family: 'Liberation Sans' },\n    ];\n    for (const font of linuxFonts) {\n      try {\n        if (fs.existsSync(font.path)) {\n          fonts.push(font);\n        }\n      } catch (e) {}\n    }\n  }\n\n  return fonts.length > 0 ? fonts : null;\n}\n\n/* ============================================================================\n *  keyframes 选项预处理:自动应用 animation 属性\n *\n *  用户的几种格式:\n *    1. Rich:  { '.badge': { duration:'1s', easing:'ease-out', iteration:'infinite',\n *                            keyframes:{ '0%': {...}, '50%': {...} } } }\n *    2. 裸:    { '.badge': { '0%': {...}, '50%': {...} } }\n *    3. 数组:  [{ name:'foo', keyframes:[{ offsets, declarations }] }]\n *\n *  处理:\n *    - 数组:不动,原样传给 Takumi\n *    - 裸:   提取 keyframes rule,自动生成 anim 名字,注入 animation CSS\n *    - Rich: 同上,但用用户指定的 duration/easing/iteration\n *\n *  返回 { kf, css }:\n *    - kf: 给 Takumi 的 keyframes(Map, key 是自动生成的名字)\n *    - css: 要注入到 HTML 顶部的 <style> 内容\n * ========================================================================== */\nfunction preprocessKeyframes(kf) {\n  if (!kf) return { kf: null, css: '' };\n  if (Array.isArray(kf)) return { kf, css: '' }; // 数组格式不动\n\n  const generated = {};   // 给 Takumi 的 keyframes\n  const styleRules = [];  // 要注入的 CSS 规则\n\n  let counter = 0;\n  for (const [selector, value] of Object.entries(kf)) {\n    if (!value || typeof value !== 'object') continue;\n\n    // 区分 rich 格式(有 duration 或 keyframes 字段)和裸格式\n    const isRich = ('duration' in value) || ('easing' in value) ||\n                   ('iteration' in value) || ('keyframes' in value);\n    let kfRule;\n    let animation;\n    if (isRich) {\n      kfRule = value.keyframes || {};\n      animation = {\n        duration: value.duration || '1s',\n        easing: value.easing || 'ease-in-out',\n        iteration: value.iteration || 'infinite',\n        delay: value.delay || '0s',\n        direction: value.direction || 'normal',\n        fill: value.fill || 'none',\n      };\n    } else {\n      kfRule = value;\n      animation = { duration: '1s', easing: 'ease-in-out',\n                    iteration: 'infinite', delay: '0s',\n                    direction: 'normal', fill: 'none' };\n    }\n\n    // 自动生成 animation 名(确定性,基于 selector)\n    const safeName = 'fk-anim-' + selector.replace(/[.#]/g, '') + '-' + (counter++);\n    generated[safeName] = kfRule;\n\n    const animStr = `${safeName} ${animation.duration} ${animation.easing} ${animation.iteration} ${animation.delay} ${animation.direction} ${animation.fill}`\n      .replace(/\\s+/g, ' ').trim();\n    styleRules.push(`${selector} { animation: ${animStr}; }`);\n  }\n\n  return {\n    kf: Object.keys(generated).length ? generated : null,\n    css: styleRules.join('\\n'),\n  };\n}\n\n/* ============================================================================\n *  默认 font-family 自动注入\n *  - 仅作用于 html 字符串输入(node tree 不处理)\n *  - 在 HTML 顶部注入一条 body 规则,利用继承性覆盖整页\n *  - 选择器只命中 body(特异性 0,0,1),容易被用户的元素/类选择器覆盖,\n *    不会破坏 Tailwind / 自定义 CSS\n *  - 字体栈按平台优先级:Win 雅黑 → macOS 苹方 → Linux Noto CJK → Emoji → sans-serif\n * ========================================================================== */\n\nconst DEFAULT_FONT_FAMILY_STACK =\n  \"'Microsoft YaHei', 'PingFang SC', 'Noto Sans CJK SC', \" +\n  \"'Segoe UI Emoji', 'Apple Color Emoji', 'Noto Color Emoji', sans-serif\";\n\nconst DEFAULT_FONT_STYLE_BLOCK =\n  `<style>body { font-family: ${DEFAULT_FONT_FAMILY_STACK}; }</style>`;\n\n/**\n * 启发式检测:HTML 字符串中是否已经声明了 font-family\n * 简化策略:只查 `font-family:` 字面模式\n * - 误判(命中注释 / 字符串字面量)→ 不注入,这是更安全的方向\n * - 漏判(仅在 JS 字符串中提到、未生效)→ 会注入,可用 autoDefaultFont:false 关闭\n */\nfunction htmlDeclaresFontFamily(html) {\n  if (!html || typeof html !== 'string') return false;\n  return /font-family\\s*:/i.test(html);\n}\n\n/**\n * 在 HTML 顶部注入默认 font-family 声明(若未声明)\n * 返回新字符串,不修改入参\n */\nfunction injectDefaultFontFamily(html) {\n  if (htmlDeclaresFontFamily(html)) return html;\n  return DEFAULT_FONT_STYLE_BLOCK + '\\n' + html;\n}\n\nexport class HTMLElement extends BaseElement {\n  constructor(config = {}) {\n    super(config);\n    this.type = ElementType.HTML;\n\n    this.config = deepMerge({}, DEFAULT_ELEMENT_CONFIG, config);\n\n    // 输入源(三选一)\n    this.html = config.html || null;\n    this.node = config.node || null;\n    this.jsx = config.jsx || null; // 仅作为占位,实际渲染时建议传入 html 或 node\n\n    // 字体 / 样式表\n    // 如果没有传入 fonts，自动添加默认字体支持（微软雅黑中文 + Emoji + 英文）\n    if (config.fonts && Array.isArray(config.fonts) && config.fonts.length > 0) {\n      this.fonts = config.fonts;\n    } else {\n      this.fonts = getDefaultFonts();\n    }\n    this.stylesheets = config.stylesheets || null;\n\n    // 自动注入默认 font-family(在 HTML 顶部插 body 规则)\n    // - 默认 true:让\"默认字体就是微软雅黑\"开箱即用\n    // - 设为 false:保持原 HTML 不动,适合完全自定义字体的场景\n    this.autoDefaultFont = config.autoDefaultFont !== false;\n\n    // Tailwind CSS 提供器\n    // - false / null:不启用(默认)\n    // - true:用打包的通用 Tailwind CSS(零配置,158KB)\n    // - { css: '...' }:用传入的 CSS 字符串(自己预编译的)\n    // - { input: '/path/to.css' }:读本地 CSS 文件(自己预编译的)\n    this.tailwind = config.tailwind || null;\n\n    // 节点内 CSS 动画起始偏移(秒)\n    this.timeOffset = config.timeOffset !== undefined ? config.timeOffset : 0;\n\n    // 自定义 keyframes 对象(传给 Takumi)\n    // 支持两种格式:\n    //   1. Rich 格式(推荐): { '.selector': { duration, easing, iteration, delay, direction, fill, keyframes } }\n    //      → 自动注入 animation 属性 + @keyframes 定义\n    //   2. 裸格式:       { '.selector': { '0%': {...}, '50%': {...} } }\n    //      → 只注入 @keyframes 定义(用户需自己写 animation)\n    //   3. 数组格式:     [{ name: 'foo', keyframes: [{ offsets, declarations }] }]\n    //      → 原样传 Takumi(向后兼容)\n    this.keyframes = config.keyframes || null;\n\n    // devicePixelRatio 缩放\n    this.devicePixelRatio = config.devicePixelRatio || undefined;\n\n    // 当前帧缓存(避免同帧重复渲染)\n    this._lastFrameKey = null;\n    this._lastRenderErr = null; // 渲染错误去重签名\n    this._canvas = null;\n    this._paperItem = null;\n  }\n\n  /**\n   * 元素初始化\n   * 这里可以预解析 HTML 字符串(轻量,不预渲染)\n   */\n  async initialize() {\n    await super.initialize();\n    if (!this.html && !this.node && !this.jsx) {\n      console.warn('[HTMLElement] 必须提供 html、node 或 jsx 之一');\n    }\n  }\n\n  /**\n   * 检查当前帧是否需要重新渲染\n   * 注意:由于 CSS @keyframes 动画内容存储在 HTML 字符串中,\n   * 我们无法检测其变化,因此始终返回 true 强制每帧重渲染,\n   * 确保 CSS 动画(通过 timeMs 驱动)能正确更新。\n   */\n  _shouldRerender(time) {\n    return true;\n  }\n\n  /**\n   * 渲染一帧\n   * @param {object} layer - Paper.js layer 或 null\n   * @param {number} time  - 当前时间(秒,场景时间轴)\n   * @param {object} paperInstance\n   * @returns {Promise<object|null>}\n   */\n  async render(layer, time, paperInstance = null) {\n    if (!this.visible) return null;\n    if (!this.isActiveAtTime(time)) return null;\n    if (!this.html && !this.node && !this.jsx) return null;\n\n    const { paper: p, project } = this.getPaperInstance(paperInstance);\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\n    // 1) 计算目标位置 / 尺寸\n    const state = this.getStateAtTime(time, context);\n    const size = this.convertSize(state.width || 800, state.height || 600, context);\n    const width = Math.max(1, Math.round(size.width));\n    const height = Math.max(1, Math.round(size.height));\n\n    // 2) 计算 timeMs(传给 Takumi 用)\n    const relTime = Math.max(0, time - this.startTime + this.timeOffset);\n    const timeMs = Math.floor(relTime * 1000);\n\n    // 3) 缓存判断\n    if (!this._shouldRerender(time)) {\n      if (this._paperItem) {\n        this._applyPaperTransform(this._paperItem, state, context, width, height, p);\n        return this._paperItem;\n      }\n    }\n\n    // 4) 解析输入\n    let renderInput = { width, height, timeMs };\n    if (this.html) {\n      let effectiveHtml = this.html;\n\n      // 4a) Tailwind CSS 注入(若开启)\n      //   - 直接读 CSS(同步),无编译开销\n      //   - 失败不阻塞:打 warning,继续渲染\n      if (this.tailwind) {\n        const twConfig = this.tailwind === true ? {} : this.tailwind;\n        try {\n          const tailwindCss = getTailwindCss(twConfig);\n          effectiveHtml = `<style>${tailwindCss}</style>\\n` + effectiveHtml;\n        } catch (e) {\n          console.warn(`[HTMLElement] Tailwind CSS 加载失败: ${e.message}`);\n        }\n      }\n\n      // 4b) 默认 font-family 注入\n      effectiveHtml = this.autoDefaultFont\n        ? injectDefaultFontFamily(effectiveHtml)\n        : effectiveHtml;\n\n      renderInput.html = effectiveHtml;\n    } else if (this.node) {\n      renderInput.node = this.node;\n    } else if (this.jsx) {\n      // JSX 实际是 React.createElement 调用的语法糖,无法直接解析。\n      // 建议用户传入 html 字符串或 node tree;此处仅给出提示。\n      console.warn('[HTMLElement] jsx 字段无法在 Node 中直接解析,请改用 html 字符串或 node tree');\n      return null;\n    }\n    if (this.stylesheets) renderInput.stylesheets = this.stylesheets;\n    if (this.fonts) renderInput.fonts = this.fonts;\n\n    // 4c) keyframes 选项预处理(自动应用 animation 属性)\n    if (this.keyframes) {\n      const { kf, css } = preprocessKeyframes(this.keyframes);\n      if (kf) renderInput.keyframes = kf;\n      if (css && renderInput.html) {\n        renderInput.html = `<style>${css}</style>\\n` + renderInput.html;\n      }\n    }\n\n    if (this.devicePixelRatio) renderInput.devicePixelRatio = this.devicePixelRatio;\n\n    // 5) 调 Takumi 渲染\n    let rgba;\n    try {\n      rgba = await renderHtmlFrame(renderInput);\n    } catch (e) {\n      // 去重:同一个错误(按 message 前 80 字符)每个元素实例只警告一次\n      // 30fps × N 秒 = 每秒 30 行噪音,所以要做缓存\n      const sig = (e.message || '').slice(0, 80);\n      if (this._lastRenderErr !== sig) {\n        this._lastRenderErr = sig;\n        console.error('[HTMLElement] Takumi 渲染失败:', e.message,\n          '\\n  (后续相同错误将静默,渲染占位框代替)');\n      }\n      return this._renderPlaceholder(layer, state, context, width, height, p, e.message);\n    }\n\n    // 6) 把 RGBA buffer 贴到 canvas\n    //    注意:必须用 canvas 作为 Raster 源 — Paper.js 的 Raster(imageData)\n    //    会报告 loaded=true 但实际上不会绘制到主画布。这是 Paper.js 的限制。\n    if (!this._canvas || this._canvas.width !== width || this._canvas.height !== height) {\n      this._canvas = paper.createCanvas(width, height);\n    }\n    const ctx = this._canvas.getContext('2d');\n    const imageData = ctx.createImageData(width, height);\n    imageData.data.set(rgba);\n    ctx.putImageData(imageData, 0, 0);\n\n    // DEBUG: Check rgba content\n    let colorful = 0;\n    for (let i = 0; i < rgba.length; i += 4) {\n      if (rgba[i] > 50 || rgba[i+1] > 50 || rgba[i+2] > 50) colorful++;\n    }\n    //console.log('[HTMLElement] rgba.length=' + rgba.length + ' colorful=' + colorful);\n    // Check _canvas\n    const canvasData = ctx.getImageData(0, 0, width, height);\n    let ccolor = 0;\n    for (let i = 0; i < canvasData.data.length; i += 4) {\n      if (canvasData.data[i] > 50 || canvasData.data[i+1] > 50 || canvasData.data[i+2] > 50) ccolor++;\n    }\n    //console.log('[HTMLElement] _canvas after putImageData colorful=' + ccolor);\n\n    // 7) 销毁旧 Raster(避免叠层)\n    if (this._paperItem) {\n      try { this._paperItem.remove(); } catch (_) {}\n      this._paperItem = null;\n    }\n\n    // 8) 创建 Raster(从 canvas 源,Paper.js 异步加载——需 await load)\n    const raster = new p.Raster(this._canvas);\n    this._paperItem = raster;\n    this._applyPaperTransform(raster, state, context, width, height, p);\n\n    // 9) 同步等待 Raster 真正加载,否则 view.draw() 抓不到像素\n    if (!raster.loaded) {\n      await new Promise((resolve) => {\n        raster.once('load', resolve);\n        // 兜底 100ms\n        setTimeout(resolve, 100);\n      });\n    }\n\n    if (layer) {\n      layer.addChild(raster);\n    } else if (project && project.activeLayer) {\n      project.activeLayer.addChild(raster);\n    }\n\n    this._lastFrameKey = Math.floor(time * 20) / 20;\n    return raster;\n  }\n\n  /**\n   * 应用 Paper.js 变换 / 位置 / 不透明度\n   * 注意:calculatePosition 返回容器左上角,Paper.js Raster.position 是中心点\n   */\n  _applyPaperTransform(raster, state, context, width, height, p) {\n    const { x, y } = this.calculatePosition(state, context, { elementWidth: width, elementHeight: height });\n    // Raster.position 是中心点 → 偏移 width/2, height/2\n    raster.position = new p.Point(x + width / 2, y + height / 2);\n    raster.opacity = state.opacity !== undefined ? state.opacity : 1;\n    this.applyTransform(raster, state, { applyPosition: false, paperInstance: p });\n  }\n\n  /**\n   * 降级渲染:渲染失败时显示一个红色占位框\n   */\n  _renderPlaceholder(layer, state, context, width, height, p, msg) {\n    const { x, y } = this.calculatePosition(state, context, { elementWidth: width, elementHeight: height });\n    const rect = new p.Path.Rectangle({\n      point: [x, y],\n      size: [width, height],\n      fillColor: new p.Color(0.9, 0.3, 0.3, 0.7),\n      strokeColor: new p.Color(0.6, 0, 0),\n      strokeWidth: 2,\n    });\n    const text = new p.PointText({\n      point: [x + 12, y + 28],\n      content: `HTML render failed: ${msg || ''}`.slice(0, 80),\n      fillColor: 'white',\n      fontSize: 16,\n      fontFamily: 'sans-serif',\n      parent: layer || p.project.activeLayer,\n    });\n    if (layer) layer.addChild(rect);\n    return rect;\n  }\n\n  destroy() {\n    if (this._paperItem) {\n      try { this._paperItem.remove(); } catch (_) {}\n      this._paperItem = null;\n    }\n    this._canvas = null;\n    super.destroy();\n  }\n}\n"],"names":["BaseElement","ElementType","deepMerge","DEFAULT_ELEMENT_CONFIG","getTailwindCss","renderHtmlFrame"],"mappings":"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"}