{"version":3,"file":"CodeElement.cjs","sources":["../../../src/elements/CodeElement.js"],"sourcesContent":["import { BaseElement } from './BaseElement.js';\nimport { DEFAULT_TEXT_CONFIG } from '../types/constants.js';\nimport { deepMerge } from '../utils/helpers.js';\nimport { toPixels } from '../utils/unit-converter.js';\nimport {createCanvas} from '@napi-rs/canvas'\nimport paper from '@chnak/paper';\n// 内置代码主题（从 CodeBlock 复制过来，便于 CodeElement 独立使用）\nconst CODE_THEMES = {\n  dark: {\n    background: '#1e1e1e',\n    lineNumber: '#666666',\n    lineNumberBackground: '#2d2d2d',\n    keyword: '#ff6b9d',\n    string: '#00ff88',\n    comment: '#888888',\n    number: '#ffd700',\n    operator: '#ffffff',\n    function: '#00d9ff',\n    identifier: '#ffffff',\n    text: '#ffffff',\n    border: '#00ff88',\n  },\n  light: {\n    background: '#ffffff',\n    lineNumber: '#999999',\n    lineNumberBackground: '#f5f5f5',\n    keyword: '#d73a49',\n    string: '#032f62',\n    comment: '#6a737d',\n    number: '#005cc5',\n    operator: '#24292e',\n    function: '#6f42c1',\n    identifier: '#24292e',\n    text: '#24292e',\n    border: '#e1e4e8',\n  },\n  monokai: {\n    background: '#272822',\n    lineNumber: '#90908a',\n    lineNumberBackground: '#3e3d32',\n    keyword: '#f92672',\n    string: '#e6db74',\n    comment: '#75715e',\n    number: '#ae81ff',\n    operator: '#f8f8f2',\n    function: '#a1efe4',\n    identifier: '#f8f8f2',\n    text: '#f8f8f2',\n    border: '#a1efe4',\n  },\n  dracula: {\n    background: '#282a36',\n    lineNumber: '#6272a4',\n    lineNumberBackground: '#21222c',\n    keyword: '#ff79c6',\n    string: '#f1fa8c',\n    comment: '#6272a4',\n    number: '#bd93f9',\n    operator: '#f8f8f2',\n    function: '#50fa7b',\n    identifier: '#f8f8f2',\n    text: '#f8f8f2',\n    border: '#50fa7b',\n  },\n};\n\n/**\n * 简化版语法高亮器（与 CodeBlock 保持一致的高亮规则）\n */\nclass SyntaxHighlighter {\n  constructor(language = 'javascript') {\n    this.language = language.toLowerCase();\n  }\n\n  getKeywords() {\n    const keywordMap = {\n      javascript: ['const','let','var','function','async','await','return','if','else','for','while','switch','case','try','catch','finally','throw','new','class','extends','import','export','from','as'],\n      python: ['def','class','if','elif','else','for','while','try','except','finally','with','as','import','from','return','yield'],\n      java: ['public','private','protected','static','final','class','interface','new','return','if','else','for','while','try','catch','finally']\n    };\n    return keywordMap[this.language] || keywordMap.javascript;\n  }\n\n  isNumber(str) { return /^[\\d.]+$/.test(str); }\n  isOperator(str) { return /^[+\\-*/%=<>!&|^~?:;,.]$/.test(str) || /^(==|!=|===|!==|<=|>=|&&|\\|\\||>>|<<|\\*\\*|=>)$/.test(str); }\n\n  tokenize(line) {\n    const tokens = [];\n    let current = '';\n    let inString = false;\n    let stringChar = null;\n\n    for (let i = 0; i < line.length; i++) {\n      const char = line[i];\n      const nextChar = line[i+1];\n\n      if ((char === '\"' || char === \"'\" || char === '`') && !inString) {\n        if (current) { tokens.push({ text: current, type: 'other' }); current = ''; }\n        inString = true; stringChar = char; current = char; continue;\n      }\n      if (inString && char === stringChar) { current += char; tokens.push({ text: current, type: 'string' }); current = ''; inString = false; stringChar = null; continue; }\n      if (inString) { current += char; continue; }\n\n      if ((char === '/' && nextChar === '/') || char === '#' || (char === '/' && nextChar === '*')) {\n        if (current) { tokens.push({ text: current, type: 'other' }); current = ''; }\n        tokens.push({ text: line.slice(i), type: 'comment' }); break;\n      }\n\n      if (char === ' ' || this.isOperator(char)) {\n        if (current) {\n          const trimmed = current.trim();\n          if (trimmed) {\n            let type = 'identifier';\n            const keywords = this.getKeywords();\n            if (keywords.includes(trimmed)) type = 'keyword';\n            else if (this.isNumber(trimmed)) type = 'number';\n            else if (/^[A-Z]/.test(trimmed)) type = 'function';\n            tokens.push({ text: trimmed, type });\n          }\n          current = '';\n        }\n        if (char === ' ') tokens.push({ text: ' ', type: 'space' }); else tokens.push({ text: char, type: 'operator' });\n      } else {\n        current += char;\n      }\n    }\n    if (current) {\n      const trimmed = current.trim();\n      if (trimmed) {\n        let type = 'identifier';\n        const keywords = this.getKeywords();\n        if (keywords.includes(trimmed)) type = 'keyword';\n        else if (this.isNumber(trimmed)) type = 'number';\n        else if (/^[A-Z]/.test(trimmed)) type = 'function';\n        tokens.push({ text: trimmed, type });\n      }\n    }\n    return tokens;\n  }\n\n  highlight(code) {\n    const lines = (code || '').split('\\n');\n    return lines.map(line => ({ line, tokens: this.tokenize(line) }));\n  }\n}\n\nexport class CodeElement extends BaseElement {\n  constructor(config = {}) {\n    const merged = deepMerge({}, DEFAULT_TEXT_CONFIG, config);\n    super(merged);\n    this.type = 'code';\n    this.config = merged;\n\n    this.code = this.config.code || '';\n    this.language = this.config.language || 'javascript';\n    this.theme = this.config.theme || 'dark';\n    this.showLineNumbers = this.config.showLineNumbers !== false;\n    this.padding = this.config.padding !== undefined ? this.config.padding : 20;\n    this.lineHeight = this.config.lineHeight || 1.6;\n    this.fontSize = this.config.fontSize || 20;\n    this.showBorder = this.config.showBorder !== false;\n    this.borderRadius = this.config.borderRadius || 8;\n    this.borderWidth = this.config.borderWidth !== undefined ? this.config.borderWidth : (this.showBorder ? 2 : 0);\n    this.bgcolor = this.config.bgcolor || null;\n    this.borderColor = this.config.borderColor || null;\n\n    this.split = this.config.split || null;\n    this.splitDelay = this.config.splitDelay || 0.1;\n    this.splitDuration = this.config.splitDuration || 0.3;\n    this.cursor = this.config.cursor !== false;\n    this.cursorWidth = this.config.cursorWidth || 2;\n    this.cursorColor = this.config.cursorColor || (this.theme === 'dark' ? '#ffffff' : '#000000');\n    this.cursorBlinkPeriod = this.config.cursorBlinkPeriod || 0.7;\n    this.cursorPaddingLeft = 8;\n    // this.cursorOffsetY = this.config.cursorOffsetY;\n    this.autoScroll = this.config.autoScroll !== undefined ? this.config.autoScroll : true;\n\n    this.highlighter = new SyntaxHighlighter(this.language);\n    this.highlightedLines = this.highlighter.highlight(this.code);\n    this.config.scrollPaddingBottom =  this.padding\n    \n    // 缓存用于宽度测量\n    this._widthCache = new Map();\n    this._cursorItem = null;\n  }\n\n  /**\n   * 使用 canvas 测量文本宽度\n   */\n  measureTextWidth(text, fontSize, fontFamily = 'PatuaOne') {\n    const cacheKey = `${text}|${fontSize}|${fontFamily}`;\n    if (this._widthCache.has(cacheKey)) {\n      return this._widthCache.get(cacheKey);\n    }\n\n    const canvas = createCanvas(1, 1);\n\n    const ctx = canvas.getContext('2d');\n    ctx.font = `${fontSize}px ${fontFamily}`;\n    const width = ctx.measureText(text).width;\n    \n    this._widthCache.set(cacheKey, width);\n    return width;\n  }\n\n  initialize() {\n    return Promise.resolve();\n  }\n\n  render(layer, time, paperInstance = null) {\n    if (!this.visible) return null;\n    const p = paperInstance ? paperInstance.paper : paper;\n\n    if (!this.isActiveAtTime(time)) return null;\n\n    const project = paperInstance ? paperInstance.project : (paper.project || null);\n    const viewSize = project && project.view && project.view.viewSize ? project.view.viewSize : { width: 1920, height: 1080 };\n    const context = { width: this.canvasWidth || viewSize.width, height: this.canvasHeight || viewSize.height, baseFontSize: 16 };\n\n    const state = this.getStateAtTime(time, context);\n    const fontSize = this.convertFontSize(state.fontSize || this.fontSize, context, 20);\n    const lineHeightPx = fontSize * this.lineHeight;\n\n    // 几何尺寸\n    const size = this.convertSize(\n      state.width !== undefined ? state.width : (this.config.width !== undefined ? this.config.width : context.width),\n      state.height !== undefined ? state.height : (this.config.height !== undefined ? this.config.height : context.height),\n      context\n    );\n    const elementWidth = size.width;\n    const elementHeight = size.height;\n\n    // 背景和边框（优先使用内置主题颜色，允许 state/config 覆盖）\n    const themeColors = (CODE_THEMES && CODE_THEMES[this.theme]) ? CODE_THEMES[this.theme] : CODE_THEMES.dark;\n    const fillColorFromTheme = themeColors && themeColors.background ? themeColors.background : (this.theme === 'light' ? '#ffffff' : '#071226');\n    const strokeColorFromTheme = themeColors && themeColors.border ? themeColors.border : (this.theme === 'light' ? '#e6e6e6' : '#2b2b2b');\n    const fillColor = state.bgcolor || this.bgcolor || fillColorFromTheme;\n    const strokeColor = state.borderColor || this.borderColor || strokeColorFromTheme;\n    const strokeWidth = state.borderWidth || this.borderWidth || 0;\n\n    // 计算元素左上角位置（考虑 anchor）\n    const pos = this.calculatePosition(state, context, { elementWidth, elementHeight });\n\n    // 在内容绘制前先绘制背景矩形（支持圆角）\n    let bgRect = null;\n    if (elementWidth > 0 && elementHeight > 0) {\n      const r = Math.min(this.borderRadius || 0, elementWidth / 2, elementHeight / 2);\n      if (r > 0) {\n        const path = new p.Path();\n        path.moveTo(new p.Point(pos.x + r, pos.y));\n        path.lineTo(new p.Point(pos.x + elementWidth - r, pos.y));\n        path.arcTo(new p.Point(pos.x + elementWidth, pos.y + r));\n        path.lineTo(new p.Point(pos.x + elementWidth, pos.y + elementHeight - r));\n        path.arcTo(new p.Point(pos.x + elementWidth - r, pos.y + elementHeight));\n        path.lineTo(new p.Point(pos.x + r, pos.y + elementHeight));\n        path.arcTo(new p.Point(pos.x, pos.y + elementHeight - r));\n        path.lineTo(new p.Point(pos.x, pos.y + r));\n        path.arcTo(new p.Point(pos.x + r, pos.y));\n        path.closePath();\n        bgRect = path;\n      } else {\n        bgRect = new p.Path.Rectangle({ rectangle: new p.Rectangle(pos.x, pos.y, elementWidth, elementHeight) });\n      }\n\n      if (bgRect) {\n        bgRect.fillColor = fillColor;\n        if (strokeWidth > 0 && strokeColor) {\n          bgRect.strokeColor = strokeColor;\n          bgRect.strokeWidth = strokeWidth;\n        }\n\n        // 应用动画/变换\n        this.applyTransform(bgRect, state, { pivot: new p.Point(pos.x + elementWidth/2, pos.y + elementHeight/2), paperInstance });\n        layer.addChild(bgRect);\n        this._callOnRender(time, bgRect, paperInstance);\n      }\n    }\n\n    // 上对齐：使用固定 padding（顶部缩进）\n    const paddingPx = this.padding;\n    const paddingBottomPx = paddingPx\n\n    const lineNumberWidth = this.showLineNumbers ? 50 : 0;\n    const contentStartX = pos.x + paddingPx + lineNumberWidth + 8;\n    const contentStartY = pos.y + paddingPx;\n\n    // token color map from CodeBlock theme\n    const tokenColorMap = {\n      keyword: themeColors.keyword || '#ff6b9d',\n      string: themeColors.string || '#00ff88',\n      comment: themeColors.comment || '#888888',\n      number: themeColors.number || '#ffd700',\n      operator: themeColors.operator || '#ffffff',\n      function: themeColors.function || '#00d9ff',\n      identifier: themeColors.identifier || '#ffffff',\n      other: themeColors.text || '#ffffff',\n      space: themeColors.background || fillColorFromTheme,\n    };\n    const lineNumberColor = themeColors.lineNumber || '#888888';\n    const lineNumberBg = themeColors.lineNumberBackground || null;\n\n    let globalCharIndex = 0;\n    let globalTokenIndex = 0;\n\n    if (this._cursorItem) {\n      try { this._cursorItem.remove(); } catch (e) {}\n      this._cursorItem = null;\n    }\n\n    let pendingCursorX = null;\n    let pendingCursorYTop = null;\n    const cursorHeight = fontSize;\n    const cursorYOffset =  -(fontSize * 0.3);\n\n    const contentWidth = Math.max(0, elementWidth - paddingPx * 2);\n    const contentHeight = Math.max(0, elementHeight - paddingPx - paddingBottomPx);\n    const maxVisibleLines = Math.max(1, Math.floor(contentHeight / lineHeightPx));\n\n    let lastPrintedLine = 0;\n    if (this.split === 'line') {\n      const printed = Math.floor(Math.max(0, time - this.startTime) / this.splitDelay);\n      lastPrintedLine = Math.min(this.highlightedLines.length - 1, printed);\n    } else if (this.split === 'word') {\n      const printed = Math.floor(Math.max(0, time - this.startTime) / this.splitDelay);\n      let remaining = printed;\n      for (let i = 0; i < this.highlightedLines.length; i++) {\n        if (remaining <= 0) break;\n        const tokens = this.highlightedLines[i].tokens;\n        const count = tokens.reduce((acc, t) => acc + (t.type === 'space' ? 0 : 1), 0);\n        remaining -= count;\n        if (remaining >= 0) lastPrintedLine = i;\n      }\n    } else if (this.split === 'letter') {\n      const printed = Math.floor(Math.max(0, time - this.startTime) / this.splitDelay);\n      let remaining = printed;\n      for (let i = 0; i < this.highlightedLines.length; i++) {\n        if (remaining <= 0) break;\n        const tokens = this.highlightedLines[i].tokens;\n        const count = tokens.reduce((acc, t) => acc + t.text.length, 0);\n        remaining -= count;\n        if (remaining >= 0) lastPrintedLine = i;\n      }\n    }\n    const printedLines = lastPrintedLine + 1;\n    const scrollPadBottomPx = this.config.scrollPaddingBottom !== undefined ? this.config.scrollPaddingBottom : paddingBottomPx;\n    const scrollViewportHeight = Math.max(0, contentHeight - scrollPadBottomPx);\n    const scrollOffsetY = (this.split && this.autoScroll) ? Math.max(0, printedLines * lineHeightPx - scrollViewportHeight) : 0;\n\n    const clipExtraTop = Math.max(2, Math.round(fontSize * 0.3));\n    const clipExtraBottom = Math.max(2, Math.round(fontSize * 0.6));\n    const clipRect = new p.Path.Rectangle({ rectangle: new p.Rectangle(\n      pos.x + paddingPx,\n      pos.y + paddingPx - clipExtraTop,\n      contentWidth,\n      contentHeight + clipExtraTop + clipExtraBottom\n    ) });\n    const clipGroup = new p.Group();\n    clipGroup.addChild(clipRect);\n    clipRect.clipMask = true;\n    clipGroup.clipped = true;\n    layer.addChild(clipGroup);\n    const target = clipGroup;\n\n    this.highlightedLines.forEach((lineData, idx) => {\n      const centerY = contentStartY + idx * lineHeightPx + (lineHeightPx / 2) - scrollOffsetY;\n      const fontFamily = this.fontFamily || 'PatuaOne';\n      let currentX = contentStartX;\n\n      if (this.split === 'line') {\n        const segStart = this.startTime + idx * this.splitDelay;\n        if (time < segStart) return;\n        const progress = Math.max(0, Math.min(1, (time - segStart) / this.splitDuration));\n        if (this.showLineNumbers) {\n          const ln = new p.PointText(new p.Point(pos.x + (lineNumberWidth - 8), centerY));\n          ln.content = String(idx + 1);\n          ln.fontSize = fontSize;\n          ln.fontFamily = fontFamily;\n          ln.justification = 'right';\n            ln.fillColor = lineNumberColor;\n          //ln.opacity = progress;\n          target.addChild(ln);\n        }\n        for (const token of lineData.tokens) {\n          if (token.type === 'space') {\n            const w = this.measureTextWidth(token.text, fontSize, fontFamily);\n            currentX += w;\n            continue;\n          }\n          const pt = new p.PointText(new p.Point(currentX, centerY));\n          pt.content = token.text;\n          pt.fontSize = fontSize;\n          pt.fontFamily = fontFamily;\n          pt.justification = 'left';\n          pt.fillColor = tokenColorMap[token.type] || '#ffffff';\n          //pt.opacity = progress;\n          const w = this.measureTextWidth(token.text, fontSize, fontFamily);\n          target.addChild(pt);\n          currentX += w;\n        }\n        return;\n      }\n\n      if (this.split === 'word') {\n        if (this.showLineNumbers) {\n          const firstTokenIndex = globalTokenIndex;\n          const segStart = this.startTime + firstTokenIndex * this.splitDelay;\n          const progress = Math.max(0, Math.min(1, (time - segStart) / this.splitDuration));\n          if (time >= segStart) {\n            const ln = new p.PointText(new p.Point(pos.x + (lineNumberWidth - 8), centerY));\n            ln.content = String(idx + 1);\n            ln.fontSize = fontSize;\n            ln.fontFamily = fontFamily;\n            ln.justification = 'right';\n            ln.fillColor = lineNumberColor;\n            //ln.opacity = progress;\n            target.addChild(ln);\n          }\n        }\n        let lastDrawnX = currentX;\n        let anyDrawn = false;\n        for (const token of lineData.tokens) {\n          if (token.type === 'space') {\n            const w = this.measureTextWidth(token.text, fontSize, fontFamily);\n            currentX += w;\n            continue;\n          }\n          const segStart = this.startTime + globalTokenIndex * this.splitDelay;\n          if (time < segStart) {\n            break;\n          }\n          const progress = Math.max(0, Math.min(1, (time - segStart) / this.splitDuration));\n          const pt = new p.PointText(new p.Point(currentX, centerY));\n          pt.content = token.text;\n          pt.fontSize = fontSize;\n          pt.fontFamily = fontFamily;\n          pt.justification = 'left';\n          pt.fillColor = tokenColorMap[token.type] || '#ffffff';\n          //pt.opacity = progress;\n          const w = this.measureTextWidth(token.text, fontSize, fontFamily);\n          target.addChild(pt);\n          currentX += w;\n          lastDrawnX = currentX;\n          globalTokenIndex += 1;\n          anyDrawn = true;\n        }\n        if (this.cursor && anyDrawn) {\n          pendingCursorX = lastDrawnX + this.cursorPaddingLeft;\n          pendingCursorYTop = centerY - fontSize / 2 + cursorYOffset;\n        }\n        return;\n      }\n\n      if (this.split === 'letter') {\n        if (this.showLineNumbers) {\n          const segStart = this.startTime + globalCharIndex * this.splitDelay;\n          const progress = Math.max(0, Math.min(1, (time - segStart) / this.splitDuration));\n          if (time >= segStart) {\n            const ln = new p.PointText(new p.Point(pos.x + (lineNumberWidth - 8), centerY));\n            ln.content = String(idx + 1);\n            ln.fontSize = fontSize;\n            ln.fontFamily = fontFamily;\n            ln.justification = 'right';\n              ln.fillColor = lineNumberColor;\n            //ln.opacity = progress;\n            target.addChild(ln);\n          }\n        }\n        let lastDrawnX = currentX;\n        let anyDrawn = false;\n        let stopProcessing = false;\n        for (const token of lineData.tokens) {\n          if (token.type === 'space') {\n            const segStartSpace = this.startTime + globalCharIndex * this.splitDelay;\n            if (time < segStartSpace) { stopProcessing = true; break; }\n            const w = this.measureTextWidth(token.text, fontSize, fontFamily);\n            currentX += w;\n            globalCharIndex += token.text.length;\n            continue;\n          }\n          for (let i = 0; i < token.text.length; i++) {\n            const ch = token.text[i];\n            const segStart = this.startTime + globalCharIndex * this.splitDelay;\n            const wch = this.measureTextWidth(ch, fontSize, fontFamily);\n            if (time < segStart) { stopProcessing = true; break; }\n            const progress = Math.max(0, Math.min(1, (time - segStart) / this.splitDuration));\n            const pt = new p.PointText(new p.Point(currentX, centerY));\n            pt.content = ch;\n            pt.fontSize = fontSize;\n            pt.fontFamily = fontFamily;\n            pt.justification = 'left';\n            pt.fillColor = tokenColorMap[token.type] || '#ffffff';\n            //pt.opacity = progress;\n            target.addChild(pt);\n            lastDrawnX = currentX + wch;\n            anyDrawn = true;\n            currentX += wch;\n            globalCharIndex += 1;\n          }\n          if (stopProcessing) break;\n        }\n        if (this.cursor && anyDrawn) {\n          pendingCursorX = lastDrawnX + this.cursorPaddingLeft;\n          pendingCursorYTop = centerY - fontSize / 2 + cursorYOffset;\n        }\n        return;\n      }\n\n      if (this.showLineNumbers) {\n        const ln = new p.PointText(new p.Point(pos.x + (lineNumberWidth - 8), centerY));\n        ln.content = String(idx + 1);\n        ln.fontSize = fontSize;\n        ln.fontFamily = fontFamily;\n        ln.justification = 'right';\n        ln.fillColor = lineNumberColor;\n        target.addChild(ln);\n      }\n      for (const token of lineData.tokens) {\n        if (token.type === 'space') {\n          const w = this.measureTextWidth(token.text, fontSize, fontFamily);\n          currentX += w;\n          continue;\n        }\n        const pt = new p.PointText(new p.Point(currentX, centerY));\n        pt.content = token.text;\n        pt.fontSize = fontSize;\n        pt.fontFamily = fontFamily;\n        pt.justification = 'left';\n        pt.fillColor = tokenColorMap[token.type] || '#ffffff';\n        const w = this.measureTextWidth(token.text, fontSize, fontFamily);\n        target.addChild(pt);\n        currentX += w;\n      }\n    });\n\n    if (this.cursor && pendingCursorX !== null && pendingCursorYTop !== null) {\n      const blink = Math.floor(time / this.cursorBlinkPeriod) % 2 === 0;\n      const rect = new p.Path.Rectangle({ rectangle: new p.Rectangle(pendingCursorX, pendingCursorYTop, this.cursorWidth, cursorHeight) });\n      rect.fillColor = this.cursorColor;\n      rect.opacity = blink ? 1 : 0;\n      target.addChild(rect);\n      this._cursorItem = rect;\n    }\n\n    return null;\n  }\n\n  setCode(code, language = null) {\n    this.code = code;\n    if (language) this.language = language;\n    this.highlighter = new SyntaxHighlighter(this.language);\n    this.highlightedLines = this.highlighter.highlight(this.code);\n  }\n}\n\nexport default CodeElement;\n"],"names":["BaseElement","deepMerge","DEFAULT_TEXT_CONFIG","canvas","createCanvas"],"mappings":"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"}