@microlee666/dom-to-pptx 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +12 -0
- package/Readme.md +28 -0
- package/SUPPORTED.md +5 -0
- package/USAGE_CN.md +26 -0
- package/cli/dom-to-pptx.bundle.js +977 -36
- package/cli/html2pptx.js +19 -6
- package/cli/presentation.pptx +0 -0
- package/dist/dom-to-pptx.bundle.js +769 -14
- package/dist/dom-to-pptx.cjs +767 -13
- package/dist/dom-to-pptx.cjs.map +1 -1
- package/dist/dom-to-pptx.mjs +767 -13
- package/dist/dom-to-pptx.mjs.map +1 -1
- package/package.json +2 -2
- package/scripts/patch-bundle.js +66 -0
- package/src/index.js +530 -10
- package/src/utils.js +240 -4
package/dist/dom-to-pptx.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom-to-pptx.mjs","sources":["../src/font-utils.js","../src/font-embedder.js","../src/utils.js","../src/image-processor.js","../src/index.js"],"sourcesContent":["// src/font-utils.js\nimport { Font } from 'fonteditor-core';\nimport pako from 'pako';\n\n/**\n * Converts various font formats to EOT (Embedded OpenType),\n * which is highly compatible with PowerPoint embedding.\n * @param {string} type - 'ttf', 'woff', or 'otf'\n * @param {ArrayBuffer} fontBuffer - The raw font data\n */\nexport async function fontToEot(type, fontBuffer) {\n const options = {\n type,\n hinting: true,\n // inflate is required for WOFF decoding\n inflate: type === 'woff' ? pako.inflate : undefined,\n };\n\n const font = Font.create(fontBuffer, options);\n\n const eotBuffer = font.write({\n type: 'eot',\n toBuffer: true,\n });\n\n if (eotBuffer instanceof ArrayBuffer) {\n return eotBuffer;\n }\n\n // Ensure we return an ArrayBuffer\n return eotBuffer.buffer.slice(eotBuffer.byteOffset, eotBuffer.byteOffset + eotBuffer.byteLength);\n}\n","// src/font-embedder.js\nimport opentype from 'opentype.js';\nimport { fontToEot } from './font-utils.js';\n\nconst START_RID = 201314;\n\nexport class PPTXEmbedFonts {\n constructor() {\n this.zip = null;\n this.rId = START_RID;\n this.fonts = []; // { name, data, rid }\n }\n\n async loadZip(zip) {\n this.zip = zip;\n }\n\n /**\n * Reads the font name from the buffer using opentype.js\n */\n getFontInfo(fontBuffer) {\n try {\n const font = opentype.parse(fontBuffer);\n const names = font.names;\n // Prefer English name, fallback to others\n const fontFamily = names.fontFamily.en || Object.values(names.fontFamily)[0];\n return { name: fontFamily };\n } catch (e) {\n console.warn('Could not parse font info', e);\n return { name: 'Unknown' };\n }\n }\n\n async addFont(fontFace, fontBuffer, type) {\n // Convert to EOT/fntdata for PPTX compatibility\n const eotData = await fontToEot(type, fontBuffer);\n const rid = this.rId++;\n this.fonts.push({ name: fontFace, data: eotData, rid });\n }\n\n async updateFiles() {\n await this.updateContentTypesXML();\n await this.updatePresentationXML();\n await this.updateRelsPresentationXML();\n this.updateFontFiles();\n }\n\n async generateBlob() {\n if (!this.zip) throw new Error('Zip not loaded');\n return this.zip.generateAsync({\n type: 'blob',\n compression: 'DEFLATE',\n compressionOptions: { level: 6 },\n });\n }\n\n // --- XML Manipulation Methods ---\n\n async updateContentTypesXML() {\n const file = this.zip.file('[Content_Types].xml');\n if (!file) throw new Error('[Content_Types].xml not found');\n\n const xmlStr = await file.async('string');\n const parser = new DOMParser();\n const doc = parser.parseFromString(xmlStr, 'text/xml');\n\n const types = doc.getElementsByTagName('Types')[0];\n const defaults = Array.from(doc.getElementsByTagName('Default'));\n\n const hasFntData = defaults.some((el) => el.getAttribute('Extension') === 'fntdata');\n\n if (!hasFntData) {\n const el = doc.createElement('Default');\n el.setAttribute('Extension', 'fntdata');\n el.setAttribute('ContentType', 'application/x-fontdata');\n types.insertBefore(el, types.firstChild);\n }\n\n this.zip.file('[Content_Types].xml', new XMLSerializer().serializeToString(doc));\n }\n\n async updatePresentationXML() {\n const file = this.zip.file('ppt/presentation.xml');\n if (!file) throw new Error('ppt/presentation.xml not found');\n\n const xmlStr = await file.async('string');\n const parser = new DOMParser();\n const doc = parser.parseFromString(xmlStr, 'text/xml');\n const presentation = doc.getElementsByTagName('p:presentation')[0];\n\n // Enable embedding flags\n presentation.setAttribute('saveSubsetFonts', 'true');\n presentation.setAttribute('embedTrueTypeFonts', 'true');\n\n // Find or create embeddedFontLst\n let embeddedFontLst = presentation.getElementsByTagName('p:embeddedFontLst')[0];\n\n if (!embeddedFontLst) {\n embeddedFontLst = doc.createElement('p:embeddedFontLst');\n\n // Insert before defaultTextStyle or at end\n const defaultTextStyle = presentation.getElementsByTagName('p:defaultTextStyle')[0];\n if (defaultTextStyle) {\n presentation.insertBefore(embeddedFontLst, defaultTextStyle);\n } else {\n presentation.appendChild(embeddedFontLst);\n }\n }\n\n // Add font references\n this.fonts.forEach((font) => {\n // Check if already exists\n const existing = Array.from(embeddedFontLst.getElementsByTagName('p:font')).find(\n (node) => node.getAttribute('typeface') === font.name\n );\n\n if (!existing) {\n const embedFont = doc.createElement('p:embeddedFont');\n\n const fontNode = doc.createElement('p:font');\n fontNode.setAttribute('typeface', font.name);\n embedFont.appendChild(fontNode);\n\n const regular = doc.createElement('p:regular');\n regular.setAttribute('r:id', `rId${font.rid}`);\n embedFont.appendChild(regular);\n\n embeddedFontLst.appendChild(embedFont);\n }\n });\n\n this.zip.file('ppt/presentation.xml', new XMLSerializer().serializeToString(doc));\n }\n\n async updateRelsPresentationXML() {\n const file = this.zip.file('ppt/_rels/presentation.xml.rels');\n if (!file) throw new Error('presentation.xml.rels not found');\n\n const xmlStr = await file.async('string');\n const parser = new DOMParser();\n const doc = parser.parseFromString(xmlStr, 'text/xml');\n const relationships = doc.getElementsByTagName('Relationships')[0];\n\n this.fonts.forEach((font) => {\n const rel = doc.createElement('Relationship');\n rel.setAttribute('Id', `rId${font.rid}`);\n rel.setAttribute('Target', `fonts/${font.rid}.fntdata`);\n rel.setAttribute(\n 'Type',\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/font'\n );\n relationships.appendChild(rel);\n });\n\n this.zip.file('ppt/_rels/presentation.xml.rels', new XMLSerializer().serializeToString(doc));\n }\n\n updateFontFiles() {\n this.fonts.forEach((font) => {\n this.zip.file(`ppt/fonts/${font.rid}.fntdata`, font.data);\n });\n }\n}\n","// src/utils.js\n\n// canvas context for color normalization\nlet _ctx;\nfunction getCtx() {\n if (!_ctx) _ctx = document.createElement('canvas').getContext('2d', { willReadFrequently: true });\n return _ctx;\n}\n\nfunction getTableBorder(style, side, scale) {\n const widthStr = style[`border${side}Width`];\n const styleStr = style[`border${side}Style`];\n const colorStr = style[`border${side}Color`];\n\n const width = parseFloat(widthStr) || 0;\n if (width === 0 || styleStr === 'none' || styleStr === 'hidden') {\n return null;\n }\n\n const color = parseColor(colorStr);\n if (!color.hex || color.opacity === 0) return null;\n\n let dash = 'solid';\n if (styleStr === 'dashed') dash = 'dash';\n if (styleStr === 'dotted') dash = 'dot';\n\n return {\n pt: width * 0.75 * scale, // Convert px to pt\n color: color.hex,\n style: dash,\n };\n}\n\n/**\n * Extracts native table data for PptxGenJS.\n */\nexport function extractTableData(node, scale, options = {}) {\n const rows = [];\n const colWidths = [];\n const root = options.root || null;\n\n // 1. Calculate Column Widths based on the first row of cells\n // We look at the first <tr>'s children to determine visual column widths.\n // Note: This assumes a fixed grid. Complex colspan/rowspan on the first row\n // might skew widths, but getBoundingClientRect captures the rendered result.\n const firstRow = node.querySelector('tr');\n if (firstRow) {\n const cells = Array.from(firstRow.children);\n cells.forEach((cell) => {\n const rect = cell.getBoundingClientRect();\n const wIn = rect.width * (1 / 96) * scale;\n colWidths.push(wIn);\n });\n }\n\n // 2. Iterate Rows\n const trList = node.querySelectorAll('tr');\n trList.forEach((tr) => {\n const rowData = [];\n const cellList = Array.from(tr.children).filter((c) =>\n ['TD', 'TH'].includes(c.tagName)\n );\n\n cellList.forEach((cell) => {\n const style = window.getComputedStyle(cell);\n const cellText = cell.innerText.replace(/[\\n\\r\\t]+/g, ' ').trim();\n\n // A. Text Style\n const textStyle = getTextStyle(style, scale, cellText, options);\n\n // B. Cell Background\n const fill = computeTableCellFill(style, cell, root, options);\n\n // C. Alignment\n let align = 'left';\n if (style.textAlign === 'center') align = 'center';\n if (style.textAlign === 'right' || style.textAlign === 'end') align = 'right';\n\n let valign = 'top';\n if (style.verticalAlign === 'middle') valign = 'middle';\n if (style.verticalAlign === 'bottom') valign = 'bottom';\n\n // D. Padding (Margins in PPTX)\n // CSS Padding px -> PPTX Margin pt\n const padding = getPadding(style, scale);\n // getPadding returns [top, right, bottom, left] in inches relative to scale\n // PptxGenJS expects points (pt) for margin: [t, r, b, l]\n // or discrete properties. Let's use discrete for clarity.\n const margin = [\n padding[0] * 72, // top\n padding[1] * 72, // right\n padding[2] * 72, // bottom\n padding[3] * 72 // left\n ];\n\n // E. Borders\n const borderTop = getTableBorder(style, 'Top', scale);\n const borderRight = getTableBorder(style, 'Right', scale);\n const borderBottom = getTableBorder(style, 'Bottom', scale);\n const borderLeft = getTableBorder(style, 'Left', scale);\n\n // F. Construct Cell Object\n rowData.push({\n text: cellText,\n options: {\n color: textStyle.color,\n fontFace: textStyle.fontFace,\n fontSize: textStyle.fontSize,\n bold: textStyle.bold,\n italic: textStyle.italic,\n underline: textStyle.underline,\n\n fill: fill,\n align: align,\n valign: valign,\n margin: margin,\n\n rowspan: parseInt(cell.getAttribute('rowspan')) || null,\n colspan: parseInt(cell.getAttribute('colspan')) || null,\n\n border: {\n pt: null, // trigger explicit object structure\n top: borderTop,\n right: borderRight,\n bottom: borderBottom,\n left: borderLeft\n }\n },\n });\n });\n\n if (rowData.length > 0) {\n rows.push(rowData);\n }\n });\n\n return { rows, colWidths };\n}\n\n// Checks if any parent element has overflow: hidden which would clip this element\nexport function isClippedByParent(node) {\n let parent = node.parentElement;\n while (parent && parent !== document.body) {\n const style = window.getComputedStyle(parent);\n const overflow = style.overflow;\n if (overflow === 'hidden' || overflow === 'clip') {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n}\n\n// Helper to save gradient text\n// Helper to save gradient text: extracts the first color from a gradient string\nexport function getGradientFallbackColor(bgImage) {\n if (!bgImage || bgImage === 'none') return null;\n\n // 1. Extract content inside function(...)\n // Handles linear-gradient(...), radial-gradient(...), repeating-linear-gradient(...)\n const match = bgImage.match(/gradient\\((.*)\\)/);\n if (!match) return null;\n\n const content = match[1];\n\n // 2. Split by comma, respecting parentheses (to avoid splitting inside rgb(), oklch(), etc.)\n const parts = [];\n let current = '';\n let parenDepth = 0;\n\n for (const char of content) {\n if (char === '(') parenDepth++;\n if (char === ')') parenDepth--;\n if (char === ',' && parenDepth === 0) {\n parts.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n if (current) parts.push(current.trim());\n\n // 3. Find first part that is a color (skip angle/direction)\n for (const part of parts) {\n // Ignore directions (to right) or angles (90deg, 0.5turn)\n if (/^(to\\s|[\\d\\.]+(deg|rad|turn|grad))/.test(part)) continue;\n\n // Extract color: Remove trailing position (e.g. \"red 50%\" -> \"red\")\n // Regex matches whitespace + number + unit at end of string\n const colorPart = part.replace(/\\s+(-?[\\d\\.]+(%|px|em|rem|ch|vh|vw)?)$/, '');\n\n // Check if it's not just a number (some gradients might have bare numbers? unlikely in standard syntax)\n if (colorPart) return colorPart;\n }\n\n return null;\n}\n\nfunction mapDashType(style) {\n if (style === 'dashed') return 'dash';\n if (style === 'dotted') return 'dot';\n return 'solid';\n}\n\nfunction hexToRgb(hex) {\n const clean = (hex || '').replace('#', '').trim();\n if (clean.length !== 6) return null;\n const num = parseInt(clean, 16);\n if (Number.isNaN(num)) return null;\n return {\n r: (num >> 16) & 255,\n g: (num >> 8) & 255,\n b: num & 255,\n };\n}\n\nfunction rgbToHex(rgb) {\n const toHex = (v) => v.toString(16).padStart(2, '0').toUpperCase();\n return `${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`;\n}\n\nfunction blendHex(baseHex, overlayHex, alpha) {\n const base = hexToRgb(baseHex);\n const over = hexToRgb(overlayHex);\n if (!base || !over) return overlayHex;\n const a = Math.max(0, Math.min(1, alpha));\n const r = Math.round(base.r * (1 - a) + over.r * a);\n const g = Math.round(base.g * (1 - a) + over.g * a);\n const b = Math.round(base.b * (1 - a) + over.b * a);\n return rgbToHex({ r, g, b });\n}\n\nfunction resolveTableBaseColor(node, root) {\n // Start from parent to avoid picking the cell's own semi-transparent fill\n let el = node?.parentElement || null;\n while (el && el !== document.body) {\n const style = window.getComputedStyle(el);\n const bg = parseColor(style.backgroundColor);\n if (bg.hex && bg.opacity > 0) return bg.hex;\n\n const bgClip = style.webkitBackgroundClip || style.backgroundClip;\n const bgImage = style.backgroundImage;\n if (bgClip !== 'text' && bgImage && bgImage.includes('gradient')) {\n const fallback = getGradientFallbackColor(bgImage);\n if (fallback) {\n const parsed = parseColor(fallback);\n if (parsed.hex) return parsed.hex;\n }\n }\n\n if (el === root) break;\n el = el.parentElement;\n }\n return null;\n}\n\nexport function computeTableCellFill(style, cell, root, options = {}) {\n const bg = parseColor(style.backgroundColor);\n if (!bg.hex || bg.opacity <= 0) return null;\n\n const flatten = options.tableConfig?.flattenTransparentFill !== false;\n if (bg.opacity < 1 && flatten) {\n const baseHex = resolveTableBaseColor(cell, root) || 'FFFFFF';\n const blended = blendHex(baseHex, bg.hex, bg.opacity);\n return { color: blended };\n }\n\n const transparency = Math.max(0, Math.min(100, (1 - bg.opacity) * 100));\n return transparency > 0 ? { color: bg.hex, transparency } : { color: bg.hex };\n}\n\n/**\n * Analyzes computed border styles and determines the rendering strategy.\n */\nexport function getBorderInfo(style, scale) {\n const top = {\n width: parseFloat(style.borderTopWidth) || 0,\n style: style.borderTopStyle,\n color: parseColor(style.borderTopColor).hex,\n };\n const right = {\n width: parseFloat(style.borderRightWidth) || 0,\n style: style.borderRightStyle,\n color: parseColor(style.borderRightColor).hex,\n };\n const bottom = {\n width: parseFloat(style.borderBottomWidth) || 0,\n style: style.borderBottomStyle,\n color: parseColor(style.borderBottomColor).hex,\n };\n const left = {\n width: parseFloat(style.borderLeftWidth) || 0,\n style: style.borderLeftStyle,\n color: parseColor(style.borderLeftColor).hex,\n };\n\n const hasAnyBorder = top.width > 0 || right.width > 0 || bottom.width > 0 || left.width > 0;\n if (!hasAnyBorder) return { type: 'none' };\n\n // Check if all sides are uniform\n const isUniform =\n top.width === right.width &&\n top.width === bottom.width &&\n top.width === left.width &&\n top.style === right.style &&\n top.style === bottom.style &&\n top.style === left.style &&\n top.color === right.color &&\n top.color === bottom.color &&\n top.color === left.color;\n\n if (isUniform) {\n return {\n type: 'uniform',\n options: {\n width: top.width * 0.75 * scale,\n color: top.color,\n transparency: (1 - parseColor(style.borderTopColor).opacity) * 100,\n dashType: mapDashType(top.style),\n },\n };\n } else {\n return {\n type: 'composite',\n sides: { top, right, bottom, left },\n };\n }\n}\n\n/**\n * Generates an SVG image for composite borders that respects border-radius.\n */\nexport function generateCompositeBorderSVG(w, h, radius, sides) {\n radius = radius / 2; // Adjust for SVG rendering\n const clipId = 'clip_' + Math.random().toString(36).substr(2, 9);\n let borderRects = '';\n\n if (sides.top.width > 0 && sides.top.color) {\n borderRects += `<rect x=\"0\" y=\"0\" width=\"${w}\" height=\"${sides.top.width}\" fill=\"#${sides.top.color}\" />`;\n }\n if (sides.right.width > 0 && sides.right.color) {\n borderRects += `<rect x=\"${w - sides.right.width}\" y=\"0\" width=\"${sides.right.width}\" height=\"${h}\" fill=\"#${sides.right.color}\" />`;\n }\n if (sides.bottom.width > 0 && sides.bottom.color) {\n borderRects += `<rect x=\"0\" y=\"${h - sides.bottom.width}\" width=\"${w}\" height=\"${sides.bottom.width}\" fill=\"#${sides.bottom.color}\" />`;\n }\n if (sides.left.width > 0 && sides.left.color) {\n borderRects += `<rect x=\"0\" y=\"0\" width=\"${sides.left.width}\" height=\"${h}\" fill=\"#${sides.left.color}\" />`;\n }\n\n const svg = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n <defs>\n <clipPath id=\"${clipId}\">\n <rect x=\"0\" y=\"0\" width=\"${w}\" height=\"${h}\" rx=\"${radius}\" ry=\"${radius}\" />\n </clipPath>\n </defs>\n <g clip-path=\"url(#${clipId})\">\n ${borderRects}\n </g>\n </svg>`;\n\n return 'data:image/svg+xml;base64,' + btoa(svg);\n}\n\n/**\n * Generates an SVG data URL for a solid shape with non-uniform corner radii.\n */\nexport function generateCustomShapeSVG(w, h, color, opacity, radii) {\n let { tl, tr, br, bl } = radii;\n\n // Clamp radii using CSS spec logic (avoid overlap)\n const factor = Math.min(\n w / (tl + tr) || Infinity,\n h / (tr + br) || Infinity,\n w / (br + bl) || Infinity,\n h / (bl + tl) || Infinity\n );\n\n if (factor < 1) {\n tl *= factor;\n tr *= factor;\n br *= factor;\n bl *= factor;\n }\n\n const path = `\n M ${tl} 0\n L ${w - tr} 0\n A ${tr} ${tr} 0 0 1 ${w} ${tr}\n L ${w} ${h - br}\n A ${br} ${br} 0 0 1 ${w - br} ${h}\n L ${bl} ${h}\n A ${bl} ${bl} 0 0 1 0 ${h - bl}\n L 0 ${tl}\n A ${tl} ${tl} 0 0 1 ${tl} 0\n Z\n `;\n\n const svg = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n <path d=\"${path}\" fill=\"#${color}\" fill-opacity=\"${opacity}\" />\n </svg>`;\n\n return 'data:image/svg+xml;base64,' + btoa(svg);\n}\n\n// --- REPLACE THE EXISTING parseColor FUNCTION ---\nexport function parseColor(str) {\n if (!str || str === 'transparent' || str.trim() === 'rgba(0, 0, 0, 0)') {\n return { hex: null, opacity: 0 };\n }\n\n const ctx = getCtx();\n ctx.fillStyle = str;\n const computed = ctx.fillStyle;\n\n // 1. Handle Hex Output (e.g. #ff0000) - Fast Path\n if (computed.startsWith('#')) {\n let hex = computed.slice(1);\n let opacity = 1;\n if (hex.length === 3) hex = hex.split('').map(c => c + c).join('');\n if (hex.length === 4) hex = hex.split('').map(c => c + c).join('');\n if (hex.length === 8) {\n opacity = parseInt(hex.slice(6), 16) / 255;\n hex = hex.slice(0, 6);\n }\n return { hex: hex.toUpperCase(), opacity };\n }\n\n // 2. Handle RGB/RGBA Output (standard) - Fast Path\n if (computed.startsWith('rgb')) {\n const match = computed.match(/[\\d.]+/g);\n if (match && match.length >= 3) {\n const r = parseInt(match[0]);\n const g = parseInt(match[1]);\n const b = parseInt(match[2]);\n const a = match.length > 3 ? parseFloat(match[3]) : 1;\n const hex = ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();\n return { hex, opacity: a };\n }\n }\n\n // 3. Fallback: Browser returned a format we don't parse (oklch, lab, color(srgb...), etc.)\n // Use Canvas API to convert to sRGB\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillRect(0, 0, 1, 1);\n const data = ctx.getImageData(0, 0, 1, 1).data;\n // data = [r, g, b, a]\n const r = data[0];\n const g = data[1];\n const b = data[2];\n const a = data[3] / 255;\n\n if (a === 0) return { hex: null, opacity: 0 };\n\n const hex = ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();\n return { hex, opacity: a };\n}\n\nexport function getPadding(style, scale) {\n const pxToInch = 1 / 96;\n return [\n (parseFloat(style.paddingTop) || 0) * pxToInch * scale,\n (parseFloat(style.paddingRight) || 0) * pxToInch * scale,\n (parseFloat(style.paddingBottom) || 0) * pxToInch * scale,\n (parseFloat(style.paddingLeft) || 0) * pxToInch * scale,\n ];\n}\n\nexport function getSoftEdges(filterStr, scale) {\n if (!filterStr || filterStr === 'none') return null;\n const match = filterStr.match(/blur\\(([\\d.]+)px\\)/);\n if (match) return parseFloat(match[1]) * 0.75 * scale;\n return null;\n}\n\nconst DEFAULT_CJK_FONTS = [\n 'PingFang SC',\n 'Hiragino Sans GB',\n 'Microsoft YaHei',\n 'Noto Sans CJK SC',\n 'Source Han Sans SC',\n 'WenQuanYi Micro Hei',\n 'SimHei',\n 'SimSun',\n 'STHeiti'\n];\n\nfunction normalizeFontList(fontFamily) {\n if (!fontFamily || typeof fontFamily !== 'string') return [];\n return fontFamily\n .split(',')\n .map((f) => f.trim().replace(/['\"]/g, ''))\n .filter(Boolean);\n}\n\nfunction containsCjk(text) {\n if (!text) return false;\n return /[\\u3040-\\u30ff\\u3400-\\u4dbf\\u4e00-\\u9fff\\uf900-\\ufaff]/.test(text);\n}\n\nfunction normalizeCjkFallbacks(options) {\n if (!options) return [];\n const raw =\n options.fontFallbacks?.cjk ??\n options.cjkFonts ??\n options.cjkFont ??\n [];\n const list = Array.isArray(raw) ? raw : [raw];\n return list\n .map((f) => (typeof f === 'string' ? f.trim() : String(f)))\n .filter(Boolean);\n}\n\nfunction pickFontFace(fontFamily, text, options) {\n const fontList = normalizeFontList(fontFamily);\n const primary = fontList[0] || 'Arial';\n\n if (!containsCjk(text)) return primary;\n\n const lowered = fontList.map((f) => f.toLowerCase());\n const configured = normalizeCjkFallbacks(options);\n if (configured.length > 0) {\n const match = configured.find((f) => lowered.includes(f.toLowerCase()));\n return match || configured[0];\n }\n\n const autoMatch = DEFAULT_CJK_FONTS.find((f) => lowered.includes(f.toLowerCase()));\n return autoMatch || primary;\n}\n\nexport function getTextStyle(style, scale, text = '', options = {}) {\n let colorObj = parseColor(style.color);\n\n const bgClip = style.webkitBackgroundClip || style.backgroundClip;\n if (colorObj.opacity === 0 && bgClip === 'text') {\n const fallback = getGradientFallbackColor(style.backgroundImage);\n if (fallback) colorObj = parseColor(fallback);\n }\n\n let lineSpacing = null;\n const fontSizePx = parseFloat(style.fontSize);\n const lhStr = style.lineHeight;\n\n if (lhStr && lhStr !== 'normal') {\n let lhPx = parseFloat(lhStr);\n\n // Edge Case: If browser returns a raw multiplier (e.g. \"1.5\")\n // we must multiply by font size to get the height in pixels.\n // (Note: getComputedStyle usually returns 'px', but inline styles might differ)\n if (/^[0-9.]+$/.test(lhStr)) {\n lhPx = lhPx * fontSizePx;\n }\n\n if (!isNaN(lhPx) && lhPx > 0) {\n // Convert Pixel Height to Point Height (1px = 0.75pt)\n // And apply the global layout scale.\n lineSpacing = lhPx * 0.75 * scale;\n }\n }\n\n // --- Spacing (Margins) ---\n // Convert CSS margins (px) to PPTX Paragraph Spacing (pt).\n let paraSpaceBefore = 0;\n let paraSpaceAfter = 0;\n\n const mt = parseFloat(style.marginTop) || 0;\n const mb = parseFloat(style.marginBottom) || 0;\n\n if (mt > 0) paraSpaceBefore = mt * 0.75 * scale;\n if (mb > 0) paraSpaceAfter = mb * 0.75 * scale;\n\n const fontFace = pickFontFace(style.fontFamily, text, options);\n\n return {\n color: colorObj.hex || '000000',\n fontFace: fontFace,\n fontSize: Math.floor(fontSizePx * 0.75 * scale),\n bold: parseInt(style.fontWeight) >= 600,\n italic: style.fontStyle === 'italic',\n underline: style.textDecoration.includes('underline'),\n // Only add if we have a valid value\n ...(lineSpacing && { lineSpacing }),\n ...(paraSpaceBefore > 0 && { paraSpaceBefore }),\n ...(paraSpaceAfter > 0 && { paraSpaceAfter }),\n // Map background color to highlight if present\n ...(parseColor(style.backgroundColor).hex ? { highlight: parseColor(style.backgroundColor).hex } : {}),\n };\n}\n\n/**\n * Determines if a given DOM node is primarily a text container.\n * Updated to correctly reject Icon elements so they are rendered as images.\n */\nexport function isTextContainer(node) {\n const hasText = node.textContent.trim().length > 0;\n if (!hasText) return false;\n\n const children = Array.from(node.children);\n if (children.length === 0) return true;\n\n const isSafeInline = (el) => {\n // 1. Reject Web Components / Custom Elements\n if (el.tagName.includes('-')) return false;\n // 2. Reject Explicit Images/SVGs\n if (el.tagName === 'IMG' || el.tagName === 'SVG') return false;\n\n // 3. Reject Class-based Icons (FontAwesome, Material, Bootstrap, etc.)\n // If an <i> or <span> has icon classes, it is a visual object, not text.\n if (el.tagName === 'I' || el.tagName === 'SPAN') {\n const cls = el.getAttribute('class') || '';\n if (\n cls.includes('fa-') ||\n cls.includes('fas') ||\n cls.includes('far') ||\n cls.includes('fab') ||\n cls.includes('material-icons') ||\n cls.includes('bi-') ||\n cls.includes('icon')\n ) {\n return false;\n }\n }\n\n const style = window.getComputedStyle(el);\n const display = style.display;\n\n // 4. Standard Inline Tag Check\n const isInlineTag = ['SPAN', 'B', 'STRONG', 'EM', 'I', 'A', 'SMALL', 'MARK'].includes(\n el.tagName\n );\n const isInlineDisplay = display.includes('inline');\n\n if (!isInlineTag && !isInlineDisplay) return false;\n\n // 5. Structural Styling Check\n // If a child has a background or border, it's a layout block, not a simple text span.\n const bgColor = parseColor(style.backgroundColor);\n const hasVisibleBg = bgColor.hex && bgColor.opacity > 0;\n const hasBorder =\n parseFloat(style.borderWidth) > 0 && parseColor(style.borderColor).opacity > 0;\n\n // 4. Check for empty shapes (visual objects without text, like dots)\n const hasContent = el.textContent.trim().length > 0;\n if (!hasContent && (hasVisibleBg || hasBorder)) {\n return false;\n }\n\n // If element has background/border and is not inline, treat as layout block\n if ((hasVisibleBg || hasBorder) && !isInlineDisplay) {\n return false;\n }\n\n return true;\n };\n\n return children.every(isSafeInline);\n}\n\nexport function getRotation(transformStr) {\n if (!transformStr || transformStr === 'none') return 0;\n const values = transformStr.split('(')[1].split(')')[0].split(',');\n if (values.length < 4) return 0;\n const a = parseFloat(values[0]);\n const b = parseFloat(values[1]);\n return Math.round(Math.atan2(b, a) * (180 / Math.PI));\n}\n\nexport function svgToPng(node) {\n return new Promise((resolve) => {\n const clone = node.cloneNode(true);\n const rect = node.getBoundingClientRect();\n const width = rect.width || 300;\n const height = rect.height || 150;\n\n function inlineStyles(source, target) {\n const computed = window.getComputedStyle(source);\n const properties = [\n 'fill',\n 'stroke',\n 'stroke-width',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'opacity',\n 'font-family',\n 'font-size',\n 'font-weight',\n ];\n\n if (computed.fill === 'none') target.setAttribute('fill', 'none');\n else if (computed.fill) target.style.fill = computed.fill;\n\n if (computed.stroke === 'none') target.setAttribute('stroke', 'none');\n else if (computed.stroke) target.style.stroke = computed.stroke;\n\n properties.forEach((prop) => {\n if (prop !== 'fill' && prop !== 'stroke') {\n const val = computed[prop];\n if (val && val !== 'auto') target.style[prop] = val;\n }\n });\n\n for (let i = 0; i < source.children.length; i++) {\n if (target.children[i]) inlineStyles(source.children[i], target.children[i]);\n }\n }\n\n inlineStyles(node, clone);\n clone.setAttribute('width', width);\n clone.setAttribute('height', height);\n clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n const xml = new XMLSerializer().serializeToString(clone);\n const svgUrl = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(xml)}`;\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => {\n const canvas = document.createElement('canvas');\n const scale = 3;\n canvas.width = width * scale;\n canvas.height = height * scale;\n const ctx = canvas.getContext('2d');\n ctx.scale(scale, scale);\n ctx.drawImage(img, 0, 0, width, height);\n resolve(canvas.toDataURL('image/png'));\n };\n img.onerror = () => resolve(null);\n img.src = svgUrl;\n });\n}\n\nexport function getVisibleShadow(shadowStr, scale) {\n if (!shadowStr || shadowStr === 'none') return null;\n const shadows = shadowStr.split(/,(?![^()]*\\))/);\n for (let s of shadows) {\n s = s.trim();\n if (s.startsWith('rgba(0, 0, 0, 0)')) continue;\n const match = s.match(\n /(rgba?\\([^)]+\\)|#[0-9a-fA-F]+)\\s+(-?[\\d.]+)px\\s+(-?[\\d.]+)px\\s+([\\d.]+)px/\n );\n if (match) {\n const colorStr = match[1];\n const x = parseFloat(match[2]);\n const y = parseFloat(match[3]);\n const blur = parseFloat(match[4]);\n const distance = Math.sqrt(x * x + y * y);\n let angle = Math.atan2(y, x) * (180 / Math.PI);\n if (angle < 0) angle += 360;\n const colorObj = parseColor(colorStr);\n return {\n type: 'outer',\n angle: angle,\n blur: blur * 0.75 * scale,\n offset: distance * 0.75 * scale,\n color: colorObj.hex || '000000',\n opacity: colorObj.opacity,\n };\n }\n }\n return null;\n}\n\n/**\n * Generates an SVG image for gradients, supporting degrees and keywords.\n */\nexport function generateGradientSVG(w, h, bgString, radius, border) {\n try {\n const match = bgString.match(/linear-gradient\\((.*)\\)/);\n if (!match) return null;\n const content = match[1];\n\n // Split by comma, ignoring commas inside parentheses (e.g. rgba())\n const parts = content.split(/,(?![^()]*\\))/).map((p) => p.trim());\n if (parts.length < 2) return null;\n\n let x1 = '0%',\n y1 = '0%',\n x2 = '0%',\n y2 = '100%';\n let stopsStartIndex = 0;\n const firstPart = parts[0].toLowerCase();\n\n // 1. Check for Keywords (to right, etc.)\n if (firstPart.startsWith('to ')) {\n stopsStartIndex = 1;\n const direction = firstPart.replace('to ', '').trim();\n switch (direction) {\n case 'top':\n y1 = '100%';\n y2 = '0%';\n break;\n case 'bottom':\n y1 = '0%';\n y2 = '100%';\n break;\n case 'left':\n x1 = '100%';\n x2 = '0%';\n break;\n case 'right':\n x2 = '100%';\n break;\n case 'top right':\n x1 = '0%';\n y1 = '100%';\n x2 = '100%';\n y2 = '0%';\n break;\n case 'top left':\n x1 = '100%';\n y1 = '100%';\n x2 = '0%';\n y2 = '0%';\n break;\n case 'bottom right':\n x2 = '100%';\n y2 = '100%';\n break;\n case 'bottom left':\n x1 = '100%';\n y2 = '100%';\n break;\n }\n }\n // 2. Check for Degrees (45deg, 90deg, etc.)\n else if (firstPart.match(/^-?[\\d.]+(deg|rad|turn|grad)$/)) {\n stopsStartIndex = 1;\n const val = parseFloat(firstPart);\n // CSS 0deg is Top (North), 90deg is Right (East), 180deg is Bottom (South)\n // We convert this to SVG coordinates on a unit square (0-100%).\n // Formula: Map angle to perimeter coordinates.\n if (!isNaN(val)) {\n const deg = firstPart.includes('rad') ? val * (180 / Math.PI) : val;\n const cssRad = ((deg - 90) * Math.PI) / 180; // Correct CSS angle offset\n\n // Calculate standard vector for rectangle center (50, 50)\n const scale = 50; // Distance from center to edge (approx)\n const cos = Math.cos(cssRad); // Y component (reversed in SVG)\n const sin = Math.sin(cssRad); // X component\n\n // Invert Y for SVG coordinate system\n x1 = (50 - sin * scale).toFixed(1) + '%';\n y1 = (50 + cos * scale).toFixed(1) + '%';\n x2 = (50 + sin * scale).toFixed(1) + '%';\n y2 = (50 - cos * scale).toFixed(1) + '%';\n }\n }\n\n // 3. Process Color Stops\n let stopsXML = '';\n const stopParts = parts.slice(stopsStartIndex);\n\n stopParts.forEach((part, idx) => {\n // Parse \"Color Position\" (e.g., \"red 50%\")\n // Regex looks for optional space + number + unit at the end of the string\n let color = part;\n let offset = Math.round((idx / (stopParts.length - 1)) * 100) + '%';\n\n const posMatch = part.match(/^(.*?)\\s+(-?[\\d.]+(?:%|px)?)$/);\n if (posMatch) {\n color = posMatch[1];\n offset = posMatch[2];\n }\n\n // Handle RGBA/RGB for SVG compatibility\n let opacity = 1;\n if (color.includes('rgba')) {\n const rgbaMatch = color.match(/[\\d.]+/g);\n if (rgbaMatch && rgbaMatch.length >= 4) {\n opacity = rgbaMatch[3];\n color = `rgb(${rgbaMatch[0]},${rgbaMatch[1]},${rgbaMatch[2]})`;\n }\n }\n\n stopsXML += `<stop offset=\"${offset}\" stop-color=\"${color.trim()}\" stop-opacity=\"${opacity}\"/>`;\n });\n\n let strokeAttr = '';\n if (border) {\n strokeAttr = `stroke=\"#${border.color}\" stroke-width=\"${border.width}\"`;\n }\n\n const svg = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n <defs>\n <linearGradient id=\"grad\" x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\">\n ${stopsXML}\n </linearGradient>\n </defs>\n <rect x=\"0\" y=\"0\" width=\"${w}\" height=\"${h}\" rx=\"${radius}\" ry=\"${radius}\" fill=\"url(#grad)\" ${strokeAttr} />\n </svg>`;\n\n return 'data:image/svg+xml;base64,' + btoa(svg);\n } catch (e) {\n console.warn('Gradient generation failed:', e);\n return null;\n }\n}\n\nexport function generateBlurredSVG(w, h, color, radius, blurPx) {\n const padding = blurPx * 3;\n const fullW = w + padding * 2;\n const fullH = h + padding * 2;\n const x = padding;\n const y = padding;\n let shapeTag = '';\n const isCircle = radius >= Math.min(w, h) / 2 - 1 && Math.abs(w - h) < 2;\n\n if (isCircle) {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const rx = w / 2;\n const ry = h / 2;\n shapeTag = `<ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"#${color}\" filter=\"url(#f1)\" />`;\n } else {\n shapeTag = `<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\" rx=\"${radius}\" ry=\"${radius}\" fill=\"#${color}\" filter=\"url(#f1)\" />`;\n }\n\n const svg = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${fullW}\" height=\"${fullH}\" viewBox=\"0 0 ${fullW} ${fullH}\">\n <defs>\n <filter id=\"f1\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"${blurPx}\" />\n </filter>\n </defs>\n ${shapeTag}\n </svg>`;\n\n return {\n data: 'data:image/svg+xml;base64,' + btoa(svg),\n padding: padding,\n };\n}\n\n// src/utils.js\n\n// ... (keep all existing exports) ...\n\n/**\n * Traverses the target DOM and collects all unique font-family names used.\n */\nexport function getUsedFontFamilies(root) {\n const families = new Set();\n\n function scan(node) {\n if (node.nodeType === 1) {\n // Element\n const style = window.getComputedStyle(node);\n const fontList = normalizeFontList(style.fontFamily);\n fontList.forEach((f) => families.add(f));\n }\n for (const child of node.childNodes) {\n scan(child);\n }\n }\n\n // Handle array of roots or single root\n const elements = Array.isArray(root) ? root : [root];\n elements.forEach((el) => {\n const node = typeof el === 'string' ? document.querySelector(el) : el;\n if (node) scan(node);\n });\n\n return families;\n}\n\n/**\n * Scans document.styleSheets to find @font-face URLs for the requested families.\n * Returns an array of { name, url } objects.\n */\nexport async function getAutoDetectedFonts(usedFamilies) {\n const foundFonts = [];\n const processedUrls = new Set();\n\n // Helper to extract clean URL from CSS src string\n const extractUrl = (srcStr) => {\n // Look for url(\"...\") or url('...') or url(...)\n // Prioritize woff, ttf, otf. Avoid woff2 if possible as handling is harder,\n // but if it's the only one, take it (convert logic handles it best effort).\n const matches = srcStr.match(/url\\((['\"]?)(.*?)\\1\\)/g);\n if (!matches) return null;\n\n // Filter for preferred formats\n let chosenUrl = null;\n for (const match of matches) {\n const urlRaw = match.replace(/url\\((['\"]?)(.*?)\\1\\)/, '$2');\n // Skip data URIs for now (unless you want to support base64 embedding)\n if (urlRaw.startsWith('data:')) continue;\n\n if (urlRaw.includes('.ttf') || urlRaw.includes('.otf') || urlRaw.includes('.woff')) {\n chosenUrl = urlRaw;\n break; // Found a good one\n }\n // Fallback\n if (!chosenUrl) chosenUrl = urlRaw;\n }\n return chosenUrl;\n };\n\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n // Accessing cssRules on cross-origin sheets (like Google Fonts) might fail\n // if CORS headers aren't set. We wrap in try/catch.\n const rules = sheet.cssRules || sheet.rules;\n if (!rules) continue;\n\n for (const rule of Array.from(rules)) {\n if (rule.constructor.name === 'CSSFontFaceRule' || rule.type === 5) {\n const familyName = rule.style.getPropertyValue('font-family').replace(/['\"]/g, '').trim();\n\n if (usedFamilies.has(familyName)) {\n const src = rule.style.getPropertyValue('src');\n const url = extractUrl(src);\n\n if (url && !processedUrls.has(url)) {\n processedUrls.add(url);\n foundFonts.push({ name: familyName, url: url });\n }\n }\n }\n }\n } catch (e) {\n // SecurityError is common for external stylesheets (CORS).\n // We cannot scan those automatically via CSSOM.\n console.warn('error:', e);\n console.warn('Cannot scan stylesheet for fonts (CORS restriction):', sheet.href);\n }\n }\n\n return foundFonts;\n}\n","// src/image-processor.js\n\nexport async function getProcessedImage(\n src,\n targetW,\n targetH,\n radius,\n objectFit = 'fill',\n objectPosition = '50% 50%'\n) {\n return new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n\n img.onload = () => {\n const canvas = document.createElement('canvas');\n const scale = 2; // Double resolution\n canvas.width = targetW * scale;\n canvas.height = targetH * scale;\n const ctx = canvas.getContext('2d');\n ctx.scale(scale, scale);\n\n // Normalize radius\n let r = { tl: 0, tr: 0, br: 0, bl: 0 };\n if (typeof radius === 'number') {\n r = { tl: radius, tr: radius, br: radius, bl: radius };\n } else if (typeof radius === 'object' && radius !== null) {\n r = { ...r, ...radius };\n }\n\n // 1. Draw Mask\n ctx.beginPath();\n // ... (radius clamping logic remains the same) ...\n const factor = Math.min(\n targetW / (r.tl + r.tr) || Infinity,\n targetH / (r.tr + r.br) || Infinity,\n targetW / (r.br + r.bl) || Infinity,\n targetH / (r.bl + r.tl) || Infinity\n );\n\n if (factor < 1) {\n r.tl *= factor;\n r.tr *= factor;\n r.br *= factor;\n r.bl *= factor;\n }\n\n ctx.moveTo(r.tl, 0);\n ctx.lineTo(targetW - r.tr, 0);\n ctx.arcTo(targetW, 0, targetW, r.tr, r.tr);\n ctx.lineTo(targetW, targetH - r.br);\n ctx.arcTo(targetW, targetH, targetW - r.br, targetH, r.br);\n ctx.lineTo(r.bl, targetH);\n ctx.arcTo(0, targetH, 0, targetH - r.bl, r.bl);\n ctx.lineTo(0, r.tl);\n ctx.arcTo(0, 0, r.tl, 0, r.tl);\n ctx.closePath();\n ctx.fillStyle = '#000';\n ctx.fill();\n\n // 2. Composite Source-In\n ctx.globalCompositeOperation = 'source-in';\n\n // 3. Draw Image with Object Fit logic\n const wRatio = targetW / img.width;\n const hRatio = targetH / img.height;\n let renderW, renderH;\n\n if (objectFit === 'contain') {\n const fitScale = Math.min(wRatio, hRatio);\n renderW = img.width * fitScale;\n renderH = img.height * fitScale;\n } else if (objectFit === 'cover') {\n const coverScale = Math.max(wRatio, hRatio);\n renderW = img.width * coverScale;\n renderH = img.height * coverScale;\n } else if (objectFit === 'none') {\n renderW = img.width;\n renderH = img.height;\n } else if (objectFit === 'scale-down') {\n const scaleDown = Math.min(1, Math.min(wRatio, hRatio));\n renderW = img.width * scaleDown;\n renderH = img.height * scaleDown;\n } else {\n // 'fill' (default)\n renderW = targetW;\n renderH = targetH;\n }\n\n // Handle Object Position (simplified parsing for \"x% y%\" or keywords)\n let posX = 0.5; // Default center\n let posY = 0.5;\n\n const posParts = objectPosition.split(' ');\n if (posParts.length > 0) {\n const parsePos = (val) => {\n if (val === 'left' || val === 'top') return 0;\n if (val === 'center') return 0.5;\n if (val === 'right' || val === 'bottom') return 1;\n if (val.includes('%')) return parseFloat(val) / 100;\n return 0.5; // fallback\n };\n posX = parsePos(posParts[0]);\n posY = posParts.length > 1 ? parsePos(posParts[1]) : 0.5;\n }\n\n const renderX = (targetW - renderW) * posX;\n const renderY = (targetH - renderH) * posY;\n\n ctx.drawImage(img, renderX, renderY, renderW, renderH);\n\n resolve(canvas.toDataURL('image/png'));\n };\n\n img.onerror = () => resolve(null);\n img.src = src;\n });\n}\n","// src/index.js\nimport * as PptxGenJSImport from 'pptxgenjs';\nimport html2canvas from 'html2canvas';\nimport { PPTXEmbedFonts } from './font-embedder.js';\nimport JSZip from 'jszip';\n\n// Normalize import\nconst PptxGenJS = PptxGenJSImport?.default ?? PptxGenJSImport;\n\nimport {\n parseColor,\n getTextStyle,\n isTextContainer,\n getVisibleShadow,\n generateGradientSVG,\n getRotation,\n svgToPng,\n getPadding,\n getSoftEdges,\n generateBlurredSVG,\n getBorderInfo,\n generateCompositeBorderSVG,\n isClippedByParent,\n generateCustomShapeSVG,\n getUsedFontFamilies,\n getAutoDetectedFonts,\n extractTableData,\n computeTableCellFill\n} from './utils.js';\nimport { getProcessedImage } from './image-processor.js';\n\nconst PPI = 96;\nconst PX_TO_INCH = 1 / PPI;\n\n/**\n * Main export function.\n * @param {HTMLElement | string | Array<HTMLElement | string>} target\n * @param {Object} options\n * @param {string} [options.fileName]\n * @param {boolean} [options.skipDownload=false] - If true, prevents automatic download\n * @param {Object} [options.listConfig] - Config for bullets\n * @returns {Promise<Blob>} - Returns the generated PPTX Blob\n */\nexport async function exportToPptx(target, options = {}) {\n const resolvePptxConstructor = (pkg) => {\n if (!pkg) return null;\n if (typeof pkg === 'function') return pkg;\n if (pkg && typeof pkg.default === 'function') return pkg.default;\n if (pkg && typeof pkg.PptxGenJS === 'function') return pkg.PptxGenJS;\n if (pkg && pkg.PptxGenJS && typeof pkg.PptxGenJS.default === 'function')\n return pkg.PptxGenJS.default;\n return null;\n };\n\n const PptxConstructor = resolvePptxConstructor(PptxGenJS);\n if (!PptxConstructor) throw new Error('PptxGenJS constructor not found.');\n const pptx = new PptxConstructor();\n pptx.layout = 'LAYOUT_16x9';\n\n const elements = Array.isArray(target) ? target : [target];\n\n for (const el of elements) {\n const root = typeof el === 'string' ? document.querySelector(el) : el;\n if (!root) {\n console.warn('Element not found, skipping slide:', el);\n continue;\n }\n const slide = pptx.addSlide();\n await processSlide(root, slide, pptx, options);\n }\n\n // 3. Font Embedding Logic\n let finalBlob;\n let fontsToEmbed = options.fonts || [];\n\n if (options.autoEmbedFonts) {\n // A. Scan DOM for used font families\n const usedFamilies = getUsedFontFamilies(elements);\n\n // B. Scan CSS for URLs matches\n const detectedFonts = await getAutoDetectedFonts(usedFamilies);\n\n // C. Merge (Avoid duplicates)\n const explicitNames = new Set(fontsToEmbed.map((f) => f.name));\n for (const autoFont of detectedFonts) {\n if (!explicitNames.has(autoFont.name)) {\n fontsToEmbed.push(autoFont);\n }\n }\n\n if (detectedFonts.length > 0) {\n console.log(\n 'Auto-detected fonts:',\n detectedFonts.map((f) => f.name)\n );\n }\n }\n\n if (fontsToEmbed.length > 0) {\n // Generate initial PPTX\n const initialBlob = await pptx.write({ outputType: 'blob' });\n\n // Load into Embedder\n const zip = await JSZip.loadAsync(initialBlob);\n const embedder = new PPTXEmbedFonts();\n await embedder.loadZip(zip);\n\n // Fetch and Embed\n for (const fontCfg of fontsToEmbed) {\n try {\n const response = await fetch(fontCfg.url);\n if (!response.ok) throw new Error(`Failed to fetch ${fontCfg.url}`);\n const buffer = await response.arrayBuffer();\n\n // Infer type\n const ext = fontCfg.url.split('.').pop().split(/[?#]/)[0].toLowerCase();\n let type = 'ttf';\n if (['woff', 'otf'].includes(ext)) type = ext;\n\n await embedder.addFont(fontCfg.name, buffer, type);\n } catch (e) {\n console.warn(`Failed to embed font: ${fontCfg.name} (${fontCfg.url})`, e);\n }\n }\n\n await embedder.updateFiles();\n finalBlob = await embedder.generateBlob();\n } else {\n // No fonts to embed\n finalBlob = await pptx.write({ outputType: 'blob' });\n }\n\n // 4. Output Handling\n // If skipDownload is NOT true, proceed with browser download\n if (!options.skipDownload) {\n const fileName = options.fileName || 'export.pptx';\n const url = URL.createObjectURL(finalBlob);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n // Always return the blob so the caller can use it (e.g. upload to server)\n return finalBlob;\n}\n\n/**\n * Worker function to process a single DOM element into a single PPTX slide.\n * @param {HTMLElement} root - The root element for this slide.\n * @param {PptxGenJS.Slide} slide - The PPTX slide object to add content to.\n * @param {PptxGenJS} pptx - The main PPTX instance.\n */\nasync function processSlide(root, slide, pptx, globalOptions = {}) {\n const rootRect = root.getBoundingClientRect();\n const PPTX_WIDTH_IN = 10;\n const PPTX_HEIGHT_IN = 5.625;\n\n const contentWidthIn = rootRect.width * PX_TO_INCH;\n const contentHeightIn = rootRect.height * PX_TO_INCH;\n const scale = Math.min(PPTX_WIDTH_IN / contentWidthIn, PPTX_HEIGHT_IN / contentHeightIn);\n\n const layoutConfig = {\n rootX: rootRect.x,\n rootY: rootRect.y,\n scale: scale,\n offX: (PPTX_WIDTH_IN - contentWidthIn * scale) / 2,\n offY: (PPTX_HEIGHT_IN - contentHeightIn * scale) / 2,\n };\n\n const renderQueue = [];\n const asyncTasks = []; // Queue for heavy operations (Images, Canvas)\n let domOrderCounter = 0;\n\n // Sync Traversal Function\n function collect(node, parentZIndex) {\n const order = domOrderCounter++;\n\n let currentZ = parentZIndex;\n let nodeStyle = null;\n const nodeType = node.nodeType;\n\n if (nodeType === 1) {\n nodeStyle = window.getComputedStyle(node);\n // Optimization: Skip completely hidden elements immediately\n if (\n nodeStyle.display === 'none' ||\n nodeStyle.visibility === 'hidden' ||\n nodeStyle.opacity === '0'\n ) {\n return;\n }\n if (nodeStyle.zIndex !== 'auto') {\n currentZ = parseInt(nodeStyle.zIndex);\n }\n }\n\n // Prepare the item. If it needs async work, it returns a 'job'\n const result = prepareRenderItem(\n node,\n { ...layoutConfig, root },\n order,\n pptx,\n currentZ,\n nodeStyle,\n globalOptions\n );\n\n if (result) {\n if (result.items) {\n // Push items immediately to queue (data might be missing but filled later)\n renderQueue.push(...result.items);\n }\n if (result.job) {\n // Push the promise-returning function to the task list\n asyncTasks.push(result.job);\n }\n if (result.stopRecursion) return;\n }\n\n // Recurse children synchronously\n const childNodes = node.childNodes;\n for (let i = 0; i < childNodes.length; i++) {\n collect(childNodes[i], currentZ);\n }\n }\n\n // 1. Traverse and build the structure (Fast)\n collect(root, 0);\n\n // 2. Execute all heavy tasks in parallel (Fast)\n if (asyncTasks.length > 0) {\n await Promise.all(asyncTasks.map((task) => task()));\n }\n\n // 3. Cleanup and Sort\n // Remove items that failed to generate data (marked with skip)\n const finalQueue = renderQueue.filter(\n (item) => !item.skip && (item.type !== 'image' || item.options.data)\n );\n\n finalQueue.sort((a, b) => {\n if (a.zIndex !== b.zIndex) return a.zIndex - b.zIndex;\n return a.domOrder - b.domOrder;\n });\n\n // 4. Add to Slide\n for (const item of finalQueue) {\n if (item.type === 'shape') slide.addShape(item.shapeType, item.options);\n if (item.type === 'image') slide.addImage(item.options);\n if (item.type === 'text') slide.addText(item.textParts, item.options);\n if (item.type === 'table') {\n slide.addTable(item.tableData.rows, {\n x: item.options.x,\n y: item.options.y,\n w: item.options.w,\n colW: item.tableData.colWidths, // Essential for correct layout\n autoPage: false,\n // Remove default table styles so our extracted CSS applies cleanly\n border: { type: \"none\" },\n fill: { color: \"FFFFFF\", transparency: 100 }\n });\n }\n }\n}\n\n/**\n * Optimized html2canvas wrapper\n * Includes fix for cropped icons by adjusting styles in the cloned document.\n */\nasync function elementToCanvasImage(node, widthPx, heightPx) {\n return new Promise((resolve) => {\n // 1. Assign a temp ID to locate the node inside the cloned document\n const originalId = node.id;\n const tempId = 'pptx-capture-' + Math.random().toString(36).substr(2, 9);\n node.id = tempId;\n\n const width = Math.max(Math.ceil(widthPx), 1);\n const height = Math.max(Math.ceil(heightPx), 1);\n const style = window.getComputedStyle(node);\n\n html2canvas(node, {\n backgroundColor: null,\n logging: false,\n scale: 3, // Higher scale for sharper icons\n useCORS: true, // critical for external fonts/images\n onclone: (clonedDoc) => {\n const clonedNode = clonedDoc.getElementById(tempId);\n if (clonedNode) {\n // --- FIX: PREVENT ICON CLIPPING ---\n // 1. Force overflow visible so glyphs bleeding out aren't cut\n clonedNode.style.overflow = 'visible';\n\n // 2. Adjust alignment for Icons to prevent baseline clipping\n // (Applies to <i>, <span>, or standard icon classes)\n const tag = clonedNode.tagName;\n if (tag === 'I' || tag === 'SPAN' || clonedNode.className.includes('fa-')) {\n // Flex center helps align the glyph exactly in the middle of the box\n // preventing top/bottom cropping due to line-height mismatches.\n clonedNode.style.display = 'inline-flex';\n clonedNode.style.justifyContent = 'center';\n clonedNode.style.alignItems = 'center';\n\n // Remove margins that might offset the capture\n clonedNode.style.margin = '0';\n\n // Ensure the font fits\n clonedNode.style.lineHeight = '1';\n clonedNode.style.verticalAlign = 'middle';\n }\n }\n },\n })\n .then((canvas) => {\n // Restore the original ID\n if (originalId) node.id = originalId;\n else node.removeAttribute('id');\n\n const destCanvas = document.createElement('canvas');\n destCanvas.width = width;\n destCanvas.height = height;\n const ctx = destCanvas.getContext('2d');\n\n // Draw captured canvas.\n // We simply draw it to fill the box. Since we centered it in 'onclone',\n // the glyph should now be visible within the bounds.\n ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, width, height);\n\n // --- Border Radius Clipping (Existing Logic) ---\n let tl = parseFloat(style.borderTopLeftRadius) || 0;\n let tr = parseFloat(style.borderTopRightRadius) || 0;\n let br = parseFloat(style.borderBottomRightRadius) || 0;\n let bl = parseFloat(style.borderBottomLeftRadius) || 0;\n\n const f = Math.min(\n width / (tl + tr) || Infinity,\n height / (tr + br) || Infinity,\n width / (br + bl) || Infinity,\n height / (bl + tl) || Infinity\n );\n\n if (f < 1) {\n tl *= f;\n tr *= f;\n br *= f;\n bl *= f;\n }\n\n if (tl + tr + br + bl > 0) {\n ctx.globalCompositeOperation = 'destination-in';\n ctx.beginPath();\n ctx.moveTo(tl, 0);\n ctx.lineTo(width - tr, 0);\n ctx.arcTo(width, 0, width, tr, tr);\n ctx.lineTo(width, height - br);\n ctx.arcTo(width, height, width - br, height, br);\n ctx.lineTo(bl, height);\n ctx.arcTo(0, height, 0, height - bl, bl);\n ctx.lineTo(0, tl);\n ctx.arcTo(0, 0, tl, 0, tl);\n ctx.closePath();\n ctx.fill();\n }\n\n resolve(destCanvas.toDataURL('image/png'));\n })\n .catch((e) => {\n if (originalId) node.id = originalId;\n else node.removeAttribute('id');\n console.warn('Canvas capture failed for node', node, e);\n resolve(null);\n });\n });\n}\n\n/**\n * Helper to identify elements that should be rendered as icons (Images).\n * Detects Custom Elements AND generic tags (<i>, <span>) with icon classes/pseudo-elements.\n */\nfunction isIconElement(node) {\n // 1. Custom Elements (hyphenated tags) or Explicit Library Tags\n const tag = node.tagName.toUpperCase();\n if (\n tag.includes('-') ||\n [\n 'MATERIAL-ICON',\n 'ICONIFY-ICON',\n 'REMIX-ICON',\n 'ION-ICON',\n 'EVA-ICON',\n 'BOX-ICON',\n 'FA-ICON',\n ].includes(tag)\n ) {\n return true;\n }\n\n // 2. Class-based Icons (FontAwesome, Bootstrap, Material symbols) on <i> or <span>\n if (tag === 'I' || tag === 'SPAN') {\n const cls = node.getAttribute('class') || '';\n if (\n typeof cls === 'string' &&\n (cls.includes('fa-') ||\n cls.includes('fas') ||\n cls.includes('far') ||\n cls.includes('fab') ||\n cls.includes('bi-') ||\n cls.includes('material-icons') ||\n cls.includes('icon'))\n ) {\n // Double-check: Must have pseudo-element content to be a CSS icon\n const before = window.getComputedStyle(node, '::before').content;\n const after = window.getComputedStyle(node, '::after').content;\n const hasContent = (c) => c && c !== 'none' && c !== 'normal' && c !== '\"\"';\n\n if (hasContent(before) || hasContent(after)) return true;\n }\n }\n\n return false;\n}\n\n/**\n * Replaces createRenderItem.\n * Returns { items: [], job: () => Promise, stopRecursion: boolean }\n */\nfunction prepareRenderItem(\n node,\n config,\n domOrder,\n pptx,\n effectiveZIndex,\n computedStyle,\n globalOptions = {}\n) {\n // 1. Text Node Handling\n if (node.nodeType === 3) {\n const textContent = node.nodeValue.trim();\n if (!textContent) return null;\n\n const parent = node.parentElement;\n if (!parent) return null;\n\n if (isTextContainer(parent)) return null; // Parent handles it\n\n const range = document.createRange();\n range.selectNode(node);\n const rect = range.getBoundingClientRect();\n range.detach();\n\n const style = window.getComputedStyle(parent);\n const widthPx = rect.width;\n const heightPx = rect.height;\n const unrotatedW = widthPx * PX_TO_INCH * config.scale;\n const unrotatedH = heightPx * PX_TO_INCH * config.scale;\n\n const x = config.offX + (rect.left - config.rootX) * PX_TO_INCH * config.scale;\n const y = config.offY + (rect.top - config.rootY) * PX_TO_INCH * config.scale;\n\n return {\n items: [\n {\n type: 'text',\n zIndex: effectiveZIndex,\n domOrder,\n textParts: [\n {\n text: textContent,\n options: (() => {\n const opts = getTextStyle(style, config.scale, textContent, globalOptions);\n const bg = parseColor(style.backgroundColor);\n if (opts.highlight && bg.hex && bg.opacity > 0 && !isTextContainer(parent)) {\n delete opts.highlight;\n }\n return opts;\n })(),\n },\n ],\n options: { x, y, w: unrotatedW, h: unrotatedH, margin: 0, autoFit: false },\n },\n ],\n stopRecursion: false,\n };\n }\n\n if (node.nodeType !== 1) return null;\n const style = computedStyle; // Use pre-computed style\n\n const rect = node.getBoundingClientRect();\n if (rect.width < 0.5 || rect.height < 0.5) return null;\n\n const zIndex = effectiveZIndex;\n const rotation = getRotation(style.transform);\n const elementOpacity = parseFloat(style.opacity);\n const safeOpacity = isNaN(elementOpacity) ? 1 : elementOpacity;\n\n const widthPx = node.offsetWidth || rect.width;\n const heightPx = node.offsetHeight || rect.height;\n const unrotatedW = widthPx * PX_TO_INCH * config.scale;\n const unrotatedH = heightPx * PX_TO_INCH * config.scale;\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n\n let x = config.offX + (centerX - config.rootX) * PX_TO_INCH * config.scale - unrotatedW / 2;\n let y = config.offY + (centerY - config.rootY) * PX_TO_INCH * config.scale - unrotatedH / 2;\n let w = unrotatedW;\n let h = unrotatedH;\n\n const items = [];\n\n if (node.tagName === 'TABLE') {\n const tableData = extractTableData(node, config.scale, { ...globalOptions, root: config.root });\n const cellBgItems = [];\n const renderCellBg = globalOptions.tableConfig?.renderCellBackgrounds !== false;\n\n if (renderCellBg) {\n const trList = node.querySelectorAll('tr');\n trList.forEach((tr) => {\n const cellList = Array.from(tr.children).filter((c) => ['TD', 'TH'].includes(c.tagName));\n cellList.forEach((cell) => {\n const style = window.getComputedStyle(cell);\n const fill = computeTableCellFill(style, cell, config.root, globalOptions);\n if (!fill) return;\n\n const rect = cell.getBoundingClientRect();\n const wIn = rect.width * PX_TO_INCH * config.scale;\n const hIn = rect.height * PX_TO_INCH * config.scale;\n const xIn = config.offX + (rect.left - config.rootX) * PX_TO_INCH * config.scale;\n const yIn = config.offY + (rect.top - config.rootY) * PX_TO_INCH * config.scale;\n\n cellBgItems.push({\n type: 'shape',\n zIndex: effectiveZIndex - 0.5,\n domOrder,\n shapeType: 'rect',\n options: { x: xIn, y: yIn, w: wIn, h: hIn, fill: fill, line: { color: 'FFFFFF', transparency: 100 } }\n });\n });\n });\n }\n\n // Calculate total table width to ensure X position is correct\n // (Though x calculation above usually handles it, tables can be finicky)\n return {\n items: [\n ...cellBgItems,\n {\n type: 'table',\n zIndex: effectiveZIndex,\n domOrder,\n tableData: tableData,\n options: { x, y, w: unrotatedW, h: unrotatedH }\n }\n ],\n stopRecursion: true // Important: Don't process TR/TD as separate shapes\n };\n }\n\n if ((node.tagName === 'UL' || node.tagName === 'OL') && !isComplexHierarchy(node)) {\n const listItems = [];\n const liChildren = Array.from(node.children).filter((c) => c.tagName === 'LI');\n\n liChildren.forEach((child, index) => {\n const liStyle = window.getComputedStyle(child);\n const liRect = child.getBoundingClientRect();\n const parentRect = node.getBoundingClientRect(); // node is UL/OL\n\n // 1. Determine Bullet Config\n let bullet = { type: 'bullet' };\n const listStyleType = liStyle.listStyleType || 'disc';\n\n if (node.tagName === 'OL' || listStyleType === 'decimal') {\n bullet = { type: 'number' };\n } else if (listStyleType === 'none') {\n bullet = false;\n } else {\n let code = '2022'; // disc\n if (listStyleType === 'circle') code = '25CB';\n if (listStyleType === 'square') code = '25A0';\n\n // --- CHANGE: Color & Size Logic (Option > ::marker > CSS color) ---\n let finalHex = '000000';\n let markerFontSize = null;\n\n // A. Check Global Option override\n if (globalOptions?.listConfig?.color) {\n finalHex = parseColor(globalOptions.listConfig.color).hex || '000000';\n }\n // B. Check ::marker pseudo element (supported in modern browsers)\n else {\n const markerStyle = window.getComputedStyle(child, '::marker');\n const markerColor = parseColor(markerStyle.color);\n if (markerColor.hex) {\n finalHex = markerColor.hex;\n } else {\n // C. Fallback to LI text color\n const colorObj = parseColor(liStyle.color);\n if (colorObj.hex) finalHex = colorObj.hex;\n }\n\n // Check ::marker font-size\n const markerFs = parseFloat(markerStyle.fontSize);\n if (!isNaN(markerFs) && markerFs > 0) {\n // Convert px->pt for PPTX\n markerFontSize = markerFs * 0.75 * config.scale;\n }\n }\n\n bullet = { code, color: finalHex };\n if (markerFontSize) {\n bullet.fontSize = markerFontSize;\n }\n }\n\n // 2. Calculate Dynamic Indent (Respects padding-left)\n // Visual Indent = Distance from UL left edge to LI Content left edge.\n // PptxGenJS 'indent' = Space between bullet and text? \n // Actually PptxGenJS 'indent' allows setting the hanging indent.\n // We calculate the TOTAL visual offset from the parent container.\n // 1 px = 0.75 pt (approx, standard DTP).\n // We must scale it by config.scale.\n const visualIndentPx = liRect.left - parentRect.left;\n /*\n Standard indent in PPT is ~27pt.\n If visualIndentPx is small (e.g. 10px padding), we want small indent.\n If visualIndentPx is large (40px padding), we want large indent.\n We treat 'indent' as the value to pass to PptxGenJS.\n */\n const computedIndentPt = visualIndentPx * 0.75 * config.scale;\n\n if (bullet && computedIndentPt > 0) {\n bullet.indent = computedIndentPt;\n // Also support custom margin between bullet and text if provided in listConfig?\n // For now, computedIndentPt covers the visual placement.\n }\n\n // 3. Extract Text Parts\n const parts = collectListParts(child, liStyle, config.scale, globalOptions);\n\n if (parts.length > 0) {\n parts.forEach((p) => {\n if (!p.options) p.options = {};\n });\n\n // A. Apply Bullet\n // Workaround: pptxgenjs bullets inherit the style of the text run they are attached to.\n // To support ::marker styles (color, size) that differ from the text, we create\n // a \"dummy\" text run at the start of the list item that carries the bullet configuration.\n if (bullet) {\n const firstPartInfo = parts[0].options;\n\n // Create a dummy run. We use a Zero Width Space to ensure it's rendered but invisible.\n // This \"run\" will hold the bullet and its specific color/size.\n const bulletRun = {\n text: '\\u200B',\n options: {\n ...firstPartInfo, // Inherit base props (fontFace, etc.)\n color: bullet.color || firstPartInfo.color,\n fontSize: bullet.fontSize || firstPartInfo.fontSize,\n bullet: bullet\n }\n };\n\n // Don't duplicate transparent or empty color from firstPart if bullet has one\n if (bullet.color) bulletRun.options.color = bullet.color;\n if (bullet.fontSize) bulletRun.options.fontSize = bullet.fontSize;\n\n // Prepend\n parts.unshift(bulletRun);\n }\n\n // B. Apply Spacing\n let ptBefore = 0;\n let ptAfter = 0;\n\n // A. Check Global Options (Expected in Points)\n if (globalOptions.listConfig?.spacing) {\n if (typeof globalOptions.listConfig.spacing.before === 'number') {\n ptBefore = globalOptions.listConfig.spacing.before;\n }\n if (typeof globalOptions.listConfig.spacing.after === 'number') {\n ptAfter = globalOptions.listConfig.spacing.after;\n }\n }\n // B. Fallback to CSS Margins (Convert px -> pt)\n else {\n const mt = parseFloat(liStyle.marginTop) || 0;\n const mb = parseFloat(liStyle.marginBottom) || 0;\n if (mt > 0) ptBefore = mt * 0.75 * config.scale;\n if (mb > 0) ptAfter = mb * 0.75 * config.scale;\n }\n\n if (ptBefore > 0) parts[0].options.paraSpaceBefore = ptBefore;\n if (ptAfter > 0) parts[0].options.paraSpaceAfter = ptAfter;\n\n if (index < liChildren.length - 1) {\n parts[parts.length - 1].options.breakLine = true;\n }\n\n listItems.push(...parts);\n }\n });\n\n if (listItems.length > 0) {\n // Add background if exists\n const bgColorObj = parseColor(style.backgroundColor);\n if (bgColorObj.hex && bgColorObj.opacity > 0) {\n items.push({\n type: 'shape',\n zIndex,\n domOrder,\n shapeType: 'rect',\n options: { x, y, w, h, fill: { color: bgColorObj.hex } },\n });\n }\n\n items.push({\n type: 'text',\n zIndex: zIndex + 1,\n domOrder,\n textParts: listItems,\n options: {\n x,\n y,\n w,\n h,\n align: 'left',\n valign: 'top',\n margin: 0,\n autoFit: false,\n wrap: true,\n },\n });\n\n return { items, stopRecursion: true };\n }\n }\n\n if (node.tagName === 'CANVAS') {\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { x, y, w, h, rotate: rotation, data: null }\n };\n\n const job = async () => {\n try {\n // Direct data extraction from the canvas element\n // This preserves the exact current state of the chart\n const dataUrl = node.toDataURL('image/png');\n\n // Basic validation\n if (dataUrl && dataUrl.length > 10) {\n item.options.data = dataUrl;\n } else {\n item.skip = true;\n }\n } catch (e) {\n // Tainted canvas (CORS issues) will throw here\n console.warn('Failed to capture canvas content:', e);\n item.skip = true;\n }\n };\n\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- ASYNC JOB: SVG Tags ---\n if (node.nodeName.toUpperCase() === 'SVG') {\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { data: null, x, y, w, h, rotate: rotation },\n };\n\n const job = async () => {\n const processed = await svgToPng(node);\n if (processed) item.options.data = processed;\n else item.skip = true;\n };\n\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- ASYNC JOB: IMG Tags ---\n if (node.tagName === 'IMG') {\n let radii = {\n tl: parseFloat(style.borderTopLeftRadius) || 0,\n tr: parseFloat(style.borderTopRightRadius) || 0,\n br: parseFloat(style.borderBottomRightRadius) || 0,\n bl: parseFloat(style.borderBottomLeftRadius) || 0,\n };\n\n const hasAnyRadius = radii.tl > 0 || radii.tr > 0 || radii.br > 0 || radii.bl > 0;\n if (!hasAnyRadius) {\n const parent = node.parentElement;\n const parentStyle = window.getComputedStyle(parent);\n if (parentStyle.overflow !== 'visible') {\n const pRadii = {\n tl: parseFloat(parentStyle.borderTopLeftRadius) || 0,\n tr: parseFloat(parentStyle.borderTopRightRadius) || 0,\n br: parseFloat(parentStyle.borderBottomRightRadius) || 0,\n bl: parseFloat(parentStyle.borderBottomLeftRadius) || 0,\n };\n const pRect = parent.getBoundingClientRect();\n if (Math.abs(pRect.width - rect.width) < 5 && Math.abs(pRect.height - rect.height) < 5) {\n radii = pRadii;\n }\n }\n }\n\n const objectFit = style.objectFit || 'fill'; // default CSS behavior is fill\n const objectPosition = style.objectPosition || '50% 50%';\n\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { x, y, w, h, rotate: rotation, data: null },\n };\n\n const job = async () => {\n const processed = await getProcessedImage(\n node.src,\n widthPx,\n heightPx,\n radii,\n objectFit,\n objectPosition\n );\n if (processed) item.options.data = processed;\n else item.skip = true;\n };\n\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- ASYNC JOB: Icons and Other Elements ---\n if (isIconElement(node)) {\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { x, y, w, h, rotate: rotation, data: null },\n };\n const job = async () => {\n const pngData = await elementToCanvasImage(node, widthPx, heightPx);\n if (pngData) item.options.data = pngData;\n else item.skip = true;\n };\n return { items: [item], job, stopRecursion: true };\n }\n\n // Radii logic\n const borderRadiusValue = parseFloat(style.borderRadius) || 0;\n const borderBottomLeftRadius = parseFloat(style.borderBottomLeftRadius) || 0;\n const borderBottomRightRadius = parseFloat(style.borderBottomRightRadius) || 0;\n const borderTopLeftRadius = parseFloat(style.borderTopLeftRadius) || 0;\n const borderTopRightRadius = parseFloat(style.borderTopRightRadius) || 0;\n\n const hasPartialBorderRadius =\n (borderBottomLeftRadius > 0 && borderBottomLeftRadius !== borderRadiusValue) ||\n (borderBottomRightRadius > 0 && borderBottomRightRadius !== borderRadiusValue) ||\n (borderTopLeftRadius > 0 && borderTopLeftRadius !== borderRadiusValue) ||\n (borderTopRightRadius > 0 && borderTopRightRadius !== borderRadiusValue) ||\n (borderRadiusValue === 0 &&\n (borderBottomLeftRadius ||\n borderBottomRightRadius ||\n borderTopLeftRadius ||\n borderTopRightRadius));\n\n // --- PRIORITY SVG: Solid Fill with Partial Border Radius (Vector Cone/Tab) ---\n // Fix for \"missing cone\": Prioritize SVG vector generation over Raster Canvas for simple shapes with partial radii.\n // This avoids html2canvas failures on empty divs.\n const tempBg = parseColor(style.backgroundColor);\n const isTxt = isTextContainer(node);\n\n if (hasPartialBorderRadius && tempBg.hex && !isTxt) {\n const shapeSvg = generateCustomShapeSVG(\n widthPx,\n heightPx,\n tempBg.hex,\n tempBg.opacity,\n {\n tl: parseFloat(style.borderTopLeftRadius) || 0,\n tr: parseFloat(style.borderTopRightRadius) || 0,\n br: parseFloat(style.borderBottomRightRadius) || 0,\n bl: parseFloat(style.borderBottomLeftRadius) || 0,\n }\n );\n\n return {\n items: [{\n type: 'image',\n zIndex,\n domOrder,\n options: { data: shapeSvg, x, y, w, h, rotate: rotation },\n }],\n stopRecursion: true // Treat as leaf\n };\n }\n\n // --- ASYNC JOB: Clipped Divs via Canvas ---\n if (hasPartialBorderRadius && isClippedByParent(node)) {\n const marginLeft = parseFloat(style.marginLeft) || 0;\n const marginTop = parseFloat(style.marginTop) || 0;\n x += marginLeft * PX_TO_INCH * config.scale;\n y += marginTop * PX_TO_INCH * config.scale;\n\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { x, y, w, h, rotate: rotation, data: null },\n };\n\n const job = async () => {\n const canvasImageData = await elementToCanvasImage(node, widthPx, heightPx);\n if (canvasImageData) item.options.data = canvasImageData;\n else item.skip = true;\n };\n\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- SYNC: Standard CSS Extraction ---\n const bgColorObj = parseColor(style.backgroundColor);\n const bgClip = style.webkitBackgroundClip || style.backgroundClip;\n const isBgClipText = bgClip === 'text';\n const hasGradient =\n !isBgClipText && style.backgroundImage && style.backgroundImage.includes('linear-gradient');\n\n const borderColorObj = parseColor(style.borderColor);\n const borderWidth = parseFloat(style.borderWidth);\n const hasBorder = borderWidth > 0 && borderColorObj.hex;\n\n const borderInfo = getBorderInfo(style, config.scale);\n const hasUniformBorder = borderInfo.type === 'uniform';\n const hasCompositeBorder = borderInfo.type === 'composite';\n\n const shadowStr = style.boxShadow;\n const hasShadow = shadowStr && shadowStr !== 'none';\n const softEdge = getSoftEdges(style.filter, config.scale);\n\n let isImageWrapper = false;\n const imgChild = Array.from(node.children).find((c) => c.tagName === 'IMG');\n if (imgChild) {\n const childW = imgChild.offsetWidth || imgChild.getBoundingClientRect().width;\n const childH = imgChild.offsetHeight || imgChild.getBoundingClientRect().height;\n if (childW >= widthPx - 2 && childH >= heightPx - 2) isImageWrapper = true;\n }\n\n let textPayload = null;\n const isText = isTextContainer(node);\n\n if (isText) {\n const textParts = [];\n let trimNextLeading = false;\n\n node.childNodes.forEach((child, index) => {\n // Handle <br> tags\n if (child.tagName === 'BR') {\n // 1. Trim trailing space from the *previous* text part to prevent double wrapping\n if (textParts.length > 0) {\n const lastPart = textParts[textParts.length - 1];\n if (lastPart.text && typeof lastPart.text === 'string') {\n lastPart.text = lastPart.text.trimEnd();\n }\n }\n\n textParts.push({ text: '', options: { breakLine: true } });\n\n // 2. Signal to trim leading space from the *next* text part\n trimNextLeading = true;\n return;\n }\n\n let textVal = child.nodeType === 3 ? child.nodeValue : child.textContent;\n let nodeStyle = child.nodeType === 1 ? window.getComputedStyle(child) : style;\n textVal = textVal.replace(/[\\n\\r\\t]+/g, ' ').replace(/\\s{2,}/g, ' ');\n\n // Trimming logic\n if (index === 0) textVal = textVal.trimStart();\n if (trimNextLeading) {\n textVal = textVal.trimStart();\n trimNextLeading = false;\n }\n\n if (index === node.childNodes.length - 1) textVal = textVal.trimEnd();\n if (nodeStyle.textTransform === 'uppercase') textVal = textVal.toUpperCase();\n if (nodeStyle.textTransform === 'lowercase') textVal = textVal.toLowerCase();\n\n if (textVal.length > 0) {\n const textOpts = getTextStyle(nodeStyle, config.scale, textVal, globalOptions);\n\n // BUG FIX: Numbers 1 and 2 having background.\n // If this is a naked Text Node (nodeType 3), it inherits style from the parent container.\n // The parent container's background is already rendered as the Shape Fill.\n // We must NOT render it again as a Text Highlight, otherwise it looks like a solid marker on top of the shape.\n if (child.nodeType === 3 && textOpts.highlight) {\n delete textOpts.highlight;\n }\n\n textParts.push({ text: textVal, options: textOpts });\n }\n });\n\n if (textParts.length > 0) {\n let align = style.textAlign || 'left';\n if (align === 'start') align = 'left';\n if (align === 'end') align = 'right';\n let valign = 'top';\n if (style.alignItems === 'center') valign = 'middle';\n if (style.justifyContent === 'center' && style.display.includes('flex')) align = 'center';\n\n const pt = parseFloat(style.paddingTop) || 0;\n const pb = parseFloat(style.paddingBottom) || 0;\n if (Math.abs(pt - pb) < 2 && bgColorObj.hex) valign = 'middle';\n\n let padding = getPadding(style, config.scale);\n if (align === 'center' && valign === 'middle') padding = [0, 0, 0, 0];\n\n textPayload = { text: textParts, align, valign, inset: padding };\n }\n }\n\n if (hasGradient || (softEdge && bgColorObj.hex && !isImageWrapper)) {\n let bgData = null;\n let padIn = 0;\n if (softEdge) {\n const svgInfo = generateBlurredSVG(\n widthPx,\n heightPx,\n bgColorObj.hex,\n borderRadiusValue,\n softEdge\n );\n bgData = svgInfo.data;\n padIn = svgInfo.padding * PX_TO_INCH * config.scale;\n } else {\n bgData = generateGradientSVG(\n widthPx,\n heightPx,\n style.backgroundImage,\n borderRadiusValue,\n hasBorder ? { color: borderColorObj.hex, width: borderWidth } : null\n );\n }\n\n if (bgData) {\n items.push({\n type: 'image',\n zIndex,\n domOrder,\n options: {\n data: bgData,\n x: x - padIn,\n y: y - padIn,\n w: w + padIn * 2,\n h: h + padIn * 2,\n rotate: rotation,\n },\n });\n }\n\n if (textPayload) {\n textPayload.text[0].options.fontSize =\n Math.floor(textPayload.text[0]?.options?.fontSize) || 12;\n items.push({\n type: 'text',\n zIndex: zIndex + 1,\n domOrder,\n textParts: textPayload.text,\n options: {\n x,\n y,\n w,\n h,\n align: textPayload.align,\n valign: textPayload.valign,\n inset: textPayload.inset,\n rotate: rotation,\n margin: 0,\n wrap: true,\n autoFit: false,\n },\n });\n }\n if (hasCompositeBorder) {\n const borderItems = createCompositeBorderItems(\n borderInfo.sides,\n x,\n y,\n w,\n h,\n config.scale,\n zIndex,\n domOrder\n );\n items.push(...borderItems);\n }\n } else if (\n (bgColorObj.hex && !isImageWrapper) ||\n hasUniformBorder ||\n hasCompositeBorder ||\n hasShadow ||\n textPayload\n ) {\n const finalAlpha = safeOpacity * bgColorObj.opacity;\n const transparency = (1 - finalAlpha) * 100;\n const useSolidFill = bgColorObj.hex && !isImageWrapper;\n\n if (hasPartialBorderRadius && useSolidFill && !textPayload) {\n const shapeSvg = generateCustomShapeSVG(\n widthPx,\n heightPx,\n bgColorObj.hex,\n bgColorObj.opacity,\n {\n tl: parseFloat(style.borderTopLeftRadius) || 0,\n tr: parseFloat(style.borderTopRightRadius) || 0,\n br: parseFloat(style.borderBottomRightRadius) || 0,\n bl: parseFloat(style.borderBottomLeftRadius) || 0,\n }\n );\n\n items.push({\n type: 'image',\n zIndex,\n domOrder,\n options: { data: shapeSvg, x, y, w, h, rotate: rotation },\n });\n } else {\n const shapeOpts = {\n x,\n y,\n w,\n h,\n rotate: rotation,\n fill: useSolidFill\n ? { color: bgColorObj.hex, transparency: transparency }\n : { type: 'none' },\n line: hasUniformBorder ? borderInfo.options : null,\n };\n\n if (hasShadow) shapeOpts.shadow = getVisibleShadow(shadowStr, config.scale);\n\n // 1. Calculate dimensions first\n const minDimension = Math.min(widthPx, heightPx);\n\n let rawRadius = parseFloat(style.borderRadius) || 0;\n const isPercentage = style.borderRadius && style.borderRadius.toString().includes('%');\n\n // 2. Normalize radius to pixels\n let radiusPx = rawRadius;\n if (isPercentage) {\n radiusPx = (rawRadius / 100) * minDimension;\n }\n\n let shapeType = pptx.ShapeType.rect;\n\n // 3. Determine Shape Logic\n const isSquare = Math.abs(widthPx - heightPx) < 1;\n const isFullyRound = radiusPx >= minDimension / 2;\n\n // CASE A: It is an Ellipse if:\n // 1. It is explicitly \"50%\" (standard CSS way to make ovals/circles)\n // 2. OR it is a perfect square and fully rounded (a circle)\n if (isFullyRound && (isPercentage || isSquare)) {\n shapeType = pptx.ShapeType.ellipse;\n }\n // CASE B: It is a Rounded Rectangle (including \"Pill\" shapes)\n else if (radiusPx > 0) {\n shapeType = pptx.ShapeType.roundRect;\n let r = radiusPx / minDimension;\n if (r > 0.5) r = 0.5;\n if (minDimension < 100) r = r * 0.25; // Small size adjustment for small shapes\n\n shapeOpts.rectRadius = r;\n }\n\n if (textPayload) {\n textPayload.text[0].options.fontSize =\n Math.floor(textPayload.text[0]?.options?.fontSize) || 12;\n const textOptions = {\n shape: shapeType,\n ...shapeOpts,\n rotate: rotation,\n align: textPayload.align,\n valign: textPayload.valign,\n inset: textPayload.inset,\n margin: 0,\n wrap: true,\n autoFit: false,\n };\n items.push({\n type: 'text',\n zIndex,\n domOrder,\n textParts: textPayload.text,\n options: textOptions,\n });\n } else if (!hasPartialBorderRadius) {\n items.push({\n type: 'shape',\n zIndex,\n domOrder,\n shapeType,\n options: shapeOpts,\n });\n }\n }\n\n if (hasCompositeBorder) {\n const borderSvgData = generateCompositeBorderSVG(\n widthPx,\n heightPx,\n borderRadiusValue,\n borderInfo.sides\n );\n if (borderSvgData) {\n items.push({\n type: 'image',\n zIndex: zIndex + 1,\n domOrder,\n options: { data: borderSvgData, x, y, w, h, rotate: rotation },\n });\n }\n }\n }\n\n return { items, stopRecursion: !!textPayload };\n}\n\nfunction isComplexHierarchy(root) {\n // Use a simple tree traversal to find forbidden elements in the list structure\n if (root?.getAttribute?.('data-pptx-list') === 'complex') return true;\n\n const stack = [root];\n while (stack.length > 0) {\n const el = stack.pop();\n\n // 1. Layouts: Flex/Grid on LIs\n if (el.tagName === 'LI') {\n const s = window.getComputedStyle(el);\n if (s.display === 'flex' || s.display === 'grid' || s.display === 'inline-flex') return true;\n\n // Custom list items (e.g., list-style: none + structured children)\n const listStyleType = s.listStyleType || s.listStyle;\n if (listStyleType === 'none') {\n const hasStructuredChild = Array.from(el.children).some((child) => {\n const cs = window.getComputedStyle(child);\n const display = cs.display || '';\n if (!display.includes('inline')) return true;\n\n const bg = parseColor(cs.backgroundColor);\n if (bg.hex && bg.opacity > 0) return true;\n\n const bw = parseFloat(cs.borderWidth) || 0;\n const bc = parseColor(cs.borderColor);\n if (bw > 0 && bc.opacity > 0) return true;\n\n return false;\n });\n\n if (hasStructuredChild) return true;\n }\n }\n\n // 2. Media / Icons\n if (['IMG', 'SVG', 'CANVAS', 'VIDEO', 'IFRAME'].includes(el.tagName)) return true;\n if (isIconElement(el)) return true;\n\n // 3. Nested Lists (Flattening logic doesn't support nested bullets well yet)\n if (el !== root && (el.tagName === 'UL' || el.tagName === 'OL')) return true;\n\n // Recurse, but don't go too deep if not needed\n for (let i = 0; i < el.children.length; i++) {\n stack.push(el.children[i]);\n }\n }\n return false;\n}\n\nfunction collectListParts(node, parentStyle, scale, globalOptions) {\n const parts = [];\n\n // Check for CSS Content (::before) - often used for icons\n if (node.nodeType === 1) {\n const beforeStyle = window.getComputedStyle(node, '::before');\n const content = beforeStyle.content;\n if (content && content !== 'none' && content !== 'normal' && content !== '\"\"') {\n // Strip quotes\n const cleanContent = content.replace(/^['\"]|['\"]$/g, '');\n if (cleanContent.trim()) {\n parts.push({\n text: cleanContent + ' ', // Add space after icon\n options: getTextStyle(window.getComputedStyle(node), scale, cleanContent, globalOptions),\n });\n }\n }\n }\n\n node.childNodes.forEach((child) => {\n if (child.nodeType === 3) {\n // Text\n const val = child.nodeValue.replace(/[\\n\\r\\t]+/g, ' ').replace(/\\s{2,}/g, ' ');\n if (val) {\n // Use parent style if child is text node, otherwise current style\n const styleToUse = node.nodeType === 1 ? window.getComputedStyle(node) : parentStyle;\n parts.push({\n text: val,\n options: getTextStyle(styleToUse, scale, val, globalOptions),\n });\n }\n } else if (child.nodeType === 1) {\n // Element (span, i, b)\n // Recurse\n parts.push(...collectListParts(child, parentStyle, scale, globalOptions));\n }\n });\n\n return parts;\n}\n\nfunction createCompositeBorderItems(sides, x, y, w, h, scale, zIndex, domOrder) {\n const items = [];\n const pxToInch = 1 / 96;\n const common = { zIndex: zIndex + 1, domOrder, shapeType: 'rect' };\n\n if (sides.top.width > 0)\n items.push({\n ...common,\n options: { x, y, w, h: sides.top.width * pxToInch * scale, fill: { color: sides.top.color } },\n });\n if (sides.right.width > 0)\n items.push({\n ...common,\n options: {\n x: x + w - sides.right.width * pxToInch * scale,\n y,\n w: sides.right.width * pxToInch * scale,\n h,\n fill: { color: sides.right.color },\n },\n });\n if (sides.bottom.width > 0)\n items.push({\n ...common,\n options: {\n x,\n y: y + h - sides.bottom.width * pxToInch * scale,\n w,\n h: sides.bottom.width * pxToInch * scale,\n fill: { color: sides.bottom.color },\n },\n });\n if (sides.left.width > 0)\n items.push({\n ...common,\n options: {\n x,\n y,\n w: sides.left.width * pxToInch * scale,\n h,\n fill: { color: sides.left.color },\n },\n });\n\n return items;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dom-to-pptx.mjs","sources":["../src/font-utils.js","../src/font-embedder.js","../src/utils.js","../src/image-processor.js","../src/index.js"],"sourcesContent":["// src/font-utils.js\nimport { Font } from 'fonteditor-core';\nimport pako from 'pako';\n\n/**\n * Converts various font formats to EOT (Embedded OpenType),\n * which is highly compatible with PowerPoint embedding.\n * @param {string} type - 'ttf', 'woff', or 'otf'\n * @param {ArrayBuffer} fontBuffer - The raw font data\n */\nexport async function fontToEot(type, fontBuffer) {\n const options = {\n type,\n hinting: true,\n // inflate is required for WOFF decoding\n inflate: type === 'woff' ? pako.inflate : undefined,\n };\n\n const font = Font.create(fontBuffer, options);\n\n const eotBuffer = font.write({\n type: 'eot',\n toBuffer: true,\n });\n\n if (eotBuffer instanceof ArrayBuffer) {\n return eotBuffer;\n }\n\n // Ensure we return an ArrayBuffer\n return eotBuffer.buffer.slice(eotBuffer.byteOffset, eotBuffer.byteOffset + eotBuffer.byteLength);\n}\n","// src/font-embedder.js\nimport opentype from 'opentype.js';\nimport { fontToEot } from './font-utils.js';\n\nconst START_RID = 201314;\n\nexport class PPTXEmbedFonts {\n constructor() {\n this.zip = null;\n this.rId = START_RID;\n this.fonts = []; // { name, data, rid }\n }\n\n async loadZip(zip) {\n this.zip = zip;\n }\n\n /**\n * Reads the font name from the buffer using opentype.js\n */\n getFontInfo(fontBuffer) {\n try {\n const font = opentype.parse(fontBuffer);\n const names = font.names;\n // Prefer English name, fallback to others\n const fontFamily = names.fontFamily.en || Object.values(names.fontFamily)[0];\n return { name: fontFamily };\n } catch (e) {\n console.warn('Could not parse font info', e);\n return { name: 'Unknown' };\n }\n }\n\n async addFont(fontFace, fontBuffer, type) {\n // Convert to EOT/fntdata for PPTX compatibility\n const eotData = await fontToEot(type, fontBuffer);\n const rid = this.rId++;\n this.fonts.push({ name: fontFace, data: eotData, rid });\n }\n\n async updateFiles() {\n await this.updateContentTypesXML();\n await this.updatePresentationXML();\n await this.updateRelsPresentationXML();\n this.updateFontFiles();\n }\n\n async generateBlob() {\n if (!this.zip) throw new Error('Zip not loaded');\n return this.zip.generateAsync({\n type: 'blob',\n compression: 'DEFLATE',\n compressionOptions: { level: 6 },\n });\n }\n\n // --- XML Manipulation Methods ---\n\n async updateContentTypesXML() {\n const file = this.zip.file('[Content_Types].xml');\n if (!file) throw new Error('[Content_Types].xml not found');\n\n const xmlStr = await file.async('string');\n const parser = new DOMParser();\n const doc = parser.parseFromString(xmlStr, 'text/xml');\n\n const types = doc.getElementsByTagName('Types')[0];\n const defaults = Array.from(doc.getElementsByTagName('Default'));\n\n const hasFntData = defaults.some((el) => el.getAttribute('Extension') === 'fntdata');\n\n if (!hasFntData) {\n const el = doc.createElement('Default');\n el.setAttribute('Extension', 'fntdata');\n el.setAttribute('ContentType', 'application/x-fontdata');\n types.insertBefore(el, types.firstChild);\n }\n\n this.zip.file('[Content_Types].xml', new XMLSerializer().serializeToString(doc));\n }\n\n async updatePresentationXML() {\n const file = this.zip.file('ppt/presentation.xml');\n if (!file) throw new Error('ppt/presentation.xml not found');\n\n const xmlStr = await file.async('string');\n const parser = new DOMParser();\n const doc = parser.parseFromString(xmlStr, 'text/xml');\n const presentation = doc.getElementsByTagName('p:presentation')[0];\n\n // Enable embedding flags\n presentation.setAttribute('saveSubsetFonts', 'true');\n presentation.setAttribute('embedTrueTypeFonts', 'true');\n\n // Find or create embeddedFontLst\n let embeddedFontLst = presentation.getElementsByTagName('p:embeddedFontLst')[0];\n\n if (!embeddedFontLst) {\n embeddedFontLst = doc.createElement('p:embeddedFontLst');\n\n // Insert before defaultTextStyle or at end\n const defaultTextStyle = presentation.getElementsByTagName('p:defaultTextStyle')[0];\n if (defaultTextStyle) {\n presentation.insertBefore(embeddedFontLst, defaultTextStyle);\n } else {\n presentation.appendChild(embeddedFontLst);\n }\n }\n\n // Add font references\n this.fonts.forEach((font) => {\n // Check if already exists\n const existing = Array.from(embeddedFontLst.getElementsByTagName('p:font')).find(\n (node) => node.getAttribute('typeface') === font.name\n );\n\n if (!existing) {\n const embedFont = doc.createElement('p:embeddedFont');\n\n const fontNode = doc.createElement('p:font');\n fontNode.setAttribute('typeface', font.name);\n embedFont.appendChild(fontNode);\n\n const regular = doc.createElement('p:regular');\n regular.setAttribute('r:id', `rId${font.rid}`);\n embedFont.appendChild(regular);\n\n embeddedFontLst.appendChild(embedFont);\n }\n });\n\n this.zip.file('ppt/presentation.xml', new XMLSerializer().serializeToString(doc));\n }\n\n async updateRelsPresentationXML() {\n const file = this.zip.file('ppt/_rels/presentation.xml.rels');\n if (!file) throw new Error('presentation.xml.rels not found');\n\n const xmlStr = await file.async('string');\n const parser = new DOMParser();\n const doc = parser.parseFromString(xmlStr, 'text/xml');\n const relationships = doc.getElementsByTagName('Relationships')[0];\n\n this.fonts.forEach((font) => {\n const rel = doc.createElement('Relationship');\n rel.setAttribute('Id', `rId${font.rid}`);\n rel.setAttribute('Target', `fonts/${font.rid}.fntdata`);\n rel.setAttribute(\n 'Type',\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/font'\n );\n relationships.appendChild(rel);\n });\n\n this.zip.file('ppt/_rels/presentation.xml.rels', new XMLSerializer().serializeToString(doc));\n }\n\n updateFontFiles() {\n this.fonts.forEach((font) => {\n this.zip.file(`ppt/fonts/${font.rid}.fntdata`, font.data);\n });\n }\n}\n","// src/utils.js\n\n// canvas context for color normalization\nlet _ctx;\nfunction getCtx() {\n if (!_ctx) _ctx = document.createElement('canvas').getContext('2d', { willReadFrequently: true });\n return _ctx;\n}\n\nfunction getTableBorder(style, side, scale) {\n const widthStr = style[`border${side}Width`];\n const styleStr = style[`border${side}Style`];\n const colorStr = style[`border${side}Color`];\n\n const width = parseFloat(widthStr) || 0;\n if (width === 0 || styleStr === 'none' || styleStr === 'hidden') {\n return null;\n }\n\n const color = parseColor(colorStr);\n if (!color.hex || color.opacity === 0) return null;\n\n let dash = 'solid';\n if (styleStr === 'dashed') dash = 'dash';\n if (styleStr === 'dotted') dash = 'dot';\n\n return {\n pt: width * 0.75 * scale, // Convert px to pt\n color: color.hex,\n style: dash,\n };\n}\n\n/**\n * Extracts native table data for PptxGenJS.\n */\nexport function extractTableData(node, scale, options = {}) {\n const rows = [];\n const colWidths = [];\n const root = options.root || null;\n\n // 1. Calculate Column Widths based on the first row of cells\n // We look at the first <tr>'s children to determine visual column widths.\n // Note: This assumes a fixed grid. Complex colspan/rowspan on the first row\n // might skew widths, but getBoundingClientRect captures the rendered result.\n const firstRow = node.querySelector('tr');\n if (firstRow) {\n const cells = Array.from(firstRow.children);\n cells.forEach((cell) => {\n const rect = cell.getBoundingClientRect();\n const wIn = rect.width * (1 / 96) * scale;\n colWidths.push(wIn);\n });\n }\n\n // 2. Iterate Rows\n const trList = node.querySelectorAll('tr');\n trList.forEach((tr) => {\n const rowData = [];\n const cellList = Array.from(tr.children).filter((c) =>\n ['TD', 'TH'].includes(c.tagName)\n );\n\n cellList.forEach((cell) => {\n const style = window.getComputedStyle(cell);\n const cellText = cell.innerText.replace(/[\\n\\r\\t]+/g, ' ').trim();\n\n // A. Text Style\n const textStyle = getTextStyle(style, scale, cellText, options);\n\n // B. Cell Background\n const fill = computeTableCellFill(style, cell, root, options);\n\n // C. Alignment\n let align = 'left';\n if (style.textAlign === 'center') align = 'center';\n if (style.textAlign === 'right' || style.textAlign === 'end') align = 'right';\n\n let valign = 'top';\n if (style.verticalAlign === 'middle') valign = 'middle';\n if (style.verticalAlign === 'bottom') valign = 'bottom';\n\n // D. Padding (Margins in PPTX)\n // CSS Padding px -> PPTX Margin pt\n const padding = getPadding(style, scale);\n // getPadding returns [top, right, bottom, left] in inches relative to scale\n // PptxGenJS expects points (pt) for margin: [t, r, b, l]\n // or discrete properties. Let's use discrete for clarity.\n const margin = [\n padding[0] * 72, // top\n padding[1] * 72, // right\n padding[2] * 72, // bottom\n padding[3] * 72 // left\n ];\n\n // E. Borders\n const borderTop = getTableBorder(style, 'Top', scale);\n const borderRight = getTableBorder(style, 'Right', scale);\n const borderBottom = getTableBorder(style, 'Bottom', scale);\n const borderLeft = getTableBorder(style, 'Left', scale);\n\n // F. Construct Cell Object\n rowData.push({\n text: cellText,\n options: {\n color: textStyle.color,\n fontFace: textStyle.fontFace,\n fontSize: textStyle.fontSize,\n bold: textStyle.bold,\n italic: textStyle.italic,\n underline: textStyle.underline,\n lang: 'zh-CN',\n\n fill: fill,\n align: align,\n valign: valign,\n margin: margin,\n\n rowspan: parseInt(cell.getAttribute('rowspan')) || null,\n colspan: parseInt(cell.getAttribute('colspan')) || null,\n\n border: {\n pt: null, // trigger explicit object structure\n top: borderTop,\n right: borderRight,\n bottom: borderBottom,\n left: borderLeft\n }\n },\n });\n });\n\n if (rowData.length > 0) {\n rows.push(rowData);\n }\n });\n\n return { rows, colWidths };\n}\n\n// Checks if any parent element has overflow: hidden which would clip this element\nexport function isClippedByParent(node) {\n let parent = node.parentElement;\n while (parent && parent !== document.body) {\n const style = window.getComputedStyle(parent);\n const overflow = style.overflow;\n if (overflow === 'hidden' || overflow === 'clip') {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n}\n\n// Helper to save gradient text\n// Helper to save gradient text: extracts the first color from a gradient string\nexport function getGradientFallbackColor(bgImage) {\n if (!bgImage || bgImage === 'none') return null;\n\n // 1. Extract content inside function(...)\n // Handles linear-gradient(...), radial-gradient(...), repeating-linear-gradient(...)\n const match = bgImage.match(/gradient\\((.*)\\)/);\n if (!match) return null;\n\n const content = match[1];\n\n // 2. Split by comma, respecting parentheses (to avoid splitting inside rgb(), oklch(), etc.)\n const parts = [];\n let current = '';\n let parenDepth = 0;\n\n for (const char of content) {\n if (char === '(') parenDepth++;\n if (char === ')') parenDepth--;\n if (char === ',' && parenDepth === 0) {\n parts.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n if (current) parts.push(current.trim());\n\n // 3. Find first part that is a color (skip angle/direction)\n for (const part of parts) {\n // Ignore directions (to right) or angles (90deg, 0.5turn)\n if (/^(to\\s|[\\d.]+(deg|rad|turn|grad))/.test(part)) continue;\n\n // Extract color: Remove trailing position (e.g. \"red 50%\" -> \"red\")\n // Regex matches whitespace + number + unit at end of string\n const colorPart = part.replace(/\\s+(-?[\\d.]+(%|px|em|rem|ch|vh|vw)?)$/, '');\n\n // Check if it's not just a number (some gradients might have bare numbers? unlikely in standard syntax)\n if (colorPart) return colorPart;\n }\n\n return null;\n}\n\nfunction mapDashType(style) {\n if (style === 'dashed') return 'dash';\n if (style === 'dotted') return 'dot';\n return 'solid';\n}\n\nfunction hexToRgb(hex) {\n const clean = (hex || '').replace('#', '').trim();\n if (clean.length !== 6) return null;\n const num = parseInt(clean, 16);\n if (Number.isNaN(num)) return null;\n return {\n r: (num >> 16) & 255,\n g: (num >> 8) & 255,\n b: num & 255,\n };\n}\n\nfunction rgbToHex(rgb) {\n const toHex = (v) => v.toString(16).padStart(2, '0').toUpperCase();\n return `${toHex(rgb.r)}${toHex(rgb.g)}${toHex(rgb.b)}`;\n}\n\nfunction blendHex(baseHex, overlayHex, alpha) {\n const base = hexToRgb(baseHex);\n const over = hexToRgb(overlayHex);\n if (!base || !over) return overlayHex;\n const a = Math.max(0, Math.min(1, alpha));\n const r = Math.round(base.r * (1 - a) + over.r * a);\n const g = Math.round(base.g * (1 - a) + over.g * a);\n const b = Math.round(base.b * (1 - a) + over.b * a);\n return rgbToHex({ r, g, b });\n}\n\nfunction resolveTableBaseColor(node, root) {\n // Start from parent to avoid picking the cell's own semi-transparent fill\n let el = node?.parentElement || null;\n while (el && el !== document.body) {\n const style = window.getComputedStyle(el);\n const bg = parseColor(style.backgroundColor);\n if (bg.hex && bg.opacity > 0) return bg.hex;\n\n const bgClip = style.webkitBackgroundClip || style.backgroundClip;\n const bgImage = style.backgroundImage;\n if (bgClip !== 'text' && bgImage && bgImage.includes('gradient')) {\n const fallback = getGradientFallbackColor(bgImage);\n if (fallback) {\n const parsed = parseColor(fallback);\n if (parsed.hex) return parsed.hex;\n }\n }\n\n if (el === root) break;\n el = el.parentElement;\n }\n return null;\n}\n\nexport function computeTableCellFill(style, cell, root, options = {}) {\n const bg = parseColor(style.backgroundColor);\n if (!bg.hex || bg.opacity <= 0) return null;\n\n const flatten = options.tableConfig?.flattenTransparentFill !== false;\n if (bg.opacity < 1 && flatten) {\n const baseHex = resolveTableBaseColor(cell, root) || 'FFFFFF';\n const blended = blendHex(baseHex, bg.hex, bg.opacity);\n return { color: blended };\n }\n\n const transparency = Math.max(0, Math.min(100, (1 - bg.opacity) * 100));\n return transparency > 0 ? { color: bg.hex, transparency } : { color: bg.hex };\n}\n\n/**\n * Analyzes computed border styles and determines the rendering strategy.\n */\nexport function getBorderInfo(style, scale) {\n const top = {\n width: parseFloat(style.borderTopWidth) || 0,\n style: style.borderTopStyle,\n color: parseColor(style.borderTopColor).hex,\n };\n const right = {\n width: parseFloat(style.borderRightWidth) || 0,\n style: style.borderRightStyle,\n color: parseColor(style.borderRightColor).hex,\n };\n const bottom = {\n width: parseFloat(style.borderBottomWidth) || 0,\n style: style.borderBottomStyle,\n color: parseColor(style.borderBottomColor).hex,\n };\n const left = {\n width: parseFloat(style.borderLeftWidth) || 0,\n style: style.borderLeftStyle,\n color: parseColor(style.borderLeftColor).hex,\n };\n\n const hasAnyBorder = top.width > 0 || right.width > 0 || bottom.width > 0 || left.width > 0;\n if (!hasAnyBorder) return { type: 'none' };\n\n // Check if all sides are uniform\n const isUniform =\n top.width === right.width &&\n top.width === bottom.width &&\n top.width === left.width &&\n top.style === right.style &&\n top.style === bottom.style &&\n top.style === left.style &&\n top.color === right.color &&\n top.color === bottom.color &&\n top.color === left.color;\n\n if (isUniform) {\n return {\n type: 'uniform',\n options: {\n width: top.width * 0.75 * scale,\n color: top.color,\n transparency: (1 - parseColor(style.borderTopColor).opacity) * 100,\n dashType: mapDashType(top.style),\n },\n };\n } else {\n return {\n type: 'composite',\n sides: { top, right, bottom, left },\n };\n }\n}\n\n/**\n * Generates an SVG image for composite borders that respects border-radius.\n */\nexport function generateCompositeBorderSVG(w, h, radius, sides) {\n radius = radius / 2; // Adjust for SVG rendering\n const clipId = 'clip_' + Math.random().toString(36).substr(2, 9);\n let borderRects = '';\n\n if (sides.top.width > 0 && sides.top.color) {\n borderRects += `<rect x=\"0\" y=\"0\" width=\"${w}\" height=\"${sides.top.width}\" fill=\"#${sides.top.color}\" />`;\n }\n if (sides.right.width > 0 && sides.right.color) {\n borderRects += `<rect x=\"${w - sides.right.width}\" y=\"0\" width=\"${sides.right.width}\" height=\"${h}\" fill=\"#${sides.right.color}\" />`;\n }\n if (sides.bottom.width > 0 && sides.bottom.color) {\n borderRects += `<rect x=\"0\" y=\"${h - sides.bottom.width}\" width=\"${w}\" height=\"${sides.bottom.width}\" fill=\"#${sides.bottom.color}\" />`;\n }\n if (sides.left.width > 0 && sides.left.color) {\n borderRects += `<rect x=\"0\" y=\"0\" width=\"${sides.left.width}\" height=\"${h}\" fill=\"#${sides.left.color}\" />`;\n }\n\n const svg = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n <defs>\n <clipPath id=\"${clipId}\">\n <rect x=\"0\" y=\"0\" width=\"${w}\" height=\"${h}\" rx=\"${radius}\" ry=\"${radius}\" />\n </clipPath>\n </defs>\n <g clip-path=\"url(#${clipId})\">\n ${borderRects}\n </g>\n </svg>`;\n\n return 'data:image/svg+xml;base64,' + btoa(svg);\n}\n\n/**\n * Generates an SVG data URL for a solid shape with non-uniform corner radii.\n */\nexport function generateCustomShapeSVG(w, h, color, opacity, radii) {\n let { tl, tr, br, bl } = radii;\n\n // Clamp radii using CSS spec logic (avoid overlap)\n const factor = Math.min(\n w / (tl + tr) || Infinity,\n h / (tr + br) || Infinity,\n w / (br + bl) || Infinity,\n h / (bl + tl) || Infinity\n );\n\n if (factor < 1) {\n tl *= factor;\n tr *= factor;\n br *= factor;\n bl *= factor;\n }\n\n const path = `\n M ${tl} 0\n L ${w - tr} 0\n A ${tr} ${tr} 0 0 1 ${w} ${tr}\n L ${w} ${h - br}\n A ${br} ${br} 0 0 1 ${w - br} ${h}\n L ${bl} ${h}\n A ${bl} ${bl} 0 0 1 0 ${h - bl}\n L 0 ${tl}\n A ${tl} ${tl} 0 0 1 ${tl} 0\n Z\n `;\n\n const svg = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n <path d=\"${path}\" fill=\"#${color}\" fill-opacity=\"${opacity}\" />\n </svg>`;\n\n return 'data:image/svg+xml;base64,' + btoa(svg);\n}\n\n// --- REPLACE THE EXISTING parseColor FUNCTION ---\nexport function parseColor(str) {\n if (!str || str === 'transparent' || str.trim() === 'rgba(0, 0, 0, 0)') {\n return { hex: null, opacity: 0 };\n }\n\n const ctx = getCtx();\n ctx.fillStyle = str;\n const computed = ctx.fillStyle;\n\n // 1. Handle Hex Output (e.g. #ff0000) - Fast Path\n if (computed.startsWith('#')) {\n let hex = computed.slice(1);\n let opacity = 1;\n if (hex.length === 3) hex = hex.split('').map(c => c + c).join('');\n if (hex.length === 4) hex = hex.split('').map(c => c + c).join('');\n if (hex.length === 8) {\n opacity = parseInt(hex.slice(6), 16) / 255;\n hex = hex.slice(0, 6);\n }\n return { hex: hex.toUpperCase(), opacity };\n }\n\n // 2. Handle RGB/RGBA Output (standard) - Fast Path\n if (computed.startsWith('rgb')) {\n const match = computed.match(/[\\d.]+/g);\n if (match && match.length >= 3) {\n const r = parseInt(match[0]);\n const g = parseInt(match[1]);\n const b = parseInt(match[2]);\n const a = match.length > 3 ? parseFloat(match[3]) : 1;\n const hex = ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();\n return { hex, opacity: a };\n }\n }\n\n // 3. Fallback: Browser returned a format we don't parse (oklch, lab, color(srgb...), etc.)\n // Use Canvas API to convert to sRGB\n ctx.clearRect(0, 0, 1, 1);\n ctx.fillRect(0, 0, 1, 1);\n const data = ctx.getImageData(0, 0, 1, 1).data;\n // data = [r, g, b, a]\n const r = data[0];\n const g = data[1];\n const b = data[2];\n const a = data[3] / 255;\n\n if (a === 0) return { hex: null, opacity: 0 };\n\n const hex = ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();\n return { hex, opacity: a };\n}\n\nconst SUPPORTED_CHART_TYPES = new Set(['area', 'bar', 'line', 'pie', 'doughnut', 'radar', 'scatter']);\nconst CHART_TYPE_ALIASES = {\n column: 'bar',\n columnbar: 'bar',\n column3d: 'bar',\n bar3d: 'bar',\n donut: 'doughnut',\n ring: 'doughnut',\n};\n\nfunction normalizeLegendPos(value) {\n if (!value) return null;\n const normalized = value.toString().toLowerCase().replace(/[^a-z]/g, '');\n if (normalized === 'tr' || normalized === 'topright') return 'tr';\n if (normalized === 'top') return 't';\n if (normalized === 'bottom') return 'b';\n if (normalized === 'left') return 'l';\n if (normalized === 'right') return 'r';\n return null;\n}\n\nfunction normalizeChartType(value) {\n if (!value) return null;\n const raw = value.toString().trim().toLowerCase();\n const alias = CHART_TYPE_ALIASES[raw];\n const candidate = alias || raw;\n return SUPPORTED_CHART_TYPES.has(candidate) ? candidate : null;\n}\n\nfunction colorToHex(value) {\n const parsed = parseColor(value);\n return parsed.hex || null;\n}\n\nfunction resolveChartElement(root, config) {\n if (!config) return null;\n if (config.element instanceof HTMLElement) return config.element;\n if (typeof config.element === 'function') return config.element(root);\n if (typeof config.selector === 'string') {\n return root.querySelector(config.selector);\n }\n return null;\n}\n\nfunction buildSeriesFromSource(source = {}) {\n const fallbackLabels = Array.isArray(source.labels) ? source.labels : [];\n const candidateDatasets = Array.isArray(source.datasets) ? source.datasets : [];\n const series = [];\n\n candidateDatasets.forEach((dataset, index) => {\n if (!dataset) return;\n const values = Array.isArray(dataset.values)\n ? dataset.values\n : Array.isArray(dataset.data)\n ? dataset.data\n : [];\n\n if (!values.length) return;\n\n const record = {\n name: dataset.name || dataset.label || `Series ${index + 1}`,\n values,\n };\n\n if (Array.isArray(dataset.labels) && dataset.labels.length === values.length) {\n record.labels = dataset.labels;\n } else if (fallbackLabels.length === values.length) {\n record.labels = fallbackLabels;\n }\n\n if (Array.isArray(dataset.sizes) && dataset.sizes.length === values.length) {\n record.sizes = dataset.sizes;\n }\n\n // Chart.js often provides strings/arrays in backgroundColor\n const candidateColor =\n dataset.color || dataset.backgroundColor || dataset.borderColor || dataset.fillColor;\n if (candidateColor) {\n if (Array.isArray(candidateColor)) {\n record.color = candidateColor[0];\n } else {\n record.color = candidateColor;\n }\n }\n\n series.push(record);\n });\n\n if (!series.length) {\n const fallbackValues = Array.isArray(source.values)\n ? source.values\n : Array.isArray(source.data)\n ? source.data\n : [];\n\n if (fallbackValues.length) {\n const fallbackRecord = {\n name: source.name || source.label || 'Series 1',\n values: fallbackValues,\n };\n if (Array.isArray(source.labels) && source.labels.length === fallbackValues.length) {\n fallbackRecord.labels = source.labels;\n } else if (fallbackLabels.length === fallbackValues.length) {\n fallbackRecord.labels = fallbackLabels;\n }\n if (Array.isArray(source.sizes) && source.sizes.length === fallbackValues.length) {\n fallbackRecord.sizes = source.sizes;\n }\n if (source.color) {\n fallbackRecord.color = source.color;\n }\n series.push(fallbackRecord);\n }\n }\n\n return series;\n}\n\nfunction buildChartOptions(raw, derivedColors) {\n const opts = { ...((raw && raw.chartOptions) || {}) };\n if (raw && raw.showLegend !== undefined) opts.showLegend = raw.showLegend;\n if (raw) {\n const legendTarget = raw.legendPos || raw.legendPosition;\n const normalizedLegend = normalizeLegendPos(legendTarget);\n if (normalizedLegend) opts.legendPos = normalizedLegend;\n }\n if (raw && raw.title) opts.title = raw.title;\n if (raw && raw.altText) opts.altText = raw.altText;\n if (raw && raw.showDataTable !== undefined) opts.showDataTable = raw.showDataTable;\n if (raw && raw.chartColorsOpacity !== undefined) opts.chartColorsOpacity = raw.chartColorsOpacity;\n if (raw && raw.showLabel !== undefined) opts.showLabel = raw.showLabel;\n\n const paletteFromConfig =\n raw && Array.isArray(raw.chartColors) ? raw.chartColors.map(colorToHex).filter(Boolean) : [];\n const palette = paletteFromConfig.length ? paletteFromConfig : derivedColors;\n if (palette.length && !opts.chartColors) {\n opts.chartColors = palette;\n }\n\n return opts;\n}\n\nfunction normalizeChartConfig(raw) {\n if (!raw) return null;\n const chartType = normalizeChartType(raw.chartType || raw.type || raw.chart);\n if (!chartType) return null;\n\n let seriesWithColor = [];\n if (Array.isArray(raw.chartData) && raw.chartData.length) {\n seriesWithColor = raw.chartData\n .map((entry, index) => {\n if (!entry || !Array.isArray(entry.values)) return null;\n return {\n ...entry,\n name: entry.name || entry.label || `Series ${index + 1}`,\n };\n })\n .filter((entry) => entry && entry.values && entry.values.length);\n } else {\n const source = {\n labels: raw.data?.labels || raw.labels,\n datasets: Array.isArray(raw.data?.datasets)\n ? raw.data.datasets\n : Array.isArray(raw.datasets)\n ? raw.datasets\n : [],\n values: raw.data?.values || raw.values,\n data: raw.data?.data,\n name: raw.name,\n label: raw.label,\n color: raw.color,\n sizes: raw.data?.sizes || raw.sizes,\n };\n seriesWithColor = buildSeriesFromSource(source);\n }\n\n if (!seriesWithColor.length) return null;\n\n const derivedColors = seriesWithColor\n .map((dataset) => dataset.color)\n .map(colorToHex)\n .filter(Boolean);\n\n const chartOptions = buildChartOptions(raw, derivedColors);\n const chartData = seriesWithColor.map(({ color, ...rest }) => rest);\n\n return {\n chartType,\n chartData,\n chartOptions,\n };\n}\n\nexport function buildChartRegistry(root, chartConfigs = []) {\n const registry = new Map();\n if (!root || !Array.isArray(chartConfigs)) return registry;\n\n chartConfigs.forEach((config) => {\n const node = resolveChartElement(root, config);\n if (!node) return;\n const normalized = normalizeChartConfig(config);\n if (!normalized || !normalized.chartData || !normalized.chartData.length) return;\n registry.set(node, normalized);\n });\n\n return registry;\n}\n\nexport function getPadding(style, scale) {\n const pxToInch = 1 / 96;\n return [\n (parseFloat(style.paddingTop) || 0) * pxToInch * scale,\n (parseFloat(style.paddingRight) || 0) * pxToInch * scale,\n (parseFloat(style.paddingBottom) || 0) * pxToInch * scale,\n (parseFloat(style.paddingLeft) || 0) * pxToInch * scale,\n ];\n}\n\nexport function getSoftEdges(filterStr, scale) {\n if (!filterStr || filterStr === 'none') return null;\n const match = filterStr.match(/blur\\(([\\d.]+)px\\)/);\n if (match) return parseFloat(match[1]) * 0.75 * scale;\n return null;\n}\n\nconst DEFAULT_CJK_FONTS = [\n 'Heiti TC',\n 'Heiti SC',\n 'PingFang SC',\n 'Hiragino Sans GB',\n 'Microsoft YaHei',\n 'Noto Sans CJK SC',\n 'Source Han Sans SC',\n 'WenQuanYi Micro Hei',\n 'SimHei',\n 'SimSun',\n 'STHeiti'\n];\n\nfunction normalizeFontList(fontFamily) {\n if (!fontFamily || typeof fontFamily !== 'string') return [];\n return fontFamily\n .split(',')\n .map((f) => f.trim().replace(/['\"]/g, ''))\n .filter(Boolean);\n}\n\nfunction containsCjk(text) {\n if (!text) return false;\n return /[\\u3040-\\u30ff\\u3400-\\u4dbf\\u4e00-\\u9fff\\uf900-\\ufaff]/.test(text);\n}\n\nfunction normalizeCjkFallbacks(options) {\n if (!options) return [];\n const raw =\n options.fontFallbacks?.cjk ??\n options.cjkFonts ??\n options.cjkFont ??\n [];\n const list = Array.isArray(raw) ? raw : [raw];\n return list\n .map((f) => (typeof f === 'string' ? f.trim() : String(f)))\n .filter(Boolean);\n}\n\nfunction pickFontFace(fontFamily, text, options) {\n const fontList = normalizeFontList(fontFamily);\n const primary = fontList[0] || 'Arial';\n\n if (!containsCjk(text)) return primary;\n\n const lowered = fontList.map((f) => f.toLowerCase());\n const configured = normalizeCjkFallbacks(options);\n if (configured.length > 0) {\n const match = configured.find((f) => lowered.includes(f.toLowerCase()));\n return match || configured[0];\n }\n\n const autoMatch = DEFAULT_CJK_FONTS.find((f) => lowered.includes(f.toLowerCase()));\n return autoMatch || 'Heiti TC';\n}\n\nexport function getTextStyle(style, scale, text = '', options = {}) {\n let colorObj = parseColor(style.color);\n\n const bgClip = style.webkitBackgroundClip || style.backgroundClip;\n if (colorObj.opacity === 0 && bgClip === 'text') {\n const fallback = getGradientFallbackColor(style.backgroundImage);\n if (fallback) colorObj = parseColor(fallback);\n }\n\n let lineSpacing = null;\n const fontSizePx = parseFloat(style.fontSize);\n const lhStr = style.lineHeight;\n\n if (lhStr && lhStr !== 'normal') {\n let lhPx = parseFloat(lhStr);\n\n // Edge Case: If browser returns a raw multiplier (e.g. \"1.5\")\n // we must multiply by font size to get the height in pixels.\n // (Note: getComputedStyle usually returns 'px', but inline styles might differ)\n if (/^[0-9.]+$/.test(lhStr)) {\n lhPx = lhPx * fontSizePx;\n }\n\n if (!isNaN(lhPx) && lhPx > 0) {\n // Convert Pixel Height to Point Height (1px = 0.75pt)\n // And apply the global layout scale.\n lineSpacing = lhPx * 0.75 * scale;\n }\n } else {\n // Default line height when 'normal' - use 1.2 multiplier to match browser default\n lineSpacing = fontSizePx * 1.2 * 0.75 * scale;\n }\n\n // --- Spacing (Margins) ---\n // Convert CSS margins (px) to PPTX Paragraph Spacing (pt).\n let paraSpaceBefore = 0;\n let paraSpaceAfter = 0;\n\n const mt = parseFloat(style.marginTop) || 0;\n const mb = parseFloat(style.marginBottom) || 0;\n\n if (mt > 0) paraSpaceBefore = mt * 0.75 * scale;\n if (mb > 0) paraSpaceAfter = mb * 0.75 * scale;\n\n const fontFace = pickFontFace(style.fontFamily, text, options);\n\n return {\n color: colorObj.hex || '000000',\n fontFace: fontFace,\n fontSize: Math.max(8, Math.floor(fontSizePx * 0.75 * scale)),\n bold: parseInt(style.fontWeight) >= 600,\n italic: style.fontStyle === 'italic',\n underline: style.textDecoration.includes('underline'),\n lang: 'zh-CN',\n // Only add if we have a valid value\n ...(lineSpacing && { lineSpacing }),\n ...(paraSpaceBefore > 0 && { paraSpaceBefore }),\n ...(paraSpaceAfter > 0 && { paraSpaceAfter }),\n // Map background color to highlight if present\n ...(parseColor(style.backgroundColor).hex ? { highlight: parseColor(style.backgroundColor).hex } : {}),\n };\n}\n\n/**\n * Determines if a given DOM node is primarily a text container.\n * Updated to correctly reject Icon elements so they are rendered as images.\n * Also rejects flex/grid containers with distributed children (space-between/around/evenly).\n */\nexport function isTextContainer(node) {\n const hasText = node.textContent.trim().length > 0;\n if (!hasText) return false;\n\n const children = Array.from(node.children);\n if (children.length === 0) return true;\n\n // Check if parent is a flex/grid container with special layout\n // In such cases, children should be treated as separate elements\n const parentStyle = window.getComputedStyle(node);\n const display = parentStyle.display;\n const justifyContent = parentStyle.justifyContent || '';\n const alignItems = parentStyle.alignItems || '';\n\n // If parent uses flex/grid with space distribution, don't treat as text container\n if ((display.includes('flex') || display.includes('grid')) &&\n (justifyContent.includes('space-between') ||\n justifyContent.includes('space-around') ||\n justifyContent.includes('space-evenly'))) {\n return false;\n }\n\n // Note: We don't skip text container for align-items: center here.\n // The valign inheritance is handled in prepareRenderItem with single-child check.\n // This allows elements like \"密钥状态流转\" to properly inherit center alignment\n // while preventing STEP 1/2/3 from being incorrectly centered.\n\n const isSafeInline = (el) => {\n // 1. Reject Web Components / Custom Elements\n if (el.tagName.includes('-')) return false;\n // 2. Reject Explicit Images/SVGs\n if (el.tagName === 'IMG' || el.tagName === 'SVG') return false;\n\n // 3. Reject Class-based Icons (FontAwesome, Material, Bootstrap, etc.)\n // If an <i> or <span> has icon classes, it is a visual object, not text.\n if (el.tagName === 'I' || el.tagName === 'SPAN') {\n const cls = el.getAttribute('class') || '';\n if (\n cls.includes('fa-') ||\n cls.includes('fas') ||\n cls.includes('far') ||\n cls.includes('fab') ||\n cls.includes('material-icons') ||\n cls.includes('bi-') ||\n cls.includes('icon')\n ) {\n return false;\n }\n }\n\n const style = window.getComputedStyle(el);\n const display = style.display;\n\n // 4. Standard Inline Tag Check\n const isInlineTag = ['SPAN', 'B', 'STRONG', 'EM', 'I', 'A', 'SMALL', 'MARK'].includes(\n el.tagName\n );\n const isInlineDisplay = display.includes('inline');\n\n if (!isInlineTag && !isInlineDisplay) return false;\n\n // 5. Structural Styling Check\n // If a child has a background or border, it's a layout block, not a simple text span.\n const bgColor = parseColor(style.backgroundColor);\n const hasVisibleBg = bgColor.hex && bgColor.opacity > 0;\n const hasBorder =\n parseFloat(style.borderWidth) > 0 && parseColor(style.borderColor).opacity > 0;\n\n // 4. Check for empty shapes (visual objects without text, like dots)\n const hasContent = el.textContent.trim().length > 0;\n if (!hasContent && (hasVisibleBg || hasBorder)) {\n return false;\n }\n\n // If element has background/border and is not inline, treat as layout block\n if ((hasVisibleBg || hasBorder) && !isInlineDisplay) {\n return false;\n }\n\n return true;\n };\n\n return children.every(isSafeInline);\n}\n\nexport function getRotation(transformStr) {\n if (!transformStr || transformStr === 'none') return 0;\n const values = transformStr.split('(')[1].split(')')[0].split(',');\n if (values.length < 4) return 0;\n const a = parseFloat(values[0]);\n const b = parseFloat(values[1]);\n return Math.round(Math.atan2(b, a) * (180 / Math.PI));\n}\n\nexport function svgToPng(node) {\n return new Promise((resolve) => {\n const clone = node.cloneNode(true);\n const rect = node.getBoundingClientRect();\n const width = rect.width || 300;\n const height = rect.height || 150;\n\n function inlineStyles(source, target) {\n const computed = window.getComputedStyle(source);\n const properties = [\n 'fill',\n 'stroke',\n 'stroke-width',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'opacity',\n 'font-family',\n 'font-size',\n 'font-weight',\n ];\n\n if (computed.fill === 'none') target.setAttribute('fill', 'none');\n else if (computed.fill) target.style.fill = computed.fill;\n\n if (computed.stroke === 'none') target.setAttribute('stroke', 'none');\n else if (computed.stroke) target.style.stroke = computed.stroke;\n\n properties.forEach((prop) => {\n if (prop !== 'fill' && prop !== 'stroke') {\n const val = computed[prop];\n if (val && val !== 'auto') target.style[prop] = val;\n }\n });\n\n for (let i = 0; i < source.children.length; i++) {\n if (target.children[i]) inlineStyles(source.children[i], target.children[i]);\n }\n }\n\n inlineStyles(node, clone);\n clone.setAttribute('width', width);\n clone.setAttribute('height', height);\n clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n const xml = new XMLSerializer().serializeToString(clone);\n const svgUrl = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(xml)}`;\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => {\n const canvas = document.createElement('canvas');\n const scale = 3;\n canvas.width = width * scale;\n canvas.height = height * scale;\n const ctx = canvas.getContext('2d');\n ctx.scale(scale, scale);\n ctx.drawImage(img, 0, 0, width, height);\n resolve(canvas.toDataURL('image/png'));\n };\n img.onerror = () => resolve(null);\n img.src = svgUrl;\n });\n}\n\nexport function getVisibleShadow(shadowStr, scale) {\n if (!shadowStr || shadowStr === 'none') return null;\n const shadows = shadowStr.split(/,(?![^()]*\\))/);\n for (let s of shadows) {\n s = s.trim();\n if (s.startsWith('rgba(0, 0, 0, 0)')) continue;\n const match = s.match(\n /(rgba?\\([^)]+\\)|#[0-9a-fA-F]+)\\s+(-?[\\d.]+)px\\s+(-?[\\d.]+)px\\s+([\\d.]+)px/\n );\n if (match) {\n const colorStr = match[1];\n const x = parseFloat(match[2]);\n const y = parseFloat(match[3]);\n const blur = parseFloat(match[4]);\n const distance = Math.sqrt(x * x + y * y);\n let angle = Math.atan2(y, x) * (180 / Math.PI);\n if (angle < 0) angle += 360;\n const colorObj = parseColor(colorStr);\n return {\n type: 'outer',\n angle: angle,\n blur: blur * 0.75 * scale,\n offset: distance * 0.75 * scale,\n color: colorObj.hex || '000000',\n opacity: colorObj.opacity,\n };\n }\n }\n return null;\n}\n\n/**\n * Generates an SVG image for gradients, supporting degrees and keywords.\n */\nexport function generateGradientSVG(w, h, bgString, radius, border) {\n try {\n const match = bgString.match(/linear-gradient\\((.*)\\)/);\n if (!match) return null;\n const content = match[1];\n\n // Split by comma, ignoring commas inside parentheses (e.g. rgba())\n const parts = content.split(/,(?![^()]*\\))/).map((p) => p.trim());\n if (parts.length < 2) return null;\n\n let x1 = '0%',\n y1 = '0%',\n x2 = '0%',\n y2 = '100%';\n let stopsStartIndex = 0;\n const firstPart = parts[0].toLowerCase();\n\n // 1. Check for Keywords (to right, etc.)\n if (firstPart.startsWith('to ')) {\n stopsStartIndex = 1;\n const direction = firstPart.replace('to ', '').trim();\n switch (direction) {\n case 'top':\n y1 = '100%';\n y2 = '0%';\n break;\n case 'bottom':\n y1 = '0%';\n y2 = '100%';\n break;\n case 'left':\n x1 = '100%';\n x2 = '0%';\n break;\n case 'right':\n x2 = '100%';\n break;\n case 'top right':\n x1 = '0%';\n y1 = '100%';\n x2 = '100%';\n y2 = '0%';\n break;\n case 'top left':\n x1 = '100%';\n y1 = '100%';\n x2 = '0%';\n y2 = '0%';\n break;\n case 'bottom right':\n x2 = '100%';\n y2 = '100%';\n break;\n case 'bottom left':\n x1 = '100%';\n y2 = '100%';\n break;\n }\n }\n // 2. Check for Degrees (45deg, 90deg, etc.)\n else if (firstPart.match(/^-?[\\d.]+(deg|rad|turn|grad)$/)) {\n stopsStartIndex = 1;\n const val = parseFloat(firstPart);\n // CSS 0deg is Top (North), 90deg is Right (East), 180deg is Bottom (South)\n // We convert this to SVG coordinates on a unit square (0-100%).\n // Formula: Map angle to perimeter coordinates.\n if (!isNaN(val)) {\n const deg = firstPart.includes('rad') ? val * (180 / Math.PI) : val;\n const cssRad = ((deg - 90) * Math.PI) / 180; // Correct CSS angle offset\n\n // Calculate standard vector for rectangle center (50, 50)\n const scale = 50; // Distance from center to edge (approx)\n const cos = Math.cos(cssRad); // Y component (reversed in SVG)\n const sin = Math.sin(cssRad); // X component\n\n // Invert Y for SVG coordinate system\n x1 = (50 - sin * scale).toFixed(1) + '%';\n y1 = (50 + cos * scale).toFixed(1) + '%';\n x2 = (50 + sin * scale).toFixed(1) + '%';\n y2 = (50 - cos * scale).toFixed(1) + '%';\n }\n }\n\n // 3. Process Color Stops\n let stopsXML = '';\n const stopParts = parts.slice(stopsStartIndex);\n\n stopParts.forEach((part, idx) => {\n // Parse \"Color Position\" (e.g., \"red 50%\")\n // Regex looks for optional space + number + unit at the end of the string\n let color = part;\n let offset = Math.round((idx / (stopParts.length - 1)) * 100) + '%';\n\n const posMatch = part.match(/^(.*?)\\s+(-?[\\d.]+(?:%|px)?)$/);\n if (posMatch) {\n color = posMatch[1];\n offset = posMatch[2];\n }\n\n // Handle RGBA/RGB for SVG compatibility\n let opacity = 1;\n if (color.includes('rgba')) {\n const rgbaMatch = color.match(/[\\d.]+/g);\n if (rgbaMatch && rgbaMatch.length >= 4) {\n opacity = rgbaMatch[3];\n color = `rgb(${rgbaMatch[0]},${rgbaMatch[1]},${rgbaMatch[2]})`;\n }\n }\n\n stopsXML += `<stop offset=\"${offset}\" stop-color=\"${color.trim()}\" stop-opacity=\"${opacity}\"/>`;\n });\n\n let strokeAttr = '';\n if (border) {\n strokeAttr = `stroke=\"#${border.color}\" stroke-width=\"${border.width}\"`;\n }\n\n const svg = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\n <defs>\n <linearGradient id=\"grad\" x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\">\n ${stopsXML}\n </linearGradient>\n </defs>\n <rect x=\"0\" y=\"0\" width=\"${w}\" height=\"${h}\" rx=\"${radius}\" ry=\"${radius}\" fill=\"url(#grad)\" ${strokeAttr} />\n </svg>`;\n\n return 'data:image/svg+xml;base64,' + btoa(svg);\n } catch (e) {\n console.warn('Gradient generation failed:', e);\n return null;\n }\n}\n\nexport function generateBlurredSVG(w, h, color, radius, blurPx) {\n const padding = blurPx * 3;\n const fullW = w + padding * 2;\n const fullH = h + padding * 2;\n const x = padding;\n const y = padding;\n let shapeTag = '';\n const isCircle = radius >= Math.min(w, h) / 2 - 1 && Math.abs(w - h) < 2;\n\n if (isCircle) {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const rx = w / 2;\n const ry = h / 2;\n shapeTag = `<ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"#${color}\" filter=\"url(#f1)\" />`;\n } else {\n shapeTag = `<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\" rx=\"${radius}\" ry=\"${radius}\" fill=\"#${color}\" filter=\"url(#f1)\" />`;\n }\n\n const svg = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${fullW}\" height=\"${fullH}\" viewBox=\"0 0 ${fullW} ${fullH}\">\n <defs>\n <filter id=\"f1\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"${blurPx}\" />\n </filter>\n </defs>\n ${shapeTag}\n </svg>`;\n\n return {\n data: 'data:image/svg+xml;base64,' + btoa(svg),\n padding: padding,\n };\n}\n\n// src/utils.js\n\n// ... (keep all existing exports) ...\n\n/**\n * Traverses the target DOM and collects all unique font-family names used.\n */\nexport function getUsedFontFamilies(root) {\n const families = new Set();\n\n function scan(node) {\n if (node.nodeType === 1) {\n // Element\n const style = window.getComputedStyle(node);\n const fontList = normalizeFontList(style.fontFamily);\n fontList.forEach((f) => families.add(f));\n }\n for (const child of node.childNodes) {\n scan(child);\n }\n }\n\n // Handle array of roots or single root\n const elements = Array.isArray(root) ? root : [root];\n elements.forEach((el) => {\n const node = typeof el === 'string' ? document.querySelector(el) : el;\n if (node) scan(node);\n });\n\n return families;\n}\n\n/**\n * Scans document.styleSheets to find @font-face URLs for the requested families.\n * Returns an array of { name, url } objects.\n */\nexport async function getAutoDetectedFonts(usedFamilies) {\n const foundFonts = [];\n const processedUrls = new Set();\n\n // Helper to extract clean URL from CSS src string\n const extractUrl = (srcStr) => {\n // Look for url(\"...\") or url('...') or url(...)\n // Prioritize woff, ttf, otf. Avoid woff2 if possible as handling is harder,\n // but if it's the only one, take it (convert logic handles it best effort).\n const matches = srcStr.match(/url\\((['\"]?)(.*?)\\1\\)/g);\n if (!matches) return null;\n\n // Filter for preferred formats\n let chosenUrl = null;\n for (const match of matches) {\n const urlRaw = match.replace(/url\\((['\"]?)(.*?)\\1\\)/, '$2');\n // Skip data URIs for now (unless you want to support base64 embedding)\n if (urlRaw.startsWith('data:')) continue;\n\n if (urlRaw.includes('.ttf') || urlRaw.includes('.otf') || urlRaw.includes('.woff')) {\n chosenUrl = urlRaw;\n break; // Found a good one\n }\n // Fallback\n if (!chosenUrl) chosenUrl = urlRaw;\n }\n return chosenUrl;\n };\n\n for (const sheet of Array.from(document.styleSheets)) {\n try {\n // Accessing cssRules on cross-origin sheets (like Google Fonts) might fail\n // if CORS headers aren't set. We wrap in try/catch.\n const rules = sheet.cssRules || sheet.rules;\n if (!rules) continue;\n\n for (const rule of Array.from(rules)) {\n if (rule.constructor.name === 'CSSFontFaceRule' || rule.type === 5) {\n const familyName = rule.style.getPropertyValue('font-family').replace(/['\"]/g, '').trim();\n\n if (usedFamilies.has(familyName)) {\n const src = rule.style.getPropertyValue('src');\n const url = extractUrl(src);\n\n if (url && !processedUrls.has(url)) {\n processedUrls.add(url);\n foundFonts.push({ name: familyName, url: url });\n }\n }\n }\n }\n } catch (e) {\n // SecurityError is common for external stylesheets (CORS).\n // We cannot scan those automatically via CSSOM.\n console.warn('error:', e);\n console.warn('Cannot scan stylesheet for fonts (CORS restriction):', sheet.href);\n }\n }\n\n return foundFonts;\n}\n","// src/image-processor.js\n\nexport async function getProcessedImage(\n src,\n targetW,\n targetH,\n radius,\n objectFit = 'fill',\n objectPosition = '50% 50%'\n) {\n return new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n\n img.onload = () => {\n const canvas = document.createElement('canvas');\n const scale = 2; // Double resolution\n canvas.width = targetW * scale;\n canvas.height = targetH * scale;\n const ctx = canvas.getContext('2d');\n ctx.scale(scale, scale);\n\n // Normalize radius\n let r = { tl: 0, tr: 0, br: 0, bl: 0 };\n if (typeof radius === 'number') {\n r = { tl: radius, tr: radius, br: radius, bl: radius };\n } else if (typeof radius === 'object' && radius !== null) {\n r = { ...r, ...radius };\n }\n\n // 1. Draw Mask\n ctx.beginPath();\n // ... (radius clamping logic remains the same) ...\n const factor = Math.min(\n targetW / (r.tl + r.tr) || Infinity,\n targetH / (r.tr + r.br) || Infinity,\n targetW / (r.br + r.bl) || Infinity,\n targetH / (r.bl + r.tl) || Infinity\n );\n\n if (factor < 1) {\n r.tl *= factor;\n r.tr *= factor;\n r.br *= factor;\n r.bl *= factor;\n }\n\n ctx.moveTo(r.tl, 0);\n ctx.lineTo(targetW - r.tr, 0);\n ctx.arcTo(targetW, 0, targetW, r.tr, r.tr);\n ctx.lineTo(targetW, targetH - r.br);\n ctx.arcTo(targetW, targetH, targetW - r.br, targetH, r.br);\n ctx.lineTo(r.bl, targetH);\n ctx.arcTo(0, targetH, 0, targetH - r.bl, r.bl);\n ctx.lineTo(0, r.tl);\n ctx.arcTo(0, 0, r.tl, 0, r.tl);\n ctx.closePath();\n ctx.fillStyle = '#000';\n ctx.fill();\n\n // 2. Composite Source-In\n ctx.globalCompositeOperation = 'source-in';\n\n // 3. Draw Image with Object Fit logic\n const wRatio = targetW / img.width;\n const hRatio = targetH / img.height;\n let renderW, renderH;\n\n if (objectFit === 'contain') {\n const fitScale = Math.min(wRatio, hRatio);\n renderW = img.width * fitScale;\n renderH = img.height * fitScale;\n } else if (objectFit === 'cover') {\n const coverScale = Math.max(wRatio, hRatio);\n renderW = img.width * coverScale;\n renderH = img.height * coverScale;\n } else if (objectFit === 'none') {\n renderW = img.width;\n renderH = img.height;\n } else if (objectFit === 'scale-down') {\n const scaleDown = Math.min(1, Math.min(wRatio, hRatio));\n renderW = img.width * scaleDown;\n renderH = img.height * scaleDown;\n } else {\n // 'fill' (default)\n renderW = targetW;\n renderH = targetH;\n }\n\n // Handle Object Position (simplified parsing for \"x% y%\" or keywords)\n let posX = 0.5; // Default center\n let posY = 0.5;\n\n const posParts = objectPosition.split(' ');\n if (posParts.length > 0) {\n const parsePos = (val) => {\n if (val === 'left' || val === 'top') return 0;\n if (val === 'center') return 0.5;\n if (val === 'right' || val === 'bottom') return 1;\n if (val.includes('%')) return parseFloat(val) / 100;\n return 0.5; // fallback\n };\n posX = parsePos(posParts[0]);\n posY = posParts.length > 1 ? parsePos(posParts[1]) : 0.5;\n }\n\n const renderX = (targetW - renderW) * posX;\n const renderY = (targetH - renderH) * posY;\n\n ctx.drawImage(img, renderX, renderY, renderW, renderH);\n\n resolve(canvas.toDataURL('image/png'));\n };\n\n img.onerror = () => resolve(null);\n img.src = src;\n });\n}\n","// src/index.js\nimport * as PptxGenJSImport from 'pptxgenjs';\nimport html2canvas from 'html2canvas';\nimport { PPTXEmbedFonts } from './font-embedder.js';\nimport JSZip from 'jszip';\n\n// Normalize import\nconst PptxGenJS = PptxGenJSImport?.default ?? PptxGenJSImport;\n\nimport {\n parseColor,\n getTextStyle,\n isTextContainer,\n getVisibleShadow,\n generateGradientSVG,\n getRotation,\n svgToPng,\n getPadding,\n getSoftEdges,\n generateBlurredSVG,\n getBorderInfo,\n generateCompositeBorderSVG,\n isClippedByParent,\n generateCustomShapeSVG,\n getUsedFontFamilies,\n getAutoDetectedFonts,\n extractTableData,\n computeTableCellFill,\n buildChartRegistry\n} from './utils.js';\nimport { getProcessedImage } from './image-processor.js';\n\nconst PPI = 96;\nconst PX_TO_INCH = 1 / PPI;\n\n/**\n * Fix Chinese font attributes (pitchFamily and charset) in PPTX XML.\n * PptxGenJS sometimes generates incorrect charset=\"0\" for East Asian fonts.\n * @param {Blob} blob - The PPTX blob\n * @returns {Promise<Blob>} - Fixed PPTX blob\n */\nasync function fixChineseFontAttributes(blob) {\n const zip = await JSZip.loadAsync(blob);\n const cjkFonts = ['Heiti TC', 'Heiti SC', 'PingFang SC', 'Microsoft YaHei', 'SimHei', 'SimSun'];\n\n // Process all slide XML files\n const slideFiles = Object.keys(zip.files).filter(name =>\n name.startsWith('ppt/slides/slide') && name.endsWith('.xml')\n );\n\n for (const slidePath of slideFiles) {\n let xml = await zip.file(slidePath).async('text');\n let modified = false;\n\n // Fix <a:ea> and <a:cs> tags for CJK fonts\n // Replace tags that have charset=\"0\" (incorrect for CJK) with proper values\n for (const fontName of cjkFonts) {\n // Fix <a:ea> - East Asian font\n const eaPattern = new RegExp(\n `<a:ea typeface=\"${fontName}\"[^>]*>`,\n 'g'\n );\n xml = xml.replace(eaPattern, `<a:ea typeface=\"${fontName}\" pitchFamily=\"34\" charset=\"-122\"/>`);\n\n // Fix <a:cs> - Complex Script font\n const csPattern = new RegExp(\n `<a:cs typeface=\"${fontName}\"[^>]*>`,\n 'g'\n );\n xml = xml.replace(csPattern, `<a:cs typeface=\"${fontName}\" pitchFamily=\"34\" charset=\"-120\"/>`);\n\n // Fix <a:latin> - Latin font (if it's a CJK font used as Latin)\n const latinPattern = new RegExp(\n `<a:latin typeface=\"${fontName}\"[^>]*>`,\n 'g'\n );\n xml = xml.replace(latinPattern, `<a:latin typeface=\"${fontName}\" pitchFamily=\"34\" charset=\"0\"/>`);\n }\n modified = true;\n\n if (modified) {\n zip.file(slidePath, xml);\n }\n }\n\n // Generate new blob\n return await zip.generateAsync({ type: 'blob' });\n}\n\n/**\n * Main export function.\n * @param {HTMLElement | string | Array<HTMLElement | string>} target\n * @param {Object} options\n * @param {string} [options.fileName]\n * @param {boolean} [options.skipDownload=false] - If true, prevents automatic download\n * @param {Object} [options.listConfig] - Config for bullets\n * @returns {Promise<Blob>} - Returns the generated PPTX Blob\n */\nexport async function exportToPptx(target, options = {}) {\n const resolvePptxConstructor = (pkg) => {\n if (!pkg) return null;\n if (typeof pkg === 'function') return pkg;\n if (pkg && typeof pkg.default === 'function') return pkg.default;\n if (pkg && typeof pkg.PptxGenJS === 'function') return pkg.PptxGenJS;\n if (pkg && pkg.PptxGenJS && typeof pkg.PptxGenJS.default === 'function')\n return pkg.PptxGenJS.default;\n return null;\n };\n\n const PptxConstructor = resolvePptxConstructor(PptxGenJS);\n if (!PptxConstructor) throw new Error('PptxGenJS constructor not found.');\n const pptx = new PptxConstructor();\n pptx.layout = 'LAYOUT_16x9';\n pptx.language = 'zh-CN';\n\n const elements = Array.isArray(target) ? target : [target];\n\n for (const el of elements) {\n const root = typeof el === 'string' ? document.querySelector(el) : el;\n if (!root) {\n console.warn('Element not found, skipping slide:', el);\n continue;\n }\n const slide = pptx.addSlide();\n await processSlide(root, slide, pptx, options);\n }\n\n // 3. Font Embedding Logic\n let finalBlob;\n let fontsToEmbed = options.fonts || [];\n\n if (options.autoEmbedFonts) {\n // A. Scan DOM for used font families\n const usedFamilies = getUsedFontFamilies(elements);\n\n // B. Scan CSS for URLs matches\n const detectedFonts = await getAutoDetectedFonts(usedFamilies);\n\n // C. Merge (Avoid duplicates)\n const explicitNames = new Set(fontsToEmbed.map((f) => f.name));\n for (const autoFont of detectedFonts) {\n if (!explicitNames.has(autoFont.name)) {\n fontsToEmbed.push(autoFont);\n }\n }\n\n if (detectedFonts.length > 0) {\n console.log(\n 'Auto-detected fonts:',\n detectedFonts.map((f) => f.name)\n );\n }\n }\n\n if (fontsToEmbed.length > 0) {\n // Generate initial PPTX\n const initialBlob = await pptx.write({ outputType: 'blob' });\n\n // Load into Embedder\n const zip = await JSZip.loadAsync(initialBlob);\n const embedder = new PPTXEmbedFonts();\n await embedder.loadZip(zip);\n\n // Fetch and Embed\n for (const fontCfg of fontsToEmbed) {\n try {\n const response = await fetch(fontCfg.url);\n if (!response.ok) throw new Error(`Failed to fetch ${fontCfg.url}`);\n const buffer = await response.arrayBuffer();\n\n // Infer type\n const ext = fontCfg.url.split('.').pop().split(/[?#]/)[0].toLowerCase();\n let type = 'ttf';\n if (['woff', 'otf'].includes(ext)) type = ext;\n\n await embedder.addFont(fontCfg.name, buffer, type);\n } catch (e) {\n console.warn(`Failed to embed font: ${fontCfg.name} (${fontCfg.url})`, e);\n }\n }\n\n await embedder.updateFiles();\n finalBlob = await embedder.generateBlob();\n } else {\n // No fonts to embed\n finalBlob = await pptx.write({ outputType: 'blob' });\n }\n\n // Fix Chinese font attributes (pitchFamily and charset) in all slide XMLs\n finalBlob = await fixChineseFontAttributes(finalBlob);\n\n // 4. Output Handling\n // If skipDownload is NOT true, proceed with browser download\n if (!options.skipDownload) {\n const fileName = options.fileName || 'export.pptx';\n const url = URL.createObjectURL(finalBlob);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n // Always return the blob so the caller can use it (e.g. upload to server)\n return finalBlob;\n}\n\n/**\n * Worker function to process a single DOM element into a single PPTX slide.\n * @param {HTMLElement} root - The root element for this slide.\n * @param {PptxGenJS.Slide} slide - The PPTX slide object to add content to.\n * @param {PptxGenJS} pptx - The main PPTX instance.\n */\nasync function processSlide(root, slide, pptx, globalOptions = {}) {\n const rootRect = root.getBoundingClientRect();\n const PPTX_WIDTH_IN = 10;\n const PPTX_HEIGHT_IN = 5.625;\n\n const contentWidthIn = rootRect.width * PX_TO_INCH;\n const contentHeightIn = rootRect.height * PX_TO_INCH;\n const scale = Math.min(PPTX_WIDTH_IN / contentWidthIn, PPTX_HEIGHT_IN / contentHeightIn);\n\n const layoutConfig = {\n rootX: rootRect.x,\n rootY: rootRect.y,\n scale: scale,\n offX: (PPTX_WIDTH_IN - contentWidthIn * scale) / 2,\n offY: (PPTX_HEIGHT_IN - contentHeightIn * scale) / 2,\n };\n\n const chartRegistry = buildChartRegistry(root, globalOptions.chartConfigs);\n const slideOptions = { ...globalOptions, chartRegistry };\n\n const renderQueue = [];\n const asyncTasks = []; // Queue for heavy operations (Images, Canvas)\n let domOrderCounter = 0;\n\n // Sync Traversal Function\n function collect(node, parentZIndex) {\n const order = domOrderCounter++;\n\n let currentZ = parentZIndex;\n let nodeStyle = null;\n const nodeType = node.nodeType;\n\n if (nodeType === 1) {\n nodeStyle = window.getComputedStyle(node);\n // Optimization: Skip completely hidden elements immediately\n if (\n nodeStyle.display === 'none' ||\n nodeStyle.visibility === 'hidden' ||\n nodeStyle.opacity === '0'\n ) {\n return;\n }\n if (nodeStyle.zIndex !== 'auto') {\n currentZ = parseInt(nodeStyle.zIndex);\n }\n }\n\n // Prepare the item. If it needs async work, it returns a 'job'\n const result = prepareRenderItem(\n node,\n { ...layoutConfig, root },\n order,\n pptx,\n currentZ,\n nodeStyle,\n slideOptions\n );\n\n if (result) {\n if (result.items) {\n // Push items immediately to queue (data might be missing but filled later)\n renderQueue.push(...result.items);\n }\n if (result.job) {\n // Push the promise-returning function to the task list\n asyncTasks.push(result.job);\n }\n if (result.stopRecursion) return;\n }\n\n // Recurse children synchronously\n const childNodes = node.childNodes;\n for (let i = 0; i < childNodes.length; i++) {\n collect(childNodes[i], currentZ);\n }\n }\n\n // 1. Traverse and build the structure (Fast)\n collect(root, 0);\n\n // 2. Execute all heavy tasks in parallel (Fast)\n if (asyncTasks.length > 0) {\n await Promise.all(asyncTasks.map((task) => task()));\n }\n\n // 3. Cleanup and Sort\n // Remove items that failed to generate data (marked with skip)\n const finalQueue = renderQueue.filter(\n (item) => !item.skip && (item.type !== 'image' || item.options.data)\n );\n\n finalQueue.sort((a, b) => {\n if (a.zIndex !== b.zIndex) return a.zIndex - b.zIndex;\n return a.domOrder - b.domOrder;\n });\n\n // 4. Add to Slide\n for (const item of finalQueue) {\n if (item.type === 'shape') slide.addShape(item.shapeType, item.options);\n if (item.type === 'image') slide.addImage(item.options);\n if (item.type === 'text') slide.addText(item.textParts, item.options);\n if (item.type === 'chart') {\n const chartType = PptxGenJS.ChartType?.[item.chartType] ?? item.chartType;\n slide.addChart(chartType, item.chartData, item.options);\n }\n if (item.type === 'table') {\n slide.addTable(item.tableData.rows, {\n x: item.options.x,\n y: item.options.y,\n w: item.options.w,\n colW: item.tableData.colWidths, // Essential for correct layout\n autoPage: false,\n // Remove default table styles so our extracted CSS applies cleanly\n border: { type: \"none\" },\n fill: { color: \"FFFFFF\", transparency: 100 }\n });\n }\n }\n}\n\n/**\n * Optimized html2canvas wrapper\n * Includes fix for cropped icons by adjusting styles in the cloned document.\n */\nasync function elementToCanvasImage(node, widthPx, heightPx) {\n return new Promise((resolve) => {\n // 1. Assign a temp ID to locate the node inside the cloned document\n const originalId = node.id;\n const tempId = 'pptx-capture-' + Math.random().toString(36).substr(2, 9);\n node.id = tempId;\n\n const width = Math.max(Math.ceil(widthPx), 1);\n const height = Math.max(Math.ceil(heightPx), 1);\n const style = window.getComputedStyle(node);\n\n html2canvas(node, {\n backgroundColor: null,\n logging: false,\n scale: 3, // Higher scale for sharper icons\n useCORS: true, // critical for external fonts/images\n onclone: (clonedDoc) => {\n const clonedNode = clonedDoc.getElementById(tempId);\n if (clonedNode) {\n // --- FIX: PREVENT ICON CLIPPING ---\n // 1. Force overflow visible so glyphs bleeding out aren't cut\n clonedNode.style.overflow = 'visible';\n\n // 2. Adjust alignment for Icons to prevent baseline clipping\n // (Applies to <i>, <span>, or standard icon classes)\n const tag = clonedNode.tagName;\n if (tag === 'I' || tag === 'SPAN' || clonedNode.className.includes('fa-')) {\n // Flex center helps align the glyph exactly in the middle of the box\n // preventing top/bottom cropping due to line-height mismatches.\n clonedNode.style.display = 'inline-flex';\n clonedNode.style.justifyContent = 'center';\n clonedNode.style.alignItems = 'center';\n\n // Remove margins that might offset the capture\n clonedNode.style.margin = '0';\n\n // Ensure the font fits\n clonedNode.style.lineHeight = '1';\n clonedNode.style.verticalAlign = 'middle';\n }\n }\n },\n })\n .then((canvas) => {\n // Restore the original ID\n if (originalId) node.id = originalId;\n else node.removeAttribute('id');\n\n const destCanvas = document.createElement('canvas');\n destCanvas.width = width;\n destCanvas.height = height;\n const ctx = destCanvas.getContext('2d');\n\n // Draw captured canvas.\n // We simply draw it to fill the box. Since we centered it in 'onclone',\n // the glyph should now be visible within the bounds.\n ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, width, height);\n\n // --- Border Radius Clipping (Existing Logic) ---\n let tl = parseFloat(style.borderTopLeftRadius) || 0;\n let tr = parseFloat(style.borderTopRightRadius) || 0;\n let br = parseFloat(style.borderBottomRightRadius) || 0;\n let bl = parseFloat(style.borderBottomLeftRadius) || 0;\n\n const f = Math.min(\n width / (tl + tr) || Infinity,\n height / (tr + br) || Infinity,\n width / (br + bl) || Infinity,\n height / (bl + tl) || Infinity\n );\n\n if (f < 1) {\n tl *= f;\n tr *= f;\n br *= f;\n bl *= f;\n }\n\n if (tl + tr + br + bl > 0) {\n ctx.globalCompositeOperation = 'destination-in';\n ctx.beginPath();\n ctx.moveTo(tl, 0);\n ctx.lineTo(width - tr, 0);\n ctx.arcTo(width, 0, width, tr, tr);\n ctx.lineTo(width, height - br);\n ctx.arcTo(width, height, width - br, height, br);\n ctx.lineTo(bl, height);\n ctx.arcTo(0, height, 0, height - bl, bl);\n ctx.lineTo(0, tl);\n ctx.arcTo(0, 0, tl, 0, tl);\n ctx.closePath();\n ctx.fill();\n }\n\n resolve(destCanvas.toDataURL('image/png'));\n })\n .catch((e) => {\n if (originalId) node.id = originalId;\n else node.removeAttribute('id');\n console.warn('Canvas capture failed for node', node, e);\n resolve(null);\n });\n });\n}\n\n/**\n * Helper to identify elements that should be rendered as icons (Images).\n * Detects Custom Elements AND generic tags (<i>, <span>) with icon classes/pseudo-elements.\n */\nfunction isIconElement(node) {\n // 1. Custom Elements (hyphenated tags) or Explicit Library Tags\n const tag = node.tagName.toUpperCase();\n if (\n tag.includes('-') ||\n [\n 'MATERIAL-ICON',\n 'ICONIFY-ICON',\n 'REMIX-ICON',\n 'ION-ICON',\n 'EVA-ICON',\n 'BOX-ICON',\n 'FA-ICON',\n ].includes(tag)\n ) {\n return true;\n }\n\n // 2. Class-based Icons (FontAwesome, Bootstrap, Material symbols) on <i> or <span>\n if (tag === 'I' || tag === 'SPAN') {\n const cls = node.getAttribute('class') || '';\n if (\n typeof cls === 'string' &&\n (cls.includes('fa-') ||\n cls.includes('fas') ||\n cls.includes('far') ||\n cls.includes('fab') ||\n cls.includes('bi-') ||\n cls.includes('material-icons') ||\n cls.includes('icon'))\n ) {\n // Double-check: Must have pseudo-element content to be a CSS icon\n const before = window.getComputedStyle(node, '::before').content;\n const after = window.getComputedStyle(node, '::after').content;\n const hasContent = (c) => c && c !== 'none' && c !== 'normal' && c !== '\"\"';\n\n if (hasContent(before) || hasContent(after)) return true;\n }\n }\n\n return false;\n}\n\n/**\n * Replaces createRenderItem.\n * Returns { items: [], job: () => Promise, stopRecursion: boolean }\n */\nfunction prepareRenderItem(\n node,\n config,\n domOrder,\n pptx,\n effectiveZIndex,\n computedStyle,\n globalOptions = {}\n) {\n // 1. Text Node Handling\n if (node.nodeType === 3) {\n const textContent = node.nodeValue.trim();\n if (!textContent) return null;\n\n const parent = node.parentElement;\n if (!parent) return null;\n\n if (isTextContainer(parent)) return null; // Parent handles it\n\n const range = document.createRange();\n range.selectNode(node);\n const rect = range.getBoundingClientRect();\n range.detach();\n\n const style = window.getComputedStyle(parent);\n // Use parent element's rect for better width calculation\n // This is especially important for flex children where text node rect may be too narrow\n const parentRect = parent.getBoundingClientRect();\n const useParentRect = parentRect.width > rect.width;\n let widthPx = useParentRect ? parentRect.width : rect.width;\n const heightPx = useParentRect ? parentRect.height : rect.height;\n\n // Add extra width buffer to prevent text wrapping in PPTX due to font rendering differences\n // Chinese characters and certain fonts need more space in PPTX than in browser\n widthPx = widthPx * 1.3; // Add 30% extra width\n const unrotatedW = widthPx * PX_TO_INCH * config.scale;\n const unrotatedH = heightPx * PX_TO_INCH * config.scale;\n\n // Use parent rect's position if we're using parent dimensions\n const sourceRect = useParentRect ? parentRect : rect;\n const x = config.offX + (sourceRect.left - config.rootX) * PX_TO_INCH * config.scale;\n const y = config.offY + (sourceRect.top - config.rootY) * PX_TO_INCH * config.scale;\n\n return {\n items: [\n {\n type: 'text',\n zIndex: effectiveZIndex,\n domOrder,\n textParts: [\n {\n text: textContent,\n options: (() => {\n const opts = getTextStyle(style, config.scale, textContent, globalOptions);\n const bg = parseColor(style.backgroundColor);\n if (opts.highlight && bg.hex && bg.opacity > 0 && !isTextContainer(parent)) {\n delete opts.highlight;\n }\n return opts;\n })(),\n },\n ],\n options: { x, y, w: unrotatedW, h: unrotatedH, margin: 0, autoFit: false },\n },\n ],\n stopRecursion: false,\n };\n }\n\n if (node.nodeType !== 1) return null;\n const style = computedStyle; // Use pre-computed style\n\n const rect = node.getBoundingClientRect();\n if (rect.width < 0.5 || rect.height < 0.5) return null;\n\n const zIndex = effectiveZIndex;\n const rotation = getRotation(style.transform);\n const elementOpacity = parseFloat(style.opacity);\n const safeOpacity = isNaN(elementOpacity) ? 1 : elementOpacity;\n\n let widthPx = node.offsetWidth || rect.width;\n const heightPx = node.offsetHeight || rect.height;\n const unrotatedW = widthPx * PX_TO_INCH * config.scale;\n const unrotatedH = heightPx * PX_TO_INCH * config.scale;\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n\n let x = config.offX + (centerX - config.rootX) * PX_TO_INCH * config.scale - unrotatedW / 2;\n let y = config.offY + (centerY - config.rootY) * PX_TO_INCH * config.scale - unrotatedH / 2;\n let w = unrotatedW;\n let h = unrotatedH;\n\n const items = [];\n\n const chartConfig = globalOptions.chartRegistry?.get(node);\n if (chartConfig) {\n const chartOptions = {\n ...chartConfig.chartOptions,\n x,\n y,\n w: unrotatedW,\n h: unrotatedH,\n };\n\n return {\n items: [\n {\n type: 'chart',\n zIndex: effectiveZIndex,\n domOrder,\n chartType: chartConfig.chartType,\n chartData: chartConfig.chartData,\n options: chartOptions,\n },\n ],\n stopRecursion: true,\n };\n }\n\n // --- Handle both native TABLE and div-based table structures ---\n const isTableLike = node.tagName === 'TABLE' || detectTableLikeStructure(node);\n if (isTableLike) {\n let tableData;\n if (node.tagName === 'TABLE') {\n tableData = extractTableData(node, config.scale, { ...globalOptions, root: config.root });\n } else {\n // Extract data from div-based table structure\n tableData = extractDivTableData(node, config.scale, { ...globalOptions, root: config.root });\n }\n const cellBgItems = [];\n const renderCellBg = globalOptions.tableConfig?.renderCellBackgrounds !== false;\n\n if (renderCellBg) {\n const trList = node.querySelectorAll('tr');\n trList.forEach((tr) => {\n const cellList = Array.from(tr.children).filter((c) => ['TD', 'TH'].includes(c.tagName));\n cellList.forEach((cell) => {\n const style = window.getComputedStyle(cell);\n const fill = computeTableCellFill(style, cell, config.root, globalOptions);\n if (!fill) return;\n\n const rect = cell.getBoundingClientRect();\n const wIn = rect.width * PX_TO_INCH * config.scale;\n const hIn = rect.height * PX_TO_INCH * config.scale;\n const xIn = config.offX + (rect.left - config.rootX) * PX_TO_INCH * config.scale;\n const yIn = config.offY + (rect.top - config.rootY) * PX_TO_INCH * config.scale;\n\n cellBgItems.push({\n type: 'shape',\n zIndex: effectiveZIndex - 0.5,\n domOrder,\n shapeType: 'rect',\n options: { x: xIn, y: yIn, w: wIn, h: hIn, fill: fill, line: { color: 'FFFFFF', transparency: 100 } }\n });\n });\n });\n }\n\n // Calculate total table width to ensure X position is correct\n // (Though x calculation above usually handles it, tables can be finicky)\n return {\n items: [\n ...cellBgItems,\n {\n type: 'table',\n zIndex: effectiveZIndex,\n domOrder,\n tableData: tableData,\n options: { x, y, w: unrotatedW, h: unrotatedH }\n }\n ],\n stopRecursion: true // Important: Don't process TR/TD as separate shapes\n };\n }\n\n if ((node.tagName === 'UL' || node.tagName === 'OL') && !isComplexHierarchy(node)) {\n const listItems = [];\n const liChildren = Array.from(node.children).filter((c) => c.tagName === 'LI');\n\n liChildren.forEach((child, index) => {\n const liStyle = window.getComputedStyle(child);\n const liRect = child.getBoundingClientRect();\n const parentRect = node.getBoundingClientRect(); // node is UL/OL\n\n // 1. Determine Bullet Config\n let bullet = { type: 'bullet' };\n const listStyleType = liStyle.listStyleType || 'disc';\n\n if (node.tagName === 'OL' || listStyleType === 'decimal') {\n bullet = { type: 'number' };\n } else if (listStyleType === 'none') {\n bullet = false;\n } else {\n let code = '2022'; // disc\n if (listStyleType === 'circle') code = '25CB';\n if (listStyleType === 'square') code = '25A0';\n\n // --- CHANGE: Color & Size Logic (Option > ::marker > CSS color) ---\n let finalHex = '000000';\n let markerFontSize = null;\n\n // A. Check Global Option override\n if (globalOptions?.listConfig?.color) {\n finalHex = parseColor(globalOptions.listConfig.color).hex || '000000';\n }\n // B. Check ::marker pseudo element (supported in modern browsers)\n else {\n const markerStyle = window.getComputedStyle(child, '::marker');\n const markerColor = parseColor(markerStyle.color);\n if (markerColor.hex) {\n finalHex = markerColor.hex;\n } else {\n // C. Fallback to LI text color\n const colorObj = parseColor(liStyle.color);\n if (colorObj.hex) finalHex = colorObj.hex;\n }\n\n // Check ::marker font-size\n const markerFs = parseFloat(markerStyle.fontSize);\n if (!isNaN(markerFs) && markerFs > 0) {\n // Convert px->pt for PPTX\n markerFontSize = markerFs * 0.75 * config.scale;\n }\n }\n\n bullet = { code, color: finalHex };\n if (markerFontSize) {\n bullet.fontSize = markerFontSize;\n }\n }\n\n // 2. Calculate Dynamic Indent (Respects padding-left)\n // Visual Indent = Distance from UL left edge to LI Content left edge.\n // PptxGenJS 'indent' = Space between bullet and text? \n // Actually PptxGenJS 'indent' allows setting the hanging indent.\n // We calculate the TOTAL visual offset from the parent container.\n // 1 px = 0.75 pt (approx, standard DTP).\n // We must scale it by config.scale.\n const visualIndentPx = liRect.left - parentRect.left;\n /*\n Standard indent in PPT is ~27pt.\n If visualIndentPx is small (e.g. 10px padding), we want small indent.\n If visualIndentPx is large (40px padding), we want large indent.\n We treat 'indent' as the value to pass to PptxGenJS.\n */\n const computedIndentPt = visualIndentPx * 0.75 * config.scale;\n\n if (bullet && computedIndentPt > 0) {\n bullet.indent = computedIndentPt;\n // Also support custom margin between bullet and text if provided in listConfig?\n // For now, computedIndentPt covers the visual placement.\n }\n\n // 3. Extract Text Parts\n const parts = collectListParts(child, liStyle, config.scale, globalOptions);\n\n if (parts.length > 0) {\n parts.forEach((p) => {\n if (!p.options) p.options = {};\n });\n\n // A. Apply Bullet\n // Workaround: pptxgenjs bullets inherit the style of the text run they are attached to.\n // To support ::marker styles (color, size) that differ from the text, we create\n // a \"dummy\" text run at the start of the list item that carries the bullet configuration.\n if (bullet) {\n const firstPartInfo = parts[0].options;\n\n // Create a dummy run. We use a Zero Width Space to ensure it's rendered but invisible.\n // This \"run\" will hold the bullet and its specific color/size.\n const bulletRun = {\n text: '\\u200B',\n options: {\n ...firstPartInfo, // Inherit base props (fontFace, etc.)\n color: bullet.color || firstPartInfo.color,\n fontSize: bullet.fontSize || firstPartInfo.fontSize,\n bullet: bullet\n }\n };\n\n // Don't duplicate transparent or empty color from firstPart if bullet has one\n if (bullet.color) bulletRun.options.color = bullet.color;\n if (bullet.fontSize) bulletRun.options.fontSize = bullet.fontSize;\n\n // Prepend\n parts.unshift(bulletRun);\n }\n\n // B. Apply Spacing\n let ptBefore = 0;\n let ptAfter = 0;\n\n // A. Check Global Options (Expected in Points)\n if (globalOptions.listConfig?.spacing) {\n if (typeof globalOptions.listConfig.spacing.before === 'number') {\n ptBefore = globalOptions.listConfig.spacing.before;\n }\n if (typeof globalOptions.listConfig.spacing.after === 'number') {\n ptAfter = globalOptions.listConfig.spacing.after;\n }\n }\n // B. Fallback to CSS Margins (Convert px -> pt)\n else {\n const mt = parseFloat(liStyle.marginTop) || 0;\n const mb = parseFloat(liStyle.marginBottom) || 0;\n if (mt > 0) ptBefore = mt * 0.75 * config.scale;\n if (mb > 0) ptAfter = mb * 0.75 * config.scale;\n }\n\n if (ptBefore > 0) parts[0].options.paraSpaceBefore = ptBefore;\n if (ptAfter > 0) parts[0].options.paraSpaceAfter = ptAfter;\n\n if (index < liChildren.length - 1) {\n parts[parts.length - 1].options.breakLine = true;\n }\n\n listItems.push(...parts);\n }\n });\n\n if (listItems.length > 0) {\n // Add background if exists\n const bgColorObj = parseColor(style.backgroundColor);\n if (bgColorObj.hex && bgColorObj.opacity > 0) {\n items.push({\n type: 'shape',\n zIndex,\n domOrder,\n shapeType: 'rect',\n options: { x, y, w, h, fill: { color: bgColorObj.hex } },\n });\n }\n\n items.push({\n type: 'text',\n zIndex: zIndex + 1,\n domOrder,\n textParts: listItems,\n options: {\n x,\n y,\n w,\n h,\n align: 'left',\n valign: 'top',\n margin: 0,\n autoFit: false,\n wrap: true,\n },\n });\n\n return { items, stopRecursion: true };\n }\n }\n\n if (node.tagName === 'CANVAS') {\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { x, y, w, h, rotate: rotation, data: null }\n };\n\n const job = async () => {\n try {\n // Direct data extraction from the canvas element\n // This preserves the exact current state of the chart\n const dataUrl = node.toDataURL('image/png');\n\n // Basic validation\n if (dataUrl && dataUrl.length > 10) {\n item.options.data = dataUrl;\n } else {\n item.skip = true;\n }\n } catch (e) {\n // Tainted canvas (CORS issues) will throw here\n console.warn('Failed to capture canvas content:', e);\n item.skip = true;\n }\n };\n\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- ASYNC JOB: SVG Tags ---\n if (node.nodeName.toUpperCase() === 'SVG') {\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { data: null, x, y, w, h, rotate: rotation },\n };\n\n const job = async () => {\n const processed = await svgToPng(node);\n if (processed) item.options.data = processed;\n else item.skip = true;\n };\n\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- ASYNC JOB: IMG Tags ---\n if (node.tagName === 'IMG') {\n let radii = {\n tl: parseFloat(style.borderTopLeftRadius) || 0,\n tr: parseFloat(style.borderTopRightRadius) || 0,\n br: parseFloat(style.borderBottomRightRadius) || 0,\n bl: parseFloat(style.borderBottomLeftRadius) || 0,\n };\n\n const hasAnyRadius = radii.tl > 0 || radii.tr > 0 || radii.br > 0 || radii.bl > 0;\n if (!hasAnyRadius) {\n const parent = node.parentElement;\n const parentStyle = window.getComputedStyle(parent);\n if (parentStyle.overflow !== 'visible') {\n const pRadii = {\n tl: parseFloat(parentStyle.borderTopLeftRadius) || 0,\n tr: parseFloat(parentStyle.borderTopRightRadius) || 0,\n br: parseFloat(parentStyle.borderBottomRightRadius) || 0,\n bl: parseFloat(parentStyle.borderBottomLeftRadius) || 0,\n };\n const pRect = parent.getBoundingClientRect();\n if (Math.abs(pRect.width - rect.width) < 5 && Math.abs(pRect.height - rect.height) < 5) {\n radii = pRadii;\n }\n }\n }\n\n const objectFit = style.objectFit || 'fill'; // default CSS behavior is fill\n const objectPosition = style.objectPosition || '50% 50%';\n\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { x, y, w, h, rotate: rotation, data: null },\n };\n\n const job = async () => {\n const processed = await getProcessedImage(\n node.src,\n widthPx,\n heightPx,\n radii,\n objectFit,\n objectPosition\n );\n if (processed) item.options.data = processed;\n else item.skip = true;\n };\n\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- ASYNC JOB: Icons and Other Elements ---\n if (isIconElement(node)) {\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { x, y, w, h, rotate: rotation, data: null },\n };\n const job = async () => {\n const pngData = await elementToCanvasImage(node, widthPx, heightPx);\n if (pngData) item.options.data = pngData;\n else item.skip = true;\n };\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- Handle vertical stat cards (like .mini-stat with number + label) ---\n if (isVerticalStatCard(node)) {\n // Capture the entire stat card as an image to preserve vertical layout\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { x, y, w, h, rotate: rotation, data: null },\n };\n const job = async () => {\n const pngData = await elementToCanvasImage(node, widthPx, heightPx);\n if (pngData) item.options.data = pngData;\n else item.skip = true;\n };\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- Handle absolutely positioned children that overflow parent ---\n // Check if this element has absolutely positioned children that extend outside\n const overflowingChildren = detectOverflowingChildren(node);\n if (overflowingChildren.length > 0) {\n // Process this node normally, but also capture overflowing children separately\n const baseResult = processOverflowingContent(\n node, overflowingChildren, config, domOrder, pptx, zIndex, style, globalOptions\n );\n if (baseResult) {\n return baseResult;\n }\n }\n\n // Radii logic\n const borderRadiusValue = parseFloat(style.borderRadius) || 0;\n const borderBottomLeftRadius = parseFloat(style.borderBottomLeftRadius) || 0;\n const borderBottomRightRadius = parseFloat(style.borderBottomRightRadius) || 0;\n const borderTopLeftRadius = parseFloat(style.borderTopLeftRadius) || 0;\n const borderTopRightRadius = parseFloat(style.borderTopRightRadius) || 0;\n\n const hasPartialBorderRadius =\n (borderBottomLeftRadius > 0 && borderBottomLeftRadius !== borderRadiusValue) ||\n (borderBottomRightRadius > 0 && borderBottomRightRadius !== borderRadiusValue) ||\n (borderTopLeftRadius > 0 && borderTopLeftRadius !== borderRadiusValue) ||\n (borderTopRightRadius > 0 && borderTopRightRadius !== borderRadiusValue) ||\n (borderRadiusValue === 0 &&\n (borderBottomLeftRadius ||\n borderBottomRightRadius ||\n borderTopLeftRadius ||\n borderTopRightRadius));\n\n // --- PRIORITY SVG: Solid Fill with Partial Border Radius (Vector Cone/Tab) ---\n // Fix for \"missing cone\": Prioritize SVG vector generation over Raster Canvas for simple shapes with partial radii.\n // This avoids html2canvas failures on empty divs.\n const tempBg = parseColor(style.backgroundColor);\n const isTxt = isTextContainer(node);\n\n if (hasPartialBorderRadius && tempBg.hex && !isTxt) {\n const shapeSvg = generateCustomShapeSVG(\n widthPx,\n heightPx,\n tempBg.hex,\n tempBg.opacity,\n {\n tl: parseFloat(style.borderTopLeftRadius) || 0,\n tr: parseFloat(style.borderTopRightRadius) || 0,\n br: parseFloat(style.borderBottomRightRadius) || 0,\n bl: parseFloat(style.borderBottomLeftRadius) || 0,\n }\n );\n\n return {\n items: [{\n type: 'image',\n zIndex,\n domOrder,\n options: { data: shapeSvg, x, y, w, h, rotate: rotation },\n }],\n stopRecursion: true // Treat as leaf\n };\n }\n\n // --- ASYNC JOB: Clipped Divs via Canvas ---\n if (hasPartialBorderRadius && isClippedByParent(node)) {\n const marginLeft = parseFloat(style.marginLeft) || 0;\n const marginTop = parseFloat(style.marginTop) || 0;\n x += marginLeft * PX_TO_INCH * config.scale;\n y += marginTop * PX_TO_INCH * config.scale;\n\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: { x, y, w, h, rotate: rotation, data: null },\n };\n\n const job = async () => {\n const canvasImageData = await elementToCanvasImage(node, widthPx, heightPx);\n if (canvasImageData) item.options.data = canvasImageData;\n else item.skip = true;\n };\n\n return { items: [item], job, stopRecursion: true };\n }\n\n // --- SYNC: Standard CSS Extraction ---\n const bgColorObj = parseColor(style.backgroundColor);\n const bgClip = style.webkitBackgroundClip || style.backgroundClip;\n const isBgClipText = bgClip === 'text';\n const hasGradient =\n !isBgClipText && style.backgroundImage && style.backgroundImage.includes('linear-gradient');\n\n const borderColorObj = parseColor(style.borderColor);\n const borderWidth = parseFloat(style.borderWidth);\n const hasBorder = borderWidth > 0 && borderColorObj.hex;\n\n const borderInfo = getBorderInfo(style, config.scale);\n const hasUniformBorder = borderInfo.type === 'uniform';\n const hasCompositeBorder = borderInfo.type === 'composite';\n\n const shadowStr = style.boxShadow;\n const hasShadow = shadowStr && shadowStr !== 'none';\n const softEdge = getSoftEdges(style.filter, config.scale);\n\n let isImageWrapper = false;\n const imgChild = Array.from(node.children).find((c) => c.tagName === 'IMG');\n if (imgChild) {\n const childW = imgChild.offsetWidth || imgChild.getBoundingClientRect().width;\n const childH = imgChild.offsetHeight || imgChild.getBoundingClientRect().height;\n if (childW >= widthPx - 2 && childH >= heightPx - 2) isImageWrapper = true;\n }\n\n let textPayload = null;\n const isText = isTextContainer(node);\n\n // Add extra width buffer for inline text elements to prevent wrapping in PPTX\n // This is especially needed for Chinese text and certain fonts\n // Only apply to elements that are direct children of flex containers with space distribution\n // and don't have a parent with visible background (to avoid overflowing card boundaries)\n if (isText && !bgColorObj.hex && !hasBorder && !hasShadow) {\n const parentEl = node.parentElement;\n if (parentEl) {\n const parentStyle = window.getComputedStyle(parentEl);\n const parentDisplay = parentStyle.display || '';\n const parentJustify = parentStyle.justifyContent || '';\n const isFlexWithSpaceDist = (parentDisplay.includes('flex') || parentDisplay.includes('grid')) &&\n (parentJustify.includes('space-between') || parentJustify.includes('space-around') || parentJustify.includes('space-evenly'));\n\n if (isFlexWithSpaceDist) {\n widthPx = widthPx * 1.3; // Add 30% extra width\n // Recalculate w with the new width\n w = widthPx * PX_TO_INCH * config.scale;\n }\n }\n }\n\n if (isText) {\n const textParts = [];\n let trimNextLeading = false;\n\n node.childNodes.forEach((child, index) => {\n // Handle <br> tags\n if (child.tagName === 'BR') {\n // 1. Trim trailing space from the *previous* text part to prevent double wrapping\n if (textParts.length > 0) {\n const lastPart = textParts[textParts.length - 1];\n if (lastPart.text && typeof lastPart.text === 'string') {\n lastPart.text = lastPart.text.trimEnd();\n }\n }\n\n textParts.push({ text: '', options: { breakLine: true } });\n\n // 2. Signal to trim leading space from the *next* text part\n trimNextLeading = true;\n return;\n }\n\n let textVal = child.nodeType === 3 ? child.nodeValue : child.textContent;\n let nodeStyle = child.nodeType === 1 ? window.getComputedStyle(child) : style;\n textVal = textVal.replace(/[\\n\\r\\t]+/g, ' ').replace(/\\s{2,}/g, ' ');\n\n // Trimming logic\n if (index === 0) textVal = textVal.trimStart();\n if (trimNextLeading) {\n textVal = textVal.trimStart();\n trimNextLeading = false;\n }\n\n if (index === node.childNodes.length - 1) textVal = textVal.trimEnd();\n if (nodeStyle.textTransform === 'uppercase') textVal = textVal.toUpperCase();\n if (nodeStyle.textTransform === 'lowercase') textVal = textVal.toLowerCase();\n\n if (textVal.length > 0) {\n const textOpts = getTextStyle(nodeStyle, config.scale, textVal, globalOptions);\n\n // BUG FIX: Numbers 1 and 2 having background.\n // If this is a naked Text Node (nodeType 3), it inherits style from the parent container.\n // The parent container's background is already rendered as the Shape Fill.\n // We must NOT render it again as a Text Highlight, otherwise it looks like a solid marker on top of the shape.\n if (child.nodeType === 3 && textOpts.highlight) {\n delete textOpts.highlight;\n }\n\n textParts.push({ text: textVal, options: textOpts });\n }\n });\n\n if (textParts.length > 0) {\n let align = style.textAlign || 'left';\n if (align === 'start') align = 'left';\n if (align === 'end') align = 'right';\n\n // Fix: If this element is a flex/grid child and has no explicit text-align,\n // force left alignment to match HTML default behavior\n if (node.parentElement && (!style.textAlign || style.textAlign === 'start')) {\n const parentStyle = window.getComputedStyle(node.parentElement);\n if (parentStyle.display.includes('flex') || parentStyle.display.includes('grid')) {\n align = 'left';\n }\n }\n\n // Detect badge/pill buttons (high border-radius + short text) and auto-center them\n const borderRadius = parseFloat(style.borderRadius) || 0;\n const height = parseFloat(style.height) || node.offsetHeight;\n const textContent = node.textContent.trim();\n const className = (node.className || '').toLowerCase();\n\n // Real badges/pills typically have visible styling (background, border, or large border-radius)\n const hasVisibleBackground = (bgColorObj.hex && bgColorObj.opacity > 0.1) || hasGradient;\n const hasVisibleBorder = borderWidth > 0;\n const hasLargeBorderRadius = borderRadius >= height / 2;\n const hasBadgeClass = className.includes('badge') || className.includes('pill') || className.includes('tag');\n\n // Check if it's a small tag/label with rounded corners and short text\n const paddingLeft = parseFloat(style.paddingLeft) || 0;\n const paddingRight = parseFloat(style.paddingRight) || 0;\n const paddingTop = parseFloat(style.paddingTop) || 0;\n const paddingBottom = parseFloat(style.paddingBottom) || 0;\n const hasSmallPadding = Math.max(paddingLeft, paddingRight, paddingTop, paddingBottom) <= 12;\n const hasEvenPadding = Math.abs(paddingTop - paddingBottom) <= 4 && Math.abs(paddingLeft - paddingRight) <= 8;\n const hasRoundedCorners = borderRadius >= 3;\n const isInlineBlock = style.display === 'inline-block' || style.display === 'inline-flex';\n\n // Small tag detection: inline-block with background, rounded corners, small even padding, and short text\n const isSmallTag =\n isInlineBlock &&\n hasVisibleBackground &&\n hasRoundedCorners &&\n hasSmallPadding &&\n hasEvenPadding &&\n textContent.length <= 10;\n\n // Only consider it a badge if it has visual styling AND short text\n const isLikelyBadge =\n ((hasLargeBorderRadius || hasBadgeClass) &&\n textContent.length <= 10 &&\n (hasVisibleBackground || hasVisibleBorder || hasLargeBorderRadius)) ||\n isSmallTag;\n\n if (isLikelyBadge) {\n align = 'center';\n }\n\n let valign = 'top';\n\n // For flex items, valign should be determined by PARENT's align-items, not self\n // Self's align-items controls how children are aligned, not self's position in parent\n const parentEl = node.parentElement;\n if (parentEl) {\n const parentStyle = window.getComputedStyle(parentEl);\n if (parentStyle.display.includes('flex')) {\n // Parent's align-items controls this element's cross-axis alignment\n if (parentStyle.alignItems === 'center') {\n valign = 'middle';\n } else if (parentStyle.alignItems === 'flex-end' || parentStyle.alignItems === 'end') {\n valign = 'bottom';\n }\n // Default (stretch, flex-start) keeps valign = 'top'\n }\n }\n\n // If element is not a flex item (no flex parent), then its own align-items\n // might indicate self-centering intent for single-element containers\n if (valign === 'top' && style.alignItems === 'center' && !parentEl) {\n valign = 'middle';\n }\n\n // Auto-center vertically for likely badges\n if (isLikelyBadge && valign !== 'middle') {\n const paddingTop = parseFloat(style.paddingTop) || 0;\n const paddingBottom = parseFloat(style.paddingBottom) || 0;\n // If padding is relatively even, assume vertical centering is intended\n if (Math.abs(paddingTop - paddingBottom) <= 4) {\n valign = 'middle';\n }\n }\n if (style.justifyContent === 'center' && style.display.includes('flex')) align = 'center';\n\n const pt = parseFloat(style.paddingTop) || 0;\n const pb = parseFloat(style.paddingBottom) || 0;\n if (Math.abs(pt - pb) < 2 && bgColorObj.hex) valign = 'middle';\n\n let padding = getPadding(style, config.scale);\n if (align === 'center' && valign === 'middle') padding = [0, 0, 0, 0];\n\n textPayload = { text: textParts, align, valign, inset: padding };\n }\n }\n\n if (hasGradient || (softEdge && bgColorObj.hex && !isImageWrapper)) {\n let bgData = null;\n let padIn = 0;\n if (softEdge) {\n const svgInfo = generateBlurredSVG(\n widthPx,\n heightPx,\n bgColorObj.hex,\n borderRadiusValue,\n softEdge\n );\n bgData = svgInfo.data;\n padIn = svgInfo.padding * PX_TO_INCH * config.scale;\n } else {\n bgData = generateGradientSVG(\n widthPx,\n heightPx,\n style.backgroundImage,\n borderRadiusValue,\n hasBorder ? { color: borderColorObj.hex, width: borderWidth } : null\n );\n }\n\n if (bgData) {\n items.push({\n type: 'image',\n zIndex,\n domOrder,\n options: {\n data: bgData,\n x: x - padIn,\n y: y - padIn,\n w: w + padIn * 2,\n h: h + padIn * 2,\n rotate: rotation,\n },\n });\n }\n\n if (textPayload) {\n textPayload.text[0].options.fontSize =\n Math.floor(textPayload.text[0]?.options?.fontSize) || 12;\n items.push({\n type: 'text',\n zIndex: zIndex + 1,\n domOrder,\n textParts: textPayload.text,\n options: {\n x,\n y,\n w,\n h,\n align: textPayload.align,\n valign: textPayload.valign,\n inset: textPayload.inset,\n rotate: rotation,\n margin: 0,\n wrap: true,\n autoFit: false,\n },\n });\n }\n if (hasCompositeBorder) {\n const borderItems = createCompositeBorderItems(\n borderInfo.sides,\n x,\n y,\n w,\n h,\n config.scale,\n zIndex,\n domOrder\n );\n items.push(...borderItems);\n }\n } else if (\n (bgColorObj.hex && !isImageWrapper) ||\n hasUniformBorder ||\n hasCompositeBorder ||\n hasShadow ||\n textPayload\n ) {\n const finalAlpha = safeOpacity * bgColorObj.opacity;\n const transparency = (1 - finalAlpha) * 100;\n const useSolidFill = bgColorObj.hex && !isImageWrapper;\n\n if (hasPartialBorderRadius && useSolidFill && !textPayload) {\n const shapeSvg = generateCustomShapeSVG(\n widthPx,\n heightPx,\n bgColorObj.hex,\n bgColorObj.opacity,\n {\n tl: parseFloat(style.borderTopLeftRadius) || 0,\n tr: parseFloat(style.borderTopRightRadius) || 0,\n br: parseFloat(style.borderBottomRightRadius) || 0,\n bl: parseFloat(style.borderBottomLeftRadius) || 0,\n }\n );\n\n items.push({\n type: 'image',\n zIndex,\n domOrder,\n options: { data: shapeSvg, x, y, w, h, rotate: rotation },\n });\n } else {\n const shapeOpts = {\n x,\n y,\n w,\n h,\n rotate: rotation,\n fill: useSolidFill\n ? { color: bgColorObj.hex, transparency: transparency }\n : { type: 'none' },\n line: hasUniformBorder ? borderInfo.options : null,\n };\n\n if (hasShadow) shapeOpts.shadow = getVisibleShadow(shadowStr, config.scale);\n\n // 1. Calculate dimensions first\n const minDimension = Math.min(widthPx, heightPx);\n\n let rawRadius = parseFloat(style.borderRadius) || 0;\n const isPercentage = style.borderRadius && style.borderRadius.toString().includes('%');\n\n // 2. Normalize radius to pixels\n let radiusPx = rawRadius;\n if (isPercentage) {\n radiusPx = (rawRadius / 100) * minDimension;\n }\n\n let shapeType = pptx.ShapeType.rect;\n\n // 3. Determine Shape Logic\n const isSquare = Math.abs(widthPx - heightPx) < 1;\n const isFullyRound = radiusPx >= minDimension / 2;\n\n // CASE A: It is an Ellipse if:\n // 1. It is explicitly \"50%\" (standard CSS way to make ovals/circles)\n // 2. OR it is a perfect square and fully rounded (a circle)\n if (isFullyRound && (isPercentage || isSquare)) {\n shapeType = pptx.ShapeType.ellipse;\n }\n // CASE B: It is a Rounded Rectangle (including \"Pill\" shapes)\n else if (radiusPx > 0) {\n shapeType = pptx.ShapeType.roundRect;\n let r = radiusPx / minDimension;\n if (r > 0.5) r = 0.5;\n if (minDimension < 100) r = r * 0.25; // Small size adjustment for small shapes\n\n shapeOpts.rectRadius = r;\n }\n\n if (textPayload) {\n textPayload.text[0].options.fontSize =\n Math.floor(textPayload.text[0]?.options?.fontSize) || 12;\n const textOptions = {\n shape: shapeType,\n ...shapeOpts,\n rotate: rotation,\n align: textPayload.align,\n valign: textPayload.valign,\n inset: textPayload.inset,\n margin: 0,\n wrap: true,\n autoFit: false,\n };\n items.push({\n type: 'text',\n zIndex,\n domOrder,\n textParts: textPayload.text,\n options: textOptions,\n });\n } else if (!hasPartialBorderRadius) {\n items.push({\n type: 'shape',\n zIndex,\n domOrder,\n shapeType,\n options: shapeOpts,\n });\n }\n }\n\n if (hasCompositeBorder) {\n const borderSvgData = generateCompositeBorderSVG(\n widthPx,\n heightPx,\n borderRadiusValue,\n borderInfo.sides\n );\n if (borderSvgData) {\n items.push({\n type: 'image',\n zIndex: zIndex + 1,\n domOrder,\n options: { data: borderSvgData, x, y, w, h, rotate: rotation },\n });\n }\n }\n }\n\n return { items, stopRecursion: !!textPayload };\n}\n\nfunction isComplexHierarchy(root) {\n // Use a simple tree traversal to find forbidden elements in the list structure\n if (root?.getAttribute?.('data-pptx-list') === 'complex') return true;\n\n const stack = [root];\n while (stack.length > 0) {\n const el = stack.pop();\n\n // 1. Layouts: Flex/Grid on LIs\n if (el.tagName === 'LI') {\n const s = window.getComputedStyle(el);\n if (s.display === 'flex' || s.display === 'grid' || s.display === 'inline-flex') return true;\n\n // Custom list items (e.g., list-style: none + structured children)\n const listStyleType = s.listStyleType || s.listStyle;\n if (listStyleType === 'none') {\n const hasStructuredChild = Array.from(el.children).some((child) => {\n const cs = window.getComputedStyle(child);\n const display = cs.display || '';\n if (!display.includes('inline')) return true;\n\n const bg = parseColor(cs.backgroundColor);\n if (bg.hex && bg.opacity > 0) return true;\n\n const bw = parseFloat(cs.borderWidth) || 0;\n const bc = parseColor(cs.borderColor);\n if (bw > 0 && bc.opacity > 0) return true;\n\n return false;\n });\n\n if (hasStructuredChild) return true;\n }\n }\n\n // 2. Media / Icons\n if (['IMG', 'SVG', 'CANVAS', 'VIDEO', 'IFRAME'].includes(el.tagName)) return true;\n if (isIconElement(el)) return true;\n\n // 3. Nested Lists (Flattening logic doesn't support nested bullets well yet)\n if (el !== root && (el.tagName === 'UL' || el.tagName === 'OL')) return true;\n\n // Recurse, but don't go too deep if not needed\n for (let i = 0; i < el.children.length; i++) {\n stack.push(el.children[i]);\n }\n }\n return false;\n}\n\nfunction collectListParts(node, parentStyle, scale, globalOptions) {\n const parts = [];\n\n // Check for CSS Content (::before) - often used for icons\n if (node.nodeType === 1) {\n const beforeStyle = window.getComputedStyle(node, '::before');\n const content = beforeStyle.content;\n if (content && content !== 'none' && content !== 'normal' && content !== '\"\"') {\n // Strip quotes\n const cleanContent = content.replace(/^['\"]|['\"]$/g, '');\n if (cleanContent.trim()) {\n parts.push({\n text: cleanContent + ' ', // Add space after icon\n options: getTextStyle(window.getComputedStyle(node), scale, cleanContent, globalOptions),\n });\n }\n }\n }\n\n node.childNodes.forEach((child) => {\n if (child.nodeType === 3) {\n // Text\n const val = child.nodeValue.replace(/[\\n\\r\\t]+/g, ' ').replace(/\\s{2,}/g, ' ');\n if (val) {\n // Use parent style if child is text node, otherwise current style\n const styleToUse = node.nodeType === 1 ? window.getComputedStyle(node) : parentStyle;\n parts.push({\n text: val,\n options: getTextStyle(styleToUse, scale, val, globalOptions),\n });\n }\n } else if (child.nodeType === 1) {\n // Element (span, i, b)\n // Recurse\n parts.push(...collectListParts(child, parentStyle, scale, globalOptions));\n }\n });\n\n return parts;\n}\n\nfunction createCompositeBorderItems(sides, x, y, w, h, scale, zIndex, domOrder) {\n const items = [];\n const pxToInch = 1 / 96;\n const common = { zIndex: zIndex + 1, domOrder, shapeType: 'rect' };\n\n if (sides.top.width > 0)\n items.push({\n ...common,\n options: { x, y, w, h: sides.top.width * pxToInch * scale, fill: { color: sides.top.color } },\n });\n if (sides.right.width > 0)\n items.push({\n ...common,\n options: {\n x: x + w - sides.right.width * pxToInch * scale,\n y,\n w: sides.right.width * pxToInch * scale,\n h,\n fill: { color: sides.right.color },\n },\n });\n if (sides.bottom.width > 0)\n items.push({\n ...common,\n options: {\n x,\n y: y + h - sides.bottom.width * pxToInch * scale,\n w,\n h: sides.bottom.width * pxToInch * scale,\n fill: { color: sides.bottom.color },\n },\n });\n if (sides.left.width > 0)\n items.push({\n ...common,\n options: {\n x,\n y,\n w: sides.left.width * pxToInch * scale,\n h,\n fill: { color: sides.left.color },\n },\n });\n\n return items;\n}\n\n/**\n * Detect absolutely positioned children that overflow their parent\n * This handles cases like chart value labels positioned above bars\n */\nfunction detectOverflowingChildren(node) {\n const overflowing = [];\n const parentRect = node.getBoundingClientRect();\n\n // Only check for elements with specific class patterns that suggest chart values\n const children = node.querySelectorAll('.bar-value, [class*=\"value\"], [class*=\"label\"]');\n\n children.forEach(child => {\n const childStyle = window.getComputedStyle(child);\n const childRect = child.getBoundingClientRect();\n\n // Check if absolutely positioned and outside parent bounds\n if (childStyle.position === 'absolute') {\n const isOutside =\n childRect.bottom < parentRect.top ||\n childRect.top > parentRect.bottom ||\n childRect.right < parentRect.left ||\n childRect.left > parentRect.right;\n\n if (isOutside || childRect.top < parentRect.top) {\n overflowing.push(child);\n }\n }\n });\n\n return overflowing;\n}\n\n/**\n * Process content with overflowing children\n * Captures the entire visual area including overflowing elements\n */\nfunction processOverflowingContent(node, overflowingChildren, config, domOrder, pptx, zIndex, style, globalOptions) {\n // Calculate bounding box that includes all overflowing children\n const rect = node.getBoundingClientRect();\n let minX = rect.left;\n let minY = rect.top;\n let maxX = rect.right;\n let maxY = rect.bottom;\n\n overflowingChildren.forEach(child => {\n const childRect = child.getBoundingClientRect();\n minX = Math.min(minX, childRect.left);\n minY = Math.min(minY, childRect.top);\n maxX = Math.max(maxX, childRect.right);\n maxY = Math.max(maxY, childRect.bottom);\n });\n\n const totalWidth = maxX - minX;\n const totalHeight = maxY - minY;\n\n // Use html2canvas to capture the entire area\n const item = {\n type: 'image',\n zIndex,\n domOrder,\n options: {\n x: config.offX + (minX - config.rootX) * PX_TO_INCH * config.scale,\n y: config.offY + (minY - config.rootY) * PX_TO_INCH * config.scale,\n w: totalWidth * PX_TO_INCH * config.scale,\n h: totalHeight * PX_TO_INCH * config.scale,\n data: null\n }\n };\n\n const job = async () => {\n try {\n // Temporarily adjust node position for capture\n const originalPosition = node.style.position;\n const originalTransform = node.style.transform;\n\n node.style.position = 'relative';\n node.style.transform = 'none';\n\n const canvas = await html2canvas(node, {\n backgroundColor: null,\n logging: false,\n scale: 2,\n useCORS: true,\n x: minX - rect.left,\n y: minY - rect.top,\n width: totalWidth,\n height: totalHeight\n });\n\n // Restore original styles\n node.style.position = originalPosition;\n node.style.transform = originalTransform;\n\n item.options.data = canvas.toDataURL('image/png');\n } catch (e) {\n console.warn('Failed to capture overflowing content:', e);\n item.skip = true;\n }\n };\n\n return { items: [item], job, stopRecursion: true };\n}\n\n/**\n * Detect vertical stat cards (like .mini-stat with number above label)\n * These have block-level children that should stack vertically\n */\nfunction isVerticalStatCard(node) {\n const className = (node.className || '').toLowerCase();\n\n // Check for stat-like class names\n const statIndicators = ['stat', 'metric', 'kpi', 'data-item', 'stat-item'];\n const hasStatClass = statIndicators.some(indicator => className.includes(indicator));\n\n if (!hasStatClass) return false;\n\n const children = Array.from(node.children);\n if (children.length !== 2) return false;\n\n // Check if children are likely number + label pair\n const child1 = children[0];\n const child2 = children[1];\n\n const style1 = window.getComputedStyle(child1);\n const style2 = window.getComputedStyle(child2);\n\n // Both should be block elements (or have block-like display)\n const isBlock1 = style1.display === 'block' || style1.display === 'flex';\n const isBlock2 = style2.display === 'block' || style2.display === 'flex';\n\n if (!isBlock1 || !isBlock2) return false;\n\n // First child should have larger font (the number)\n const fontSize1 = parseFloat(style1.fontSize) || 0;\n const fontSize2 = parseFloat(style2.fontSize) || 0;\n\n // Number should be larger than label, or at least bold\n const isBold1 = parseInt(style1.fontWeight) >= 600;\n\n return fontSize1 >= fontSize2 || isBold1;\n}\n\n/**\n * Detect if a div structure looks like a table\n * Checks for table-like class names and structure patterns\n */\nfunction detectTableLikeStructure(node) {\n const className = (node.className || '').toLowerCase();\n\n // Check for table-related class names\n const tableIndicators = ['table', 'data-table', 'grid', 'list'];\n const hasTableClass = tableIndicators.some(indicator => className.includes(indicator));\n\n if (!hasTableClass) return false;\n\n // Check structure: should have header row and data rows\n const children = Array.from(node.children);\n\n // Look for header-like element\n const hasHeader = children.some(child =>\n (child.className || '').toLowerCase().includes('header') ||\n child.tagName === 'THEAD'\n );\n\n // Look for row-like elements\n const hasRows = children.some(child =>\n (child.className || '').toLowerCase().includes('row') ||\n child.tagName === 'TR' ||\n child.tagName === 'TBODY'\n );\n\n // Check for cell-like structure in children\n const hasCellStructure = children.some(child => {\n const childChildren = Array.from(child.children);\n return childChildren.some(grandchild =>\n (grandchild.className || '').toLowerCase().includes('cell') ||\n grandchild.className.toLowerCase().includes('col') ||\n grandchild.className.toLowerCase().includes('td')\n );\n });\n\n return (hasHeader || hasRows) && hasCellStructure;\n}\n\n/**\n * Extract table data from div-based table structure\n * Similar to extractTableData but for div grids\n */\nfunction extractDivTableData(node, scale, options = {}) {\n const rows = [];\n const colWidths = [];\n const root = options.root || null;\n\n // Find header row\n const headerRow = node.querySelector('.table-header, [class*=\"header\"]');\n if (headerRow) {\n const headerCells = Array.from(headerRow.children);\n headerCells.forEach((cell, index) => {\n const rect = cell.getBoundingClientRect();\n const wIn = rect.width * (1 / 96) * scale;\n colWidths[index] = wIn;\n });\n\n // Process header as first row\n const headerData = headerCells.map(cell => {\n const style = window.getComputedStyle(cell);\n const cellText = cell.innerText.replace(/[\\n\\r\\t]+/g, ' ').trim();\n const textStyle = getTextStyle(style, scale, cellText, options);\n const fill = computeTableCellFill(style, cell, root, options);\n\n return {\n text: cellText,\n options: {\n ...textStyle,\n fill: fill || { color: '16A085', transparency: 80 },\n bold: true,\n align: style.textAlign === 'center' ? 'center' : 'left',\n border: { type: 'none' }\n }\n };\n });\n rows.push(headerData);\n }\n\n // Find data rows\n const dataRows = node.querySelectorAll('.table-row, [class*=\"row\"]');\n dataRows.forEach(row => {\n const cells = Array.from(row.children);\n const rowData = cells.map(cell => {\n const style = window.getComputedStyle(cell);\n const cellText = cell.innerText.replace(/[\\n\\r\\t]+/g, ' ').trim();\n const textStyle = getTextStyle(style, scale, cellText, options);\n const fill = computeTableCellFill(style, cell, root, options);\n\n // Detect trend colors\n const className = (cell.className || '').toLowerCase();\n let textColor = textStyle.color;\n if (className.includes('up') || className.includes('positive')) {\n textColor = '16A085';\n } else if (className.includes('down') || className.includes('negative')) {\n textColor = 'E74C3C';\n }\n\n return {\n text: cellText,\n options: {\n ...textStyle,\n color: textColor,\n fill: fill,\n align: style.textAlign === 'center' ? 'center' : 'left',\n border: {\n type: 'none',\n bottom: { type: 'solid', pt: 0.5, color: 'FFFFFF', transparency: 95 }\n }\n }\n };\n });\n\n if (rowData.length > 0) {\n rows.push(rowData);\n }\n });\n\n // Ensure all rows have same column count\n const maxCols = Math.max(...rows.map(r => r.length), colWidths.length);\n rows.forEach(row => {\n while (row.length < maxCols) {\n row.push({ text: '', options: {} });\n }\n });\n while (colWidths.length < maxCols) {\n colWidths.push(colWidths[colWidths.length - 1] || 1);\n }\n\n return { rows, colWidths };\n}\n"],"names":[],"mappings":"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"}
|