dom-to-pptx 1.0.9 → 1.1.1
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/CHANGELOG.md +23 -3
- package/README.md +295 -329
- package/dist/dom-to-pptx.bundle.js +45959 -749
- package/dist/dom-to-pptx.cjs +619 -7916
- package/dist/dom-to-pptx.cjs.map +1 -0
- package/dist/dom-to-pptx.mjs +598 -7901
- package/dist/dom-to-pptx.mjs.map +1 -0
- package/package.json +13 -3
- package/rollup.config.js +58 -24
- package/src/font-embedder.js +163 -0
- package/src/font-utils.js +32 -0
- package/src/image-processor.js +58 -19
- package/src/index.js +971 -833
- package/src/utils.js +711 -575
- package/dist/dom-to-pptx.min.js +0 -9319
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-to-pptx.cjs","sources":["../src/font-utils.js","../src/font-embedder.js","../src/utils.js","../src/image-processor.js","../src/index.js"],"sourcesContent":["// src/font-utils.js\r\nimport { Font } from 'fonteditor-core';\r\nimport pako from 'pako';\r\n\r\n/**\r\n * Converts various font formats to EOT (Embedded OpenType), \r\n * which is highly compatible with PowerPoint embedding.\r\n * @param {string} type - 'ttf', 'woff', or 'otf'\r\n * @param {ArrayBuffer} fontBuffer - The raw font data\r\n */\r\nexport async function fontToEot(type, fontBuffer) {\r\n const options = {\r\n type,\r\n hinting: true,\r\n // inflate is required for WOFF decoding\r\n inflate: type === 'woff' ? pako.inflate : undefined,\r\n };\r\n\r\n const font = Font.create(fontBuffer, options);\r\n\r\n const eotBuffer = font.write({\r\n type: 'eot',\r\n toBuffer: true,\r\n });\r\n\r\n if (eotBuffer instanceof ArrayBuffer) {\r\n return eotBuffer;\r\n }\r\n\r\n // Ensure we return an ArrayBuffer\r\n return eotBuffer.buffer.slice(\r\n eotBuffer.byteOffset,\r\n eotBuffer.byteOffset + eotBuffer.byteLength\r\n );\r\n}","// src/font-embedder.js\r\nimport opentype from 'opentype.js';\r\nimport { fontToEot } from './font-utils.js';\r\n\r\nconst START_RID = 201314;\r\n\r\nexport class PPTXEmbedFonts {\r\n constructor() {\r\n this.zip = null;\r\n this.rId = START_RID;\r\n this.fonts = []; // { name, data, rid }\r\n }\r\n\r\n async loadZip(zip) {\r\n this.zip = zip;\r\n }\r\n\r\n /**\r\n * Reads the font name from the buffer using opentype.js\r\n */\r\n getFontInfo(fontBuffer) {\r\n try {\r\n const font = opentype.parse(fontBuffer);\r\n const names = font.names;\r\n // Prefer English name, fallback to others\r\n const fontFamily = names.fontFamily.en || Object.values(names.fontFamily)[0];\r\n return { name: fontFamily };\r\n } catch (e) {\r\n console.warn('Could not parse font info', e);\r\n return { name: 'Unknown' };\r\n }\r\n }\r\n\r\n async addFont(fontFace, fontBuffer, type) {\r\n // Convert to EOT/fntdata for PPTX compatibility\r\n const eotData = await fontToEot(type, fontBuffer);\r\n const rid = this.rId++;\r\n this.fonts.push({ name: fontFace, data: eotData, rid });\r\n }\r\n\r\n async updateFiles() {\r\n await this.updateContentTypesXML();\r\n await this.updatePresentationXML();\r\n await this.updateRelsPresentationXML();\r\n this.updateFontFiles();\r\n }\r\n\r\n async generateBlob() {\r\n if (!this.zip) throw new Error('Zip not loaded');\r\n return this.zip.generateAsync({\r\n type: 'blob',\r\n compression: 'DEFLATE',\r\n compressionOptions: { level: 6 },\r\n });\r\n }\r\n\r\n // --- XML Manipulation Methods ---\r\n\r\n async updateContentTypesXML() {\r\n const file = this.zip.file('[Content_Types].xml');\r\n if (!file) throw new Error('[Content_Types].xml not found');\r\n\r\n const xmlStr = await file.async('string');\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(xmlStr, 'text/xml');\r\n \r\n const types = doc.getElementsByTagName('Types')[0];\r\n const defaults = Array.from(doc.getElementsByTagName('Default'));\r\n \r\n const hasFntData = defaults.some(el => el.getAttribute('Extension') === 'fntdata');\r\n\r\n if (!hasFntData) {\r\n const el = doc.createElement('Default');\r\n el.setAttribute('Extension', 'fntdata');\r\n el.setAttribute('ContentType', 'application/x-fontdata');\r\n types.insertBefore(el, types.firstChild);\r\n }\r\n\r\n this.zip.file('[Content_Types].xml', new XMLSerializer().serializeToString(doc));\r\n }\r\n\r\n async updatePresentationXML() {\r\n const file = this.zip.file('ppt/presentation.xml');\r\n if (!file) throw new Error('ppt/presentation.xml not found');\r\n\r\n const xmlStr = await file.async('string');\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(xmlStr, 'text/xml');\r\n const presentation = doc.getElementsByTagName('p:presentation')[0];\r\n\r\n // Enable embedding flags\r\n presentation.setAttribute('saveSubsetFonts', 'true');\r\n presentation.setAttribute('embedTrueTypeFonts', 'true');\r\n\r\n // Find or create embeddedFontLst\r\n let embeddedFontLst = presentation.getElementsByTagName('p:embeddedFontLst')[0];\r\n\r\n if (!embeddedFontLst) {\r\n embeddedFontLst = doc.createElement('p:embeddedFontLst');\r\n \r\n // Insert before defaultTextStyle or at end\r\n const defaultTextStyle = presentation.getElementsByTagName('p:defaultTextStyle')[0];\r\n if (defaultTextStyle) {\r\n presentation.insertBefore(embeddedFontLst, defaultTextStyle);\r\n } else {\r\n presentation.appendChild(embeddedFontLst);\r\n }\r\n }\r\n\r\n // Add font references\r\n this.fonts.forEach(font => {\r\n // Check if already exists\r\n const existing = Array.from(embeddedFontLst.getElementsByTagName('p:font'))\r\n .find(node => node.getAttribute('typeface') === font.name);\r\n\r\n if (!existing) {\r\n const embedFont = doc.createElement('p:embeddedFont');\r\n \r\n const fontNode = doc.createElement('p:font');\r\n fontNode.setAttribute('typeface', font.name);\r\n embedFont.appendChild(fontNode);\r\n\r\n const regular = doc.createElement('p:regular');\r\n regular.setAttribute('r:id', `rId${font.rid}`);\r\n embedFont.appendChild(regular);\r\n\r\n embeddedFontLst.appendChild(embedFont);\r\n }\r\n });\r\n\r\n this.zip.file('ppt/presentation.xml', new XMLSerializer().serializeToString(doc));\r\n }\r\n\r\n async updateRelsPresentationXML() {\r\n const file = this.zip.file('ppt/_rels/presentation.xml.rels');\r\n if (!file) throw new Error('presentation.xml.rels not found');\r\n\r\n const xmlStr = await file.async('string');\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(xmlStr, 'text/xml');\r\n const relationships = doc.getElementsByTagName('Relationships')[0];\r\n\r\n this.fonts.forEach(font => {\r\n const rel = doc.createElement('Relationship');\r\n rel.setAttribute('Id', `rId${font.rid}`);\r\n rel.setAttribute('Target', `fonts/${font.rid}.fntdata`);\r\n rel.setAttribute('Type', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/font');\r\n relationships.appendChild(rel);\r\n });\r\n\r\n this.zip.file('ppt/_rels/presentation.xml.rels', new XMLSerializer().serializeToString(doc));\r\n }\r\n\r\n updateFontFiles() {\r\n this.fonts.forEach(font => {\r\n this.zip.file(`ppt/fonts/${font.rid}.fntdata`, font.data);\r\n });\r\n }\r\n}","// src/utils.js\r\n\r\n// canvas context for color normalization\r\nlet _ctx;\r\nfunction getCtx() {\r\n if (!_ctx) _ctx = document.createElement('canvas').getContext('2d', { willReadFrequently: true });\r\n return _ctx;\r\n}\r\n\r\n// Checks if any parent element has overflow: hidden which would clip this element\r\nexport function isClippedByParent(node) {\r\n let parent = node.parentElement;\r\n while (parent && parent !== document.body) {\r\n const style = window.getComputedStyle(parent);\r\n const overflow = style.overflow;\r\n if (overflow === 'hidden' || overflow === 'clip') {\r\n return true;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n return false;\r\n}\r\n\r\n// Helper to save gradient text\r\nexport function getGradientFallbackColor(bgImage) {\r\n if (!bgImage) return null;\r\n const hexMatch = bgImage.match(/#(?:[0-9a-fA-F]{3}){1,2}/);\r\n if (hexMatch) return hexMatch[0];\r\n const rgbMatch = bgImage.match(/rgba?\\(.*?\\)/);\r\n if (rgbMatch) return rgbMatch[0];\r\n return null;\r\n}\r\n\r\nfunction mapDashType(style) {\r\n if (style === 'dashed') return 'dash';\r\n if (style === 'dotted') return 'dot';\r\n return 'solid';\r\n}\r\n\r\n/**\r\n * Analyzes computed border styles and determines the rendering strategy.\r\n */\r\nexport function getBorderInfo(style, scale) {\r\n const top = {\r\n width: parseFloat(style.borderTopWidth) || 0,\r\n style: style.borderTopStyle,\r\n color: parseColor(style.borderTopColor).hex,\r\n };\r\n const right = {\r\n width: parseFloat(style.borderRightWidth) || 0,\r\n style: style.borderRightStyle,\r\n color: parseColor(style.borderRightColor).hex,\r\n };\r\n const bottom = {\r\n width: parseFloat(style.borderBottomWidth) || 0,\r\n style: style.borderBottomStyle,\r\n color: parseColor(style.borderBottomColor).hex,\r\n };\r\n const left = {\r\n width: parseFloat(style.borderLeftWidth) || 0,\r\n style: style.borderLeftStyle,\r\n color: parseColor(style.borderLeftColor).hex,\r\n };\r\n\r\n const hasAnyBorder = top.width > 0 || right.width > 0 || bottom.width > 0 || left.width > 0;\r\n if (!hasAnyBorder) return { type: 'none' };\r\n\r\n // Check if all sides are uniform\r\n const isUniform =\r\n top.width === right.width &&\r\n top.width === bottom.width &&\r\n top.width === left.width &&\r\n top.style === right.style &&\r\n top.style === bottom.style &&\r\n top.style === left.style &&\r\n top.color === right.color &&\r\n top.color === bottom.color &&\r\n top.color === left.color;\r\n\r\n if (isUniform) {\r\n return {\r\n type: 'uniform',\r\n options: {\r\n width: top.width * 0.75 * scale,\r\n color: top.color,\r\n transparency: (1 - parseColor(style.borderTopColor).opacity) * 100,\r\n dashType: mapDashType(top.style),\r\n },\r\n };\r\n } else {\r\n return {\r\n type: 'composite',\r\n sides: { top, right, bottom, left },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Generates an SVG image for composite borders that respects border-radius.\r\n */\r\nexport function generateCompositeBorderSVG(w, h, radius, sides) {\r\n radius = radius / 2; // Adjust for SVG rendering\r\n const clipId = 'clip_' + Math.random().toString(36).substr(2, 9);\r\n let borderRects = '';\r\n\r\n if (sides.top.width > 0 && sides.top.color) {\r\n borderRects += `<rect x=\"0\" y=\"0\" width=\"${w}\" height=\"${sides.top.width}\" fill=\"#${sides.top.color}\" />`;\r\n }\r\n if (sides.right.width > 0 && sides.right.color) {\r\n borderRects += `<rect x=\"${w - sides.right.width}\" y=\"0\" width=\"${sides.right.width}\" height=\"${h}\" fill=\"#${sides.right.color}\" />`;\r\n }\r\n if (sides.bottom.width > 0 && sides.bottom.color) {\r\n borderRects += `<rect x=\"0\" y=\"${h - sides.bottom.width}\" width=\"${w}\" height=\"${sides.bottom.width}\" fill=\"#${sides.bottom.color}\" />`;\r\n }\r\n if (sides.left.width > 0 && sides.left.color) {\r\n borderRects += `<rect x=\"0\" y=\"0\" width=\"${sides.left.width}\" height=\"${h}\" fill=\"#${sides.left.color}\" />`;\r\n }\r\n\r\n const svg = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\r\n <defs>\r\n <clipPath id=\"${clipId}\">\r\n <rect x=\"0\" y=\"0\" width=\"${w}\" height=\"${h}\" rx=\"${radius}\" ry=\"${radius}\" />\r\n </clipPath>\r\n </defs>\r\n <g clip-path=\"url(#${clipId})\">\r\n ${borderRects}\r\n </g>\r\n </svg>`;\r\n\r\n return 'data:image/svg+xml;base64,' + btoa(svg);\r\n}\r\n\r\n/**\r\n * Generates an SVG data URL for a solid shape with non-uniform corner radii.\r\n */\r\nexport function generateCustomShapeSVG(w, h, color, opacity, radii) {\r\n let { tl, tr, br, bl } = radii;\r\n\r\n // Clamp radii using CSS spec logic (avoid overlap)\r\n const factor = Math.min(\r\n w / (tl + tr) || Infinity,\r\n h / (tr + br) || Infinity,\r\n w / (br + bl) || Infinity,\r\n h / (bl + tl) || Infinity\r\n );\r\n\r\n if (factor < 1) {\r\n tl *= factor;\r\n tr *= factor;\r\n br *= factor;\r\n bl *= factor;\r\n }\r\n\r\n const path = `\r\n M ${tl} 0\r\n L ${w - tr} 0\r\n A ${tr} ${tr} 0 0 1 ${w} ${tr}\r\n L ${w} ${h - br}\r\n A ${br} ${br} 0 0 1 ${w - br} ${h}\r\n L ${bl} ${h}\r\n A ${bl} ${bl} 0 0 1 0 ${h - bl}\r\n L 0 ${tl}\r\n A ${tl} ${tl} 0 0 1 ${tl} 0\r\n Z\r\n `;\r\n\r\n const svg = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\r\n <path d=\"${path}\" fill=\"#${color}\" fill-opacity=\"${opacity}\" />\r\n </svg>`;\r\n\r\n return 'data:image/svg+xml;base64,' + btoa(svg);\r\n}\r\n\r\n// --- REPLACE THE EXISTING parseColor FUNCTION ---\r\nexport function parseColor(str) {\r\n if (!str || str === 'transparent' || str.trim() === 'rgba(0, 0, 0, 0)') {\r\n return { hex: null, opacity: 0 };\r\n }\r\n\r\n const ctx = getCtx();\r\n ctx.fillStyle = str;\r\n // This forces the browser to resolve variables and convert formats (oklch -> rgb/hex)\r\n const computed = ctx.fillStyle; \r\n\r\n // 1. Handle Hex Output (e.g. #ff0000 or #ff0000ff)\r\n if (computed.startsWith('#')) {\r\n let hex = computed.slice(1); // Remove '#'\r\n let opacity = 1;\r\n\r\n // Expand shorthand #RGB -> #RRGGBB\r\n if (hex.length === 3) {\r\n hex = hex.split('').map(c => c + c).join('');\r\n }\r\n // Expand shorthand #RGBA -> #RRGGBBAA\r\n else if (hex.length === 4) {\r\n hex = hex.split('').map(c => c + c).join('');\r\n }\r\n\r\n // Handle 8-digit Hex (RRGGBBAA) - PptxGenJS fails if we send 8 digits\r\n if (hex.length === 8) {\r\n opacity = parseInt(hex.slice(6), 16) / 255;\r\n hex = hex.slice(0, 6); // Keep only RRGGBB\r\n }\r\n\r\n return { hex: hex.toUpperCase(), opacity };\r\n }\r\n\r\n // 2. Handle RGB/RGBA Output (e.g. \"rgb(55, 65, 81)\" or \"rgba(55, 65, 81, 1)\")\r\n const match = computed.match(/[\\d.]+/g);\r\n if (match && match.length >= 3) {\r\n const r = parseInt(match[0]);\r\n const g = parseInt(match[1]);\r\n const b = parseInt(match[2]);\r\n const a = match.length > 3 ? parseFloat(match[3]) : 1;\r\n\r\n // Bitwise shift to get Hex\r\n const hex = ((1 << 24) + (r << 16) + (g << 8) + b)\r\n .toString(16)\r\n .slice(1)\r\n .toUpperCase();\r\n\r\n return { hex, opacity: a };\r\n }\r\n\r\n // Fallback (Parsing failed)\r\n return { hex: null, opacity: 0 };\r\n}\r\n\r\nexport function getPadding(style, scale) {\r\n const pxToInch = 1 / 96;\r\n return [\r\n (parseFloat(style.paddingTop) || 0) * pxToInch * scale,\r\n (parseFloat(style.paddingRight) || 0) * pxToInch * scale,\r\n (parseFloat(style.paddingBottom) || 0) * pxToInch * scale,\r\n (parseFloat(style.paddingLeft) || 0) * pxToInch * scale,\r\n ];\r\n}\r\n\r\nexport function getSoftEdges(filterStr, scale) {\r\n if (!filterStr || filterStr === 'none') return null;\r\n const match = filterStr.match(/blur\\(([\\d.]+)px\\)/);\r\n if (match) return parseFloat(match[1]) * 0.75 * scale;\r\n return null;\r\n}\r\n\r\nexport function getTextStyle(style, scale) {\r\n let colorObj = parseColor(style.color);\r\n\r\n const bgClip = style.webkitBackgroundClip || style.backgroundClip;\r\n if (colorObj.opacity === 0 && bgClip === 'text') {\r\n const fallback = getGradientFallbackColor(style.backgroundImage);\r\n if (fallback) colorObj = parseColor(fallback);\r\n }\r\n\r\n return {\r\n color: colorObj.hex || '000000',\r\n fontFace: style.fontFamily.split(',')[0].replace(/['\"]/g, ''),\r\n fontSize: parseFloat(style.fontSize) * 0.75 * scale,\r\n bold: parseInt(style.fontWeight) >= 600,\r\n italic: style.fontStyle === 'italic',\r\n underline: style.textDecoration.includes('underline'),\r\n };\r\n}\r\n\r\n/**\r\n * Determines if a given DOM node is primarily a text container.\r\n * Updated to correctly reject Icon elements so they are rendered as images.\r\n */\r\nexport function isTextContainer(node) {\r\n const hasText = node.textContent.trim().length > 0;\r\n if (!hasText) return false;\r\n\r\n const children = Array.from(node.children);\r\n if (children.length === 0) return true;\r\n\r\n const isSafeInline = (el) => {\r\n // 1. Reject Web Components / Custom Elements\r\n if (el.tagName.includes('-')) return false;\r\n // 2. Reject Explicit Images/SVGs\r\n if (el.tagName === 'IMG' || el.tagName === 'SVG') return false;\r\n\r\n // 3. Reject Class-based Icons (FontAwesome, Material, Bootstrap, etc.)\r\n // If an <i> or <span> has icon classes, it is a visual object, not text.\r\n if (el.tagName === 'I' || el.tagName === 'SPAN') {\r\n const cls = el.getAttribute('class') || '';\r\n if (\r\n cls.includes('fa-') ||\r\n cls.includes('fas') ||\r\n cls.includes('far') ||\r\n cls.includes('fab') ||\r\n cls.includes('material-icons') ||\r\n cls.includes('bi-') ||\r\n cls.includes('icon')\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n const style = window.getComputedStyle(el);\r\n const display = style.display;\r\n\r\n // 4. Standard Inline Tag Check\r\n const isInlineTag = ['SPAN', 'B', 'STRONG', 'EM', 'I', 'A', 'SMALL', 'MARK'].includes(\r\n el.tagName\r\n );\r\n const isInlineDisplay = display.includes('inline');\r\n\r\n if (!isInlineTag && !isInlineDisplay) return false;\r\n\r\n // 5. Structural Styling Check\r\n // If a child has a background or border, it's a layout block, not a simple text span.\r\n const bgColor = parseColor(style.backgroundColor);\r\n const hasVisibleBg = bgColor.hex && bgColor.opacity > 0;\r\n const hasBorder =\r\n parseFloat(style.borderWidth) > 0 && parseColor(style.borderColor).opacity > 0;\r\n\r\n if (hasVisibleBg || hasBorder) {\r\n return false;\r\n }\r\n\r\n // 4. Check for empty shapes (visual objects without text, like dots)\r\n const hasContent = el.textContent.trim().length > 0;\r\n if (!hasContent && (hasVisibleBg || hasBorder)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n return children.every(isSafeInline);\r\n}\r\n\r\nexport function getRotation(transformStr) {\r\n if (!transformStr || transformStr === 'none') return 0;\r\n const values = transformStr.split('(')[1].split(')')[0].split(',');\r\n if (values.length < 4) return 0;\r\n const a = parseFloat(values[0]);\r\n const b = parseFloat(values[1]);\r\n return Math.round(Math.atan2(b, a) * (180 / Math.PI));\r\n}\r\n\r\nexport function svgToPng(node) {\r\n return new Promise((resolve) => {\r\n const clone = node.cloneNode(true);\r\n const rect = node.getBoundingClientRect();\r\n const width = rect.width || 300;\r\n const height = rect.height || 150;\r\n\r\n function inlineStyles(source, target) {\r\n const computed = window.getComputedStyle(source);\r\n const properties = [\r\n 'fill',\r\n 'stroke',\r\n 'stroke-width',\r\n 'stroke-linecap',\r\n 'stroke-linejoin',\r\n 'opacity',\r\n 'font-family',\r\n 'font-size',\r\n 'font-weight',\r\n ];\r\n\r\n if (computed.fill === 'none') target.setAttribute('fill', 'none');\r\n else if (computed.fill) target.style.fill = computed.fill;\r\n\r\n if (computed.stroke === 'none') target.setAttribute('stroke', 'none');\r\n else if (computed.stroke) target.style.stroke = computed.stroke;\r\n\r\n properties.forEach((prop) => {\r\n if (prop !== 'fill' && prop !== 'stroke') {\r\n const val = computed[prop];\r\n if (val && val !== 'auto') target.style[prop] = val;\r\n }\r\n });\r\n\r\n for (let i = 0; i < source.children.length; i++) {\r\n if (target.children[i]) inlineStyles(source.children[i], target.children[i]);\r\n }\r\n }\r\n\r\n inlineStyles(node, clone);\r\n clone.setAttribute('width', width);\r\n clone.setAttribute('height', height);\r\n clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n\r\n const xml = new XMLSerializer().serializeToString(clone);\r\n const svgUrl = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(xml)}`;\r\n const img = new Image();\r\n img.crossOrigin = 'Anonymous';\r\n img.onload = () => {\r\n const canvas = document.createElement('canvas');\r\n const scale = 3;\r\n canvas.width = width * scale;\r\n canvas.height = height * scale;\r\n const ctx = canvas.getContext('2d');\r\n ctx.scale(scale, scale);\r\n ctx.drawImage(img, 0, 0, width, height);\r\n resolve(canvas.toDataURL('image/png'));\r\n };\r\n img.onerror = () => resolve(null);\r\n img.src = svgUrl;\r\n });\r\n}\r\n\r\nexport function getVisibleShadow(shadowStr, scale) {\r\n if (!shadowStr || shadowStr === 'none') return null;\r\n const shadows = shadowStr.split(/,(?![^()]*\\))/);\r\n for (let s of shadows) {\r\n s = s.trim();\r\n if (s.startsWith('rgba(0, 0, 0, 0)')) continue;\r\n const match = s.match(\r\n /(rgba?\\([^)]+\\)|#[0-9a-fA-F]+)\\s+(-?[\\d.]+)px\\s+(-?[\\d.]+)px\\s+([\\d.]+)px/\r\n );\r\n if (match) {\r\n const colorStr = match[1];\r\n const x = parseFloat(match[2]);\r\n const y = parseFloat(match[3]);\r\n const blur = parseFloat(match[4]);\r\n const distance = Math.sqrt(x * x + y * y);\r\n let angle = Math.atan2(y, x) * (180 / Math.PI);\r\n if (angle < 0) angle += 360;\r\n const colorObj = parseColor(colorStr);\r\n return {\r\n type: 'outer',\r\n angle: angle,\r\n blur: blur * 0.75 * scale,\r\n offset: distance * 0.75 * scale,\r\n color: colorObj.hex || '000000',\r\n opacity: colorObj.opacity,\r\n };\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * Generates an SVG image for gradients, supporting degrees and keywords.\r\n */\r\nexport function generateGradientSVG(w, h, bgString, radius, border) {\r\n try {\r\n const match = bgString.match(/linear-gradient\\((.*)\\)/);\r\n if (!match) return null;\r\n const content = match[1];\r\n\r\n // Split by comma, ignoring commas inside parentheses (e.g. rgba())\r\n const parts = content.split(/,(?![^()]*\\))/).map((p) => p.trim());\r\n if (parts.length < 2) return null;\r\n\r\n let x1 = '0%',\r\n y1 = '0%',\r\n x2 = '0%',\r\n y2 = '100%';\r\n let stopsStartIndex = 0;\r\n const firstPart = parts[0].toLowerCase();\r\n\r\n // 1. Check for Keywords (to right, etc.)\r\n if (firstPart.startsWith('to ')) {\r\n stopsStartIndex = 1;\r\n const direction = firstPart.replace('to ', '').trim();\r\n switch (direction) {\r\n case 'top':\r\n y1 = '100%';\r\n y2 = '0%';\r\n break;\r\n case 'bottom':\r\n y1 = '0%';\r\n y2 = '100%';\r\n break;\r\n case 'left':\r\n x1 = '100%';\r\n x2 = '0%';\r\n break;\r\n case 'right':\r\n x2 = '100%';\r\n break;\r\n case 'top right':\r\n x1 = '0%';\r\n y1 = '100%';\r\n x2 = '100%';\r\n y2 = '0%';\r\n break;\r\n case 'top left':\r\n x1 = '100%';\r\n y1 = '100%';\r\n x2 = '0%';\r\n y2 = '0%';\r\n break;\r\n case 'bottom right':\r\n x2 = '100%';\r\n y2 = '100%';\r\n break;\r\n case 'bottom left':\r\n x1 = '100%';\r\n y2 = '100%';\r\n break;\r\n }\r\n }\r\n // 2. Check for Degrees (45deg, 90deg, etc.)\r\n else if (firstPart.match(/^-?[\\d.]+(deg|rad|turn|grad)$/)) {\r\n stopsStartIndex = 1;\r\n const val = parseFloat(firstPart);\r\n // CSS 0deg is Top (North), 90deg is Right (East), 180deg is Bottom (South)\r\n // We convert this to SVG coordinates on a unit square (0-100%).\r\n // Formula: Map angle to perimeter coordinates.\r\n if (!isNaN(val)) {\r\n const deg = firstPart.includes('rad') ? val * (180 / Math.PI) : val;\r\n const cssRad = ((deg - 90) * Math.PI) / 180; // Correct CSS angle offset\r\n\r\n // Calculate standard vector for rectangle center (50, 50)\r\n const scale = 50; // Distance from center to edge (approx)\r\n const cos = Math.cos(cssRad); // Y component (reversed in SVG)\r\n const sin = Math.sin(cssRad); // X component\r\n\r\n // Invert Y for SVG coordinate system\r\n x1 = (50 - sin * scale).toFixed(1) + '%';\r\n y1 = (50 + cos * scale).toFixed(1) + '%';\r\n x2 = (50 + sin * scale).toFixed(1) + '%';\r\n y2 = (50 - cos * scale).toFixed(1) + '%';\r\n }\r\n }\r\n\r\n // 3. Process Color Stops\r\n let stopsXML = '';\r\n const stopParts = parts.slice(stopsStartIndex);\r\n\r\n stopParts.forEach((part, idx) => {\r\n // Parse \"Color Position\" (e.g., \"red 50%\")\r\n // Regex looks for optional space + number + unit at the end of the string\r\n let color = part;\r\n let offset = Math.round((idx / (stopParts.length - 1)) * 100) + '%';\r\n\r\n const posMatch = part.match(/^(.*?)\\s+(-?[\\d.]+(?:%|px)?)$/);\r\n if (posMatch) {\r\n color = posMatch[1];\r\n offset = posMatch[2];\r\n }\r\n\r\n // Handle RGBA/RGB for SVG compatibility\r\n let opacity = 1;\r\n if (color.includes('rgba')) {\r\n const rgbaMatch = color.match(/[\\d.]+/g);\r\n if (rgbaMatch && rgbaMatch.length >= 4) {\r\n opacity = rgbaMatch[3];\r\n color = `rgb(${rgbaMatch[0]},${rgbaMatch[1]},${rgbaMatch[2]})`;\r\n }\r\n }\r\n\r\n stopsXML += `<stop offset=\"${offset}\" stop-color=\"${color.trim()}\" stop-opacity=\"${opacity}\"/>`;\r\n });\r\n\r\n let strokeAttr = '';\r\n if (border) {\r\n strokeAttr = `stroke=\"#${border.color}\" stroke-width=\"${border.width}\"`;\r\n }\r\n\r\n const svg = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${w}\" height=\"${h}\" viewBox=\"0 0 ${w} ${h}\">\r\n <defs>\r\n <linearGradient id=\"grad\" x1=\"${x1}\" y1=\"${y1}\" x2=\"${x2}\" y2=\"${y2}\">\r\n ${stopsXML}\r\n </linearGradient>\r\n </defs>\r\n <rect x=\"0\" y=\"0\" width=\"${w}\" height=\"${h}\" rx=\"${radius}\" ry=\"${radius}\" fill=\"url(#grad)\" ${strokeAttr} />\r\n </svg>`;\r\n\r\n return 'data:image/svg+xml;base64,' + btoa(svg);\r\n } catch (e) {\r\n console.warn('Gradient generation failed:', e);\r\n return null;\r\n }\r\n}\r\n\r\nexport function generateBlurredSVG(w, h, color, radius, blurPx) {\r\n const padding = blurPx * 3;\r\n const fullW = w + padding * 2;\r\n const fullH = h + padding * 2;\r\n const x = padding;\r\n const y = padding;\r\n let shapeTag = '';\r\n const isCircle = radius >= Math.min(w, h) / 2 - 1 && Math.abs(w - h) < 2;\r\n\r\n if (isCircle) {\r\n const cx = x + w / 2;\r\n const cy = y + h / 2;\r\n const rx = w / 2;\r\n const ry = h / 2;\r\n shapeTag = `<ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"#${color}\" filter=\"url(#f1)\" />`;\r\n } else {\r\n shapeTag = `<rect x=\"${x}\" y=\"${y}\" width=\"${w}\" height=\"${h}\" rx=\"${radius}\" ry=\"${radius}\" fill=\"#${color}\" filter=\"url(#f1)\" />`;\r\n }\r\n\r\n const svg = `\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${fullW}\" height=\"${fullH}\" viewBox=\"0 0 ${fullW} ${fullH}\">\r\n <defs>\r\n <filter id=\"f1\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\r\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"${blurPx}\" />\r\n </filter>\r\n </defs>\r\n ${shapeTag}\r\n </svg>`;\r\n\r\n return {\r\n data: 'data:image/svg+xml;base64,' + btoa(svg),\r\n padding: padding,\r\n };\r\n}\r\n\r\n// src/utils.js\r\n\r\n// ... (keep all existing exports) ...\r\n\r\n/**\r\n * Traverses the target DOM and collects all unique font-family names used.\r\n */\r\nexport function getUsedFontFamilies(root) {\r\n const families = new Set();\r\n \r\n function scan(node) {\r\n if (node.nodeType === 1) { // Element\r\n const style = window.getComputedStyle(node);\r\n const fontList = style.fontFamily.split(',');\r\n // The first font in the stack is the primary one\r\n const primary = fontList[0].trim().replace(/['\"]/g, '');\r\n if (primary) families.add(primary);\r\n }\r\n for (const child of node.childNodes) {\r\n scan(child);\r\n }\r\n }\r\n\r\n // Handle array of roots or single root\r\n const elements = Array.isArray(root) ? root : [root];\r\n elements.forEach(el => {\r\n const node = typeof el === 'string' ? document.querySelector(el) : el;\r\n if (node) scan(node);\r\n });\r\n\r\n return families;\r\n}\r\n\r\n/**\r\n * Scans document.styleSheets to find @font-face URLs for the requested families.\r\n * Returns an array of { name, url } objects.\r\n */\r\nexport async function getAutoDetectedFonts(usedFamilies) {\r\n const foundFonts = [];\r\n const processedUrls = new Set();\r\n\r\n // Helper to extract clean URL from CSS src string\r\n const extractUrl = (srcStr) => {\r\n // Look for url(\"...\") or url('...') or url(...)\r\n // Prioritize woff, ttf, otf. Avoid woff2 if possible as handling is harder, \r\n // but if it's the only one, take it (convert logic handles it best effort).\r\n const matches = srcStr.match(/url\\((['\"]?)(.*?)\\1\\)/g);\r\n if (!matches) return null;\r\n\r\n // Filter for preferred formats\r\n let chosenUrl = null;\r\n for (const match of matches) {\r\n const urlRaw = match.replace(/url\\((['\"]?)(.*?)\\1\\)/, '$2');\r\n // Skip data URIs for now (unless you want to support base64 embedding)\r\n if (urlRaw.startsWith('data:')) continue; \r\n \r\n if (urlRaw.includes('.ttf') || urlRaw.includes('.otf') || urlRaw.includes('.woff')) {\r\n chosenUrl = urlRaw;\r\n break; // Found a good one\r\n }\r\n // Fallback\r\n if (!chosenUrl) chosenUrl = urlRaw;\r\n }\r\n return chosenUrl;\r\n };\r\n\r\n for (const sheet of Array.from(document.styleSheets)) {\r\n try {\r\n // Accessing cssRules on cross-origin sheets (like Google Fonts) might fail \r\n // if CORS headers aren't set. We wrap in try/catch.\r\n const rules = sheet.cssRules || sheet.rules;\r\n if (!rules) continue;\r\n\r\n for (const rule of Array.from(rules)) {\r\n if (rule.constructor.name === 'CSSFontFaceRule' || rule.type === 5) {\r\n const familyName = rule.style.getPropertyValue('font-family').replace(/['\"]/g, '').trim();\r\n \r\n if (usedFamilies.has(familyName)) {\r\n const src = rule.style.getPropertyValue('src');\r\n const url = extractUrl(src);\r\n \r\n if (url && !processedUrls.has(url)) {\r\n processedUrls.add(url);\r\n foundFonts.push({ name: familyName, url: url });\r\n }\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // SecurityError is common for external stylesheets (CORS). \r\n // We cannot scan those automatically via CSSOM.\r\n console.warn(\"error:\", e);\r\n console.warn('Cannot scan stylesheet for fonts (CORS restriction):', sheet.href);\r\n }\r\n }\r\n\r\n return foundFonts;\r\n}","// src/image-processor.js\n\nexport async function getProcessedImage(src, targetW, targetH, radius, objectFit = 'fill', objectPosition = '50% 50%') {\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; r.tr *= factor; r.br *= factor; 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\r\nimport * as PptxGenJSImport from 'pptxgenjs';\r\nimport html2canvas from 'html2canvas';\r\nimport { PPTXEmbedFonts } from './font-embedder.js';\r\nimport JSZip from 'jszip';\r\n\r\n// Normalize import\r\nconst PptxGenJS = PptxGenJSImport?.default ?? PptxGenJSImport;\r\n\r\nimport {\r\n parseColor,\r\n getTextStyle,\r\n isTextContainer,\r\n getVisibleShadow,\r\n generateGradientSVG,\r\n getRotation,\r\n svgToPng,\r\n getPadding,\r\n getSoftEdges,\r\n generateBlurredSVG,\r\n getBorderInfo,\r\n generateCompositeBorderSVG,\r\n isClippedByParent,\r\n generateCustomShapeSVG,\r\n getUsedFontFamilies,\r\n getAutoDetectedFonts,\r\n} from './utils.js';\r\nimport { getProcessedImage } from './image-processor.js';\r\n\r\nconst PPI = 96;\r\nconst PX_TO_INCH = 1 / PPI;\r\n\r\n/**\r\n * Main export function.\r\n * @param {HTMLElement | string | Array<HTMLElement | string>} target\r\n * @param {Object} options\r\n * @param {string} [options.fileName]\r\n * @param {Array<{name: string, url: string}>} [options.fonts] - Explicit fonts\r\n * @param {boolean} [options.autoEmbedFonts=true] - Attempt to auto-detect and embed used fonts\r\n */\r\nexport async function exportToPptx(target, options = {}) {\r\n const resolvePptxConstructor = (pkg) => {\r\n if (!pkg) return null;\r\n if (typeof pkg === 'function') return pkg;\r\n if (pkg && typeof pkg.default === 'function') return pkg.default;\r\n if (pkg && typeof pkg.PptxGenJS === 'function') return pkg.PptxGenJS;\r\n if (pkg && pkg.PptxGenJS && typeof pkg.PptxGenJS.default === 'function')\r\n return pkg.PptxGenJS.default;\r\n return null;\r\n };\r\n\r\n const PptxConstructor = resolvePptxConstructor(PptxGenJS);\r\n if (!PptxConstructor) throw new Error('PptxGenJS constructor not found.');\r\n const pptx = new PptxConstructor();\r\n pptx.layout = 'LAYOUT_16x9';\r\n\r\n const elements = Array.isArray(target) ? target : [target];\r\n\r\n for (const el of elements) {\r\n const root = typeof el === 'string' ? document.querySelector(el) : el;\r\n if (!root) {\r\n console.warn('Element not found, skipping slide:', el);\r\n continue;\r\n }\r\n const slide = pptx.addSlide();\r\n await processSlide(root, slide, pptx);\r\n }\r\n\r\n // 3. Font Embedding Logic\r\n let finalBlob;\r\n let fontsToEmbed = options.fonts || [];\r\n\r\n if (options.autoEmbedFonts) {\r\n // A. Scan DOM for used font families\r\n const usedFamilies = getUsedFontFamilies(elements);\r\n\r\n // B. Scan CSS for URLs matches\r\n const detectedFonts = await getAutoDetectedFonts(usedFamilies);\r\n\r\n // C. Merge (Avoid duplicates)\r\n const explicitNames = new Set(fontsToEmbed.map((f) => f.name));\r\n for (const autoFont of detectedFonts) {\r\n if (!explicitNames.has(autoFont.name)) {\r\n fontsToEmbed.push(autoFont);\r\n }\r\n }\r\n\r\n if (detectedFonts.length > 0) {\r\n console.log(\r\n 'Auto-detected fonts:',\r\n detectedFonts.map((f) => f.name)\r\n );\r\n }\r\n }\r\n\r\n if (fontsToEmbed.length > 0) {\r\n // Generate initial PPTX\r\n const initialBlob = await pptx.write({ outputType: 'blob' });\r\n\r\n // Load into Embedder\r\n const zip = await JSZip.loadAsync(initialBlob);\r\n const embedder = new PPTXEmbedFonts();\r\n await embedder.loadZip(zip);\r\n\r\n // Fetch and Embed\r\n for (const fontCfg of fontsToEmbed) {\r\n try {\r\n const response = await fetch(fontCfg.url);\r\n if (!response.ok) throw new Error(`Failed to fetch ${fontCfg.url}`);\r\n const buffer = await response.arrayBuffer();\r\n\r\n // Infer type\r\n const ext = fontCfg.url.split('.').pop().split(/[?#]/)[0].toLowerCase();\r\n let type = 'ttf';\r\n if (['woff', 'otf'].includes(ext)) type = ext;\r\n\r\n await embedder.addFont(fontCfg.name, buffer, type);\r\n } catch (e) {\r\n console.warn(`Failed to embed font: ${fontCfg.name} (${fontCfg.url})`, e);\r\n }\r\n }\r\n\r\n await embedder.updateFiles();\r\n finalBlob = await embedder.generateBlob();\r\n } else {\r\n // No fonts to embed\r\n finalBlob = await pptx.write({ outputType: 'blob' });\r\n }\r\n\r\n // 4. Download\r\n const fileName = options.fileName || 'export.pptx';\r\n const url = URL.createObjectURL(finalBlob);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = fileName;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url);\r\n}\r\n\r\n/**\r\n * Worker function to process a single DOM element into a single PPTX slide.\r\n * @param {HTMLElement} root - The root element for this slide.\r\n * @param {PptxGenJS.Slide} slide - The PPTX slide object to add content to.\r\n * @param {PptxGenJS} pptx - The main PPTX instance.\r\n */\r\nasync function processSlide(root, slide, pptx) {\r\n const rootRect = root.getBoundingClientRect();\r\n const PPTX_WIDTH_IN = 10;\r\n const PPTX_HEIGHT_IN = 5.625;\r\n\r\n const contentWidthIn = rootRect.width * PX_TO_INCH;\r\n const contentHeightIn = rootRect.height * PX_TO_INCH;\r\n const scale = Math.min(PPTX_WIDTH_IN / contentWidthIn, PPTX_HEIGHT_IN / contentHeightIn);\r\n\r\n const layoutConfig = {\r\n rootX: rootRect.x,\r\n rootY: rootRect.y,\r\n scale: scale,\r\n offX: (PPTX_WIDTH_IN - contentWidthIn * scale) / 2,\r\n offY: (PPTX_HEIGHT_IN - contentHeightIn * scale) / 2,\r\n };\r\n\r\n const renderQueue = [];\r\n const asyncTasks = []; // Queue for heavy operations (Images, Canvas)\r\n let domOrderCounter = 0;\r\n\r\n // Sync Traversal Function\r\n function collect(node, parentZIndex) {\r\n const order = domOrderCounter++;\r\n\r\n let currentZ = parentZIndex;\r\n let nodeStyle = null;\r\n const nodeType = node.nodeType;\r\n\r\n if (nodeType === 1) {\r\n nodeStyle = window.getComputedStyle(node);\r\n // Optimization: Skip completely hidden elements immediately\r\n if (\r\n nodeStyle.display === 'none' ||\r\n nodeStyle.visibility === 'hidden' ||\r\n nodeStyle.opacity === '0'\r\n ) {\r\n return;\r\n }\r\n if (nodeStyle.zIndex !== 'auto') {\r\n currentZ = parseInt(nodeStyle.zIndex);\r\n }\r\n }\r\n\r\n // Prepare the item. If it needs async work, it returns a 'job'\r\n const result = prepareRenderItem(\r\n node,\r\n { ...layoutConfig, root },\r\n order,\r\n pptx,\r\n currentZ,\r\n nodeStyle\r\n );\r\n\r\n if (result) {\r\n if (result.items) {\r\n // Push items immediately to queue (data might be missing but filled later)\r\n renderQueue.push(...result.items);\r\n }\r\n if (result.job) {\r\n // Push the promise-returning function to the task list\r\n asyncTasks.push(result.job);\r\n }\r\n if (result.stopRecursion) return;\r\n }\r\n\r\n // Recurse children synchronously\r\n const childNodes = node.childNodes;\r\n for (let i = 0; i < childNodes.length; i++) {\r\n collect(childNodes[i], currentZ);\r\n }\r\n }\r\n\r\n // 1. Traverse and build the structure (Fast)\r\n collect(root, 0);\r\n\r\n // 2. Execute all heavy tasks in parallel (Fast)\r\n if (asyncTasks.length > 0) {\r\n await Promise.all(asyncTasks.map((task) => task()));\r\n }\r\n\r\n // 3. Cleanup and Sort\r\n // Remove items that failed to generate data (marked with skip)\r\n const finalQueue = renderQueue.filter(\r\n (item) => !item.skip && (item.type !== 'image' || item.options.data)\r\n );\r\n\r\n finalQueue.sort((a, b) => {\r\n if (a.zIndex !== b.zIndex) return a.zIndex - b.zIndex;\r\n return a.domOrder - b.domOrder;\r\n });\r\n\r\n // 4. Add to Slide\r\n for (const item of finalQueue) {\r\n if (item.type === 'shape') slide.addShape(item.shapeType, item.options);\r\n if (item.type === 'image') slide.addImage(item.options);\r\n if (item.type === 'text') slide.addText(item.textParts, item.options);\r\n }\r\n}\r\n\r\n/**\r\n * Optimized html2canvas wrapper\r\n * Fixes icon clipping by adding padding in the clone to capture font bleed,\r\n * then scaling the result to fit the original bounding box.\r\n */\r\nasync function elementToCanvasImage(node, widthPx, heightPx) {\r\n return new Promise((resolve) => {\r\n // 1. Assign a temp ID to locate the node inside the cloned document\r\n const originalId = node.id;\r\n const tempId = 'pptx-capture-' + Math.random().toString(36).substr(2, 9);\r\n node.id = tempId;\r\n\r\n const width = Math.max(Math.ceil(widthPx), 1);\r\n const height = Math.max(Math.ceil(heightPx), 1);\r\n const style = window.getComputedStyle(node);\r\n\r\n html2canvas(node, {\r\n backgroundColor: null,\r\n logging: false,\r\n scale: 3, // High resolution capture\r\n useCORS: true,\r\n onclone: (clonedDoc) => {\r\n const clonedNode = clonedDoc.getElementById(tempId);\r\n if (clonedNode) {\r\n // --- FIX FOR ICON CLIPPING ---\r\n const tag = clonedNode.tagName;\r\n // Detect icons: I tags, SPAN tags, or elements with icon classes\r\n const isIcon =\r\n tag === 'I' ||\r\n tag === 'SPAN' ||\r\n clonedNode.className.includes('fa-') ||\r\n clonedNode.className.includes('icon');\r\n\r\n if (isIcon) {\r\n // 1. Use inline-flex to center the glyph content\r\n clonedNode.style.display = 'flex';\r\n clonedNode.style.justifyContent = 'center';\r\n clonedNode.style.alignItems = 'center';\r\n\r\n // 2. Reset constraints that might crop content\r\n clonedNode.style.overflow = 'visible';\r\n clonedNode.style.lineHeight = 'normal';\r\n\r\n // 3. Add padding to the capture area.\r\n // This ensures parts of the glyph sticking out of the bounding box (ascenders/descenders)\r\n // are captured in the canvas instead of being cropped.\r\n // 'content-box' ensures padding adds to the total width/height.\r\n clonedNode.style.boxSizing = 'content-box';\r\n clonedNode.style.padding = '10px';\r\n\r\n // 4. Ensure the content box itself matches the original size (minimum)\r\n // so the icon doesn't collapse.\r\n clonedNode.style.minWidth = `${width}px`;\r\n clonedNode.style.minHeight = `${height}px`;\r\n\r\n // Clear margins that might displace the capture\r\n clonedNode.style.margin = '0';\r\n }\r\n }\r\n },\r\n })\r\n .then((canvas) => {\r\n // Restore ID\r\n if (originalId) node.id = originalId;\r\n else node.removeAttribute('id');\r\n\r\n // Create destination canvas with the EXACT original dimensions\r\n const destCanvas = document.createElement('canvas');\r\n destCanvas.width = width;\r\n destCanvas.height = height;\r\n const ctx = destCanvas.getContext('2d');\r\n\r\n // --- SCALE TO FIT ---\r\n // The captured 'canvas' is now larger than 'destCanvas' because we added padding.\r\n // We draw the larger captured image into the smaller destination box.\r\n // This effectively \"zooms out\" slightly, ensuring the bleed is visible within the bounds.\r\n ctx.drawImage(\r\n canvas,\r\n 0,\r\n 0,\r\n canvas.width,\r\n canvas.height, // Source: Full captured size (with padding)\r\n 0,\r\n 0,\r\n width,\r\n height // Dest: Original requested size\r\n );\r\n\r\n // --- Border Radius Clipping (Preserve existing logic) ---\r\n let tl = parseFloat(style.borderTopLeftRadius) || 0;\r\n let tr = parseFloat(style.borderTopRightRadius) || 0;\r\n let br = parseFloat(style.borderBottomRightRadius) || 0;\r\n let bl = parseFloat(style.borderBottomLeftRadius) || 0;\r\n\r\n const f = Math.min(\r\n width / (tl + tr) || Infinity,\r\n height / (tr + br) || Infinity,\r\n width / (br + bl) || Infinity,\r\n height / (bl + tl) || Infinity\r\n );\r\n\r\n if (f < 1) {\r\n tl *= f;\r\n tr *= f;\r\n br *= f;\r\n bl *= f;\r\n }\r\n\r\n if (tl + tr + br + bl > 0) {\r\n ctx.globalCompositeOperation = 'destination-in';\r\n ctx.beginPath();\r\n ctx.moveTo(tl, 0);\r\n ctx.lineTo(width - tr, 0);\r\n ctx.arcTo(width, 0, width, tr, tr);\r\n ctx.lineTo(width, height - br);\r\n ctx.arcTo(width, height, width - br, height, br);\r\n ctx.lineTo(bl, height);\r\n ctx.arcTo(0, height, 0, height - bl, bl);\r\n ctx.lineTo(0, tl);\r\n ctx.arcTo(0, 0, tl, 0, tl);\r\n ctx.closePath();\r\n ctx.fill();\r\n }\r\n\r\n resolve(destCanvas.toDataURL('image/png'));\r\n })\r\n .catch((e) => {\r\n if (originalId) node.id = originalId;\r\n else node.removeAttribute('id');\r\n console.warn('Canvas capture failed for node', node, e);\r\n resolve(null);\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Helper to identify elements that should be rendered as icons (Images).\r\n * Detects Custom Elements AND generic tags (<i>, <span>) with icon classes/pseudo-elements.\r\n */\r\nfunction isIconElement(node) {\r\n // 1. Custom Elements (hyphenated tags) or Explicit Library Tags\r\n const tag = node.tagName.toUpperCase();\r\n if (\r\n tag.includes('-') ||\r\n [\r\n 'MATERIAL-ICON',\r\n 'ICONIFY-ICON',\r\n 'REMIX-ICON',\r\n 'ION-ICON',\r\n 'EVA-ICON',\r\n 'BOX-ICON',\r\n 'FA-ICON',\r\n ].includes(tag)\r\n ) {\r\n return true;\r\n }\r\n\r\n // 2. Class-based Icons (FontAwesome, Bootstrap, Material symbols) on <i> or <span>\r\n if (tag === 'I' || tag === 'SPAN') {\r\n const cls = node.getAttribute('class') || '';\r\n if (\r\n typeof cls === 'string' &&\r\n (cls.includes('fa-') ||\r\n cls.includes('fas') ||\r\n cls.includes('far') ||\r\n cls.includes('fab') ||\r\n cls.includes('bi-') ||\r\n cls.includes('material-icons') ||\r\n cls.includes('icon'))\r\n ) {\r\n // Double-check: Must have pseudo-element content to be a CSS icon\r\n const before = window.getComputedStyle(node, '::before').content;\r\n const after = window.getComputedStyle(node, '::after').content;\r\n const hasContent = (c) => c && c !== 'none' && c !== 'normal' && c !== '\"\"';\r\n\r\n if (hasContent(before) || hasContent(after)) return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Replaces createRenderItem.\r\n * Returns { items: [], job: () => Promise, stopRecursion: boolean }\r\n */\r\nfunction prepareRenderItem(node, config, domOrder, pptx, effectiveZIndex, computedStyle) {\r\n // 1. Text Node Handling\r\n if (node.nodeType === 3) {\r\n const textContent = node.nodeValue.trim();\r\n if (!textContent) return null;\r\n\r\n const parent = node.parentElement;\r\n if (!parent) return null;\r\n\r\n if (isTextContainer(parent)) return null; // Parent handles it\r\n\r\n const range = document.createRange();\r\n range.selectNode(node);\r\n const rect = range.getBoundingClientRect();\r\n range.detach();\r\n\r\n const style = window.getComputedStyle(parent);\r\n const widthPx = rect.width;\r\n const heightPx = rect.height;\r\n const unrotatedW = widthPx * PX_TO_INCH * config.scale;\r\n const unrotatedH = heightPx * PX_TO_INCH * config.scale;\r\n\r\n const x = config.offX + (rect.left - config.rootX) * PX_TO_INCH * config.scale;\r\n const y = config.offY + (rect.top - config.rootY) * PX_TO_INCH * config.scale;\r\n\r\n return {\r\n items: [\r\n {\r\n type: 'text',\r\n zIndex: effectiveZIndex,\r\n domOrder,\r\n textParts: [\r\n {\r\n text: textContent,\r\n options: getTextStyle(style, config.scale),\r\n },\r\n ],\r\n options: { x, y, w: unrotatedW, h: unrotatedH, margin: 0, autoFit: false },\r\n },\r\n ],\r\n stopRecursion: false,\r\n };\r\n }\r\n\r\n if (node.nodeType !== 1) return null;\r\n const style = computedStyle; // Use pre-computed style\r\n\r\n const rect = node.getBoundingClientRect();\r\n if (rect.width < 0.5 || rect.height < 0.5) return null;\r\n\r\n const zIndex = effectiveZIndex;\r\n const rotation = getRotation(style.transform);\r\n const elementOpacity = parseFloat(style.opacity);\r\n const safeOpacity = isNaN(elementOpacity) ? 1 : elementOpacity;\r\n\r\n const widthPx = node.offsetWidth || rect.width;\r\n const heightPx = node.offsetHeight || rect.height;\r\n const unrotatedW = widthPx * PX_TO_INCH * config.scale;\r\n const unrotatedH = heightPx * PX_TO_INCH * config.scale;\r\n const centerX = rect.left + rect.width / 2;\r\n const centerY = rect.top + rect.height / 2;\r\n\r\n let x = config.offX + (centerX - config.rootX) * PX_TO_INCH * config.scale - unrotatedW / 2;\r\n let y = config.offY + (centerY - config.rootY) * PX_TO_INCH * config.scale - unrotatedH / 2;\r\n let w = unrotatedW;\r\n let h = unrotatedH;\r\n\r\n const items = [];\r\n\r\n // --- ASYNC JOB: SVG Tags ---\r\n if (node.nodeName.toUpperCase() === 'SVG') {\r\n const item = {\r\n type: 'image',\r\n zIndex,\r\n domOrder,\r\n options: { data: null, x, y, w, h, rotate: rotation },\r\n };\r\n\r\n const job = async () => {\r\n const processed = await svgToPng(node);\r\n if (processed) item.options.data = processed;\r\n else item.skip = true;\r\n };\r\n\r\n return { items: [item], job, stopRecursion: true };\r\n }\r\n\r\n // --- ASYNC JOB: IMG Tags ---\r\n if (node.tagName === 'IMG') {\r\n let radii = {\r\n tl: parseFloat(style.borderTopLeftRadius) || 0,\r\n tr: parseFloat(style.borderTopRightRadius) || 0,\r\n br: parseFloat(style.borderBottomRightRadius) || 0,\r\n bl: parseFloat(style.borderBottomLeftRadius) || 0,\r\n };\r\n\r\n const hasAnyRadius = radii.tl > 0 || radii.tr > 0 || radii.br > 0 || radii.bl > 0;\r\n if (!hasAnyRadius) {\r\n const parent = node.parentElement;\r\n const parentStyle = window.getComputedStyle(parent);\r\n if (parentStyle.overflow !== 'visible') {\r\n const pRadii = {\r\n tl: parseFloat(parentStyle.borderTopLeftRadius) || 0,\r\n tr: parseFloat(parentStyle.borderTopRightRadius) || 0,\r\n br: parseFloat(parentStyle.borderBottomRightRadius) || 0,\r\n bl: parseFloat(parentStyle.borderBottomLeftRadius) || 0,\r\n };\r\n const pRect = parent.getBoundingClientRect();\r\n if (Math.abs(pRect.width - rect.width) < 5 && Math.abs(pRect.height - rect.height) < 5) {\r\n radii = pRadii;\r\n }\r\n }\r\n }\r\n\r\n const objectFit = style.objectFit || 'fill'; // default CSS behavior is fill\r\n const objectPosition = style.objectPosition || '50% 50%';\r\n\r\n const item = {\r\n type: 'image',\r\n zIndex,\r\n domOrder,\r\n options: { x, y, w, h, rotate: rotation, data: null },\r\n };\r\n\r\n const job = async () => {\r\n const processed = await getProcessedImage(\r\n node.src,\r\n widthPx,\r\n heightPx,\r\n radii,\r\n objectFit,\r\n objectPosition\r\n );\r\n if (processed) item.options.data = processed;\r\n else item.skip = true;\r\n };\r\n\r\n return { items: [item], job, stopRecursion: true };\r\n }\r\n\r\n // --- ASYNC JOB: Icons and Other Elements ---\r\n if (isIconElement(node)) {\r\n const item = {\r\n type: 'image',\r\n zIndex,\r\n domOrder,\r\n options: { x, y, w, h, rotate: rotation, data: null },\r\n };\r\n const job = async () => {\r\n const pngData = await elementToCanvasImage(node, widthPx, heightPx);\r\n if (pngData) item.options.data = pngData;\r\n else item.skip = true;\r\n };\r\n return { items: [item], job, stopRecursion: true };\r\n }\r\n\r\n // Radii logic\r\n const borderRadiusValue = parseFloat(style.borderRadius) || 0;\r\n const borderBottomLeftRadius = parseFloat(style.borderBottomLeftRadius) || 0;\r\n const borderBottomRightRadius = parseFloat(style.borderBottomRightRadius) || 0;\r\n const borderTopLeftRadius = parseFloat(style.borderTopLeftRadius) || 0;\r\n const borderTopRightRadius = parseFloat(style.borderTopRightRadius) || 0;\r\n\r\n const hasPartialBorderRadius =\r\n (borderBottomLeftRadius > 0 && borderBottomLeftRadius !== borderRadiusValue) ||\r\n (borderBottomRightRadius > 0 && borderBottomRightRadius !== borderRadiusValue) ||\r\n (borderTopLeftRadius > 0 && borderTopLeftRadius !== borderRadiusValue) ||\r\n (borderTopRightRadius > 0 && borderTopRightRadius !== borderRadiusValue) ||\r\n (borderRadiusValue === 0 &&\r\n (borderBottomLeftRadius ||\r\n borderBottomRightRadius ||\r\n borderTopLeftRadius ||\r\n borderTopRightRadius));\r\n\r\n // --- ASYNC JOB: Clipped Divs via Canvas ---\r\n if (hasPartialBorderRadius && isClippedByParent(node)) {\r\n const marginLeft = parseFloat(style.marginLeft) || 0;\r\n const marginTop = parseFloat(style.marginTop) || 0;\r\n x += marginLeft * PX_TO_INCH * config.scale;\r\n y += marginTop * PX_TO_INCH * config.scale;\r\n\r\n const item = {\r\n type: 'image',\r\n zIndex,\r\n domOrder,\r\n options: { x, y, w, h, rotate: rotation, data: null },\r\n };\r\n\r\n const job = async () => {\r\n const canvasImageData = await elementToCanvasImage(node, widthPx, heightPx);\r\n if (canvasImageData) item.options.data = canvasImageData;\r\n else item.skip = true;\r\n };\r\n\r\n return { items: [item], job, stopRecursion: true };\r\n }\r\n\r\n // --- SYNC: Standard CSS Extraction ---\r\n const bgColorObj = parseColor(style.backgroundColor);\r\n const bgClip = style.webkitBackgroundClip || style.backgroundClip;\r\n const isBgClipText = bgClip === 'text';\r\n const hasGradient =\r\n !isBgClipText && style.backgroundImage && style.backgroundImage.includes('linear-gradient');\r\n\r\n const borderColorObj = parseColor(style.borderColor);\r\n const borderWidth = parseFloat(style.borderWidth);\r\n const hasBorder = borderWidth > 0 && borderColorObj.hex;\r\n\r\n const borderInfo = getBorderInfo(style, config.scale);\r\n const hasUniformBorder = borderInfo.type === 'uniform';\r\n const hasCompositeBorder = borderInfo.type === 'composite';\r\n\r\n const shadowStr = style.boxShadow;\r\n const hasShadow = shadowStr && shadowStr !== 'none';\r\n const softEdge = getSoftEdges(style.filter, config.scale);\r\n\r\n let isImageWrapper = false;\r\n const imgChild = Array.from(node.children).find((c) => c.tagName === 'IMG');\r\n if (imgChild) {\r\n const childW = imgChild.offsetWidth || imgChild.getBoundingClientRect().width;\r\n const childH = imgChild.offsetHeight || imgChild.getBoundingClientRect().height;\r\n if (childW >= widthPx - 2 && childH >= heightPx - 2) isImageWrapper = true;\r\n }\r\n\r\n let textPayload = null;\r\n const isText = isTextContainer(node);\r\n\r\n if (isText) {\r\n const textParts = [];\r\n const isList = style.display === 'list-item';\r\n if (isList) {\r\n const fontSizePt = parseFloat(style.fontSize) * 0.75 * config.scale;\r\n const listStyleType = style.listStyleType || 'disc';\r\n const listStylePos = style.listStylePosition || 'outside';\r\n\r\n let marker = null;\r\n\r\n // 1. Determine the marker character based on list-style-type\r\n if (listStyleType !== 'none') {\r\n if (listStyleType === 'decimal') {\r\n // Calculate index for ordered lists (1., 2., etc.)\r\n const index = Array.prototype.indexOf.call(node.parentNode.children, node) + 1;\r\n marker = `${index}.`;\r\n } else if (listStyleType === 'circle') {\r\n marker = '○';\r\n } else if (listStyleType === 'square') {\r\n marker = '■';\r\n } else {\r\n marker = '•'; // Default to disc\r\n }\r\n }\r\n\r\n // 2. Apply alignment and add marker\r\n if (marker) {\r\n // Only shift the text box to the left if the bullet is OUTSIDE the content box.\r\n // Tailwind 'list-inside' puts the bullet inside the box, so we must NOT shift X.\r\n if (listStylePos === 'outside') {\r\n const bulletShift = (parseFloat(style.fontSize) || 16) * PX_TO_INCH * config.scale * 1.5;\r\n x -= bulletShift;\r\n w += bulletShift;\r\n }\r\n\r\n // Add the bullet + 3 spaces for visual separation\r\n textParts.push({\r\n text: marker + ' ',\r\n options: {\r\n color: parseColor(style.color).hex || '000000',\r\n fontSize: fontSizePt,\r\n },\r\n });\r\n }\r\n }\r\n\r\n node.childNodes.forEach((child, index) => {\r\n let textVal = child.nodeType === 3 ? child.nodeValue : child.textContent;\r\n let nodeStyle = child.nodeType === 1 ? window.getComputedStyle(child) : style;\r\n textVal = textVal.replace(/[\\n\\r\\t]+/g, ' ').replace(/\\s{2,}/g, ' ');\r\n if (index === 0 && !isList) textVal = textVal.trimStart();\r\n else if (index === 0) textVal = textVal.trimStart();\r\n if (index === node.childNodes.length - 1) textVal = textVal.trimEnd();\r\n if (nodeStyle.textTransform === 'uppercase') textVal = textVal.toUpperCase();\r\n if (nodeStyle.textTransform === 'lowercase') textVal = textVal.toLowerCase();\r\n\r\n if (textVal.length > 0) {\r\n textParts.push({\r\n text: textVal,\r\n options: getTextStyle(nodeStyle, config.scale),\r\n });\r\n }\r\n });\r\n\r\n if (textParts.length > 0) {\r\n let align = style.textAlign || 'left';\r\n if (align === 'start') align = 'left';\r\n if (align === 'end') align = 'right';\r\n let valign = 'top';\r\n if (style.alignItems === 'center') valign = 'middle';\r\n if (style.justifyContent === 'center' && style.display.includes('flex')) align = 'center';\r\n\r\n const pt = parseFloat(style.paddingTop) || 0;\r\n const pb = parseFloat(style.paddingBottom) || 0;\r\n if (Math.abs(pt - pb) < 2 && bgColorObj.hex) valign = 'middle';\r\n\r\n let padding = getPadding(style, config.scale);\r\n if (align === 'center' && valign === 'middle') padding = [0, 0, 0, 0];\r\n\r\n textPayload = { text: textParts, align, valign, inset: padding };\r\n }\r\n }\r\n\r\n if (hasGradient || (softEdge && bgColorObj.hex && !isImageWrapper)) {\r\n let bgData = null;\r\n let padIn = 0;\r\n if (softEdge) {\r\n const svgInfo = generateBlurredSVG(\r\n widthPx,\r\n heightPx,\r\n bgColorObj.hex,\r\n borderRadiusValue,\r\n softEdge\r\n );\r\n bgData = svgInfo.data;\r\n padIn = svgInfo.padding * PX_TO_INCH * config.scale;\r\n } else {\r\n bgData = generateGradientSVG(\r\n widthPx,\r\n heightPx,\r\n style.backgroundImage,\r\n borderRadiusValue,\r\n hasBorder ? { color: borderColorObj.hex, width: borderWidth } : null\r\n );\r\n }\r\n\r\n if (bgData) {\r\n items.push({\r\n type: 'image',\r\n zIndex,\r\n domOrder,\r\n options: {\r\n data: bgData,\r\n x: x - padIn,\r\n y: y - padIn,\r\n w: w + padIn * 2,\r\n h: h + padIn * 2,\r\n rotate: rotation,\r\n },\r\n });\r\n }\r\n\r\n if (textPayload) {\r\n textPayload.text[0].options.fontSize = Math.floor(textPayload.text[0]?.options?.fontSize)|| 12;\r\n items.push({\r\n type: 'text',\r\n zIndex: zIndex + 1,\r\n domOrder,\r\n textParts: textPayload.text,\r\n options: {\r\n x,\r\n y,\r\n w,\r\n h,\r\n align: textPayload.align,\r\n valign: textPayload.valign,\r\n inset: textPayload.inset,\r\n rotate: rotation,\r\n margin: 0,\r\n wrap: true,\r\n autoFit: false,\r\n },\r\n });\r\n }\r\n if (hasCompositeBorder) {\r\n const borderItems = createCompositeBorderItems(\r\n borderInfo.sides,\r\n x,\r\n y,\r\n w,\r\n h,\r\n config.scale,\r\n zIndex,\r\n domOrder\r\n );\r\n items.push(...borderItems);\r\n }\r\n } else if (\r\n (bgColorObj.hex && !isImageWrapper) ||\r\n hasUniformBorder ||\r\n hasCompositeBorder ||\r\n hasShadow ||\r\n textPayload\r\n ) {\r\n const finalAlpha = safeOpacity * bgColorObj.opacity;\r\n const transparency = (1 - finalAlpha) * 100;\r\n const useSolidFill = bgColorObj.hex && !isImageWrapper;\r\n\r\n if (hasPartialBorderRadius && useSolidFill && !textPayload) {\r\n const shapeSvg = generateCustomShapeSVG(\r\n widthPx,\r\n heightPx,\r\n bgColorObj.hex,\r\n bgColorObj.opacity,\r\n {\r\n tl: parseFloat(style.borderTopLeftRadius) || 0,\r\n tr: parseFloat(style.borderTopRightRadius) || 0,\r\n br: parseFloat(style.borderBottomRightRadius) || 0,\r\n bl: parseFloat(style.borderBottomLeftRadius) || 0,\r\n }\r\n );\r\n\r\n items.push({\r\n type: 'image',\r\n zIndex,\r\n domOrder,\r\n options: { data: shapeSvg, x, y, w, h, rotate: rotation },\r\n });\r\n } else {\r\n const shapeOpts = {\r\n x,\r\n y,\r\n w,\r\n h,\r\n rotate: rotation,\r\n fill: useSolidFill\r\n ? { color: bgColorObj.hex, transparency: transparency }\r\n : { type: 'none' },\r\n line: hasUniformBorder ? borderInfo.options : null,\r\n };\r\n\r\n if (hasShadow) shapeOpts.shadow = getVisibleShadow(shadowStr, config.scale);\r\n\r\n // 1. Calculate dimensions first\r\n const minDimension = Math.min(widthPx, heightPx);\r\n\r\n let rawRadius = parseFloat(style.borderRadius) || 0;\r\n const isPercentage = style.borderRadius && style.borderRadius.toString().includes('%');\r\n\r\n // 2. Normalize radius to pixels\r\n let radiusPx = rawRadius;\r\n if (isPercentage) {\r\n radiusPx = (rawRadius / 100) * minDimension;\r\n }\r\n\r\n let shapeType = pptx.ShapeType.rect;\r\n\r\n // 3. Determine Shape Logic\r\n const isSquare = Math.abs(widthPx - heightPx) < 1;\r\n const isFullyRound = radiusPx >= minDimension / 2;\r\n\r\n // CASE A: It is an Ellipse if:\r\n // 1. It is explicitly \"50%\" (standard CSS way to make ovals/circles)\r\n // 2. OR it is a perfect square and fully rounded (a circle)\r\n if (isFullyRound && (isPercentage || isSquare)) {\r\n shapeType = pptx.ShapeType.ellipse;\r\n }\r\n // CASE B: It is a Rounded Rectangle (including \"Pill\" shapes)\r\n else if (radiusPx > 0) {\r\n shapeType = pptx.ShapeType.roundRect;\r\n let r = radiusPx / minDimension;\r\n if (r > 0.5) r = 0.5;\r\n if (minDimension < 100) r = r * 0.25; // Small size adjustment for small shapes\r\n\r\n shapeOpts.rectRadius = r;\r\n }\r\n\r\n if (textPayload) {\r\n textPayload.text[0].options.fontSize = Math.floor(textPayload.text[0]?.options?.fontSize)|| 12;\r\n const textOptions = {\r\n shape: shapeType,\r\n ...shapeOpts,\r\n rotate: rotation,\r\n align: textPayload.align,\r\n valign: textPayload.valign,\r\n inset: textPayload.inset,\r\n margin: 0,\r\n wrap: true,\r\n autoFit: false,\r\n };\r\n items.push({\r\n type: 'text',\r\n zIndex,\r\n domOrder,\r\n textParts: textPayload.text,\r\n options: textOptions,\r\n });\r\n } else if (!hasPartialBorderRadius) {\r\n items.push({\r\n type: 'shape',\r\n zIndex,\r\n domOrder,\r\n shapeType,\r\n options: shapeOpts,\r\n });\r\n }\r\n }\r\n\r\n if (hasCompositeBorder) {\r\n const borderSvgData = generateCompositeBorderSVG(\r\n widthPx,\r\n heightPx,\r\n borderRadiusValue,\r\n borderInfo.sides\r\n );\r\n if (borderSvgData) {\r\n items.push({\r\n type: 'image',\r\n zIndex: zIndex + 1,\r\n domOrder,\r\n options: { data: borderSvgData, x, y, w, h, rotate: rotation },\r\n });\r\n }\r\n }\r\n }\r\n\r\n return { items, stopRecursion: !!textPayload };\r\n}\r\n\r\nfunction createCompositeBorderItems(sides, x, y, w, h, scale, zIndex, domOrder) {\r\n const items = [];\r\n const pxToInch = 1 / 96;\r\n const common = { zIndex: zIndex + 1, domOrder, shapeType: 'rect' };\r\n\r\n if (sides.top.width > 0)\r\n items.push({\r\n ...common,\r\n options: { x, y, w, h: sides.top.width * pxToInch * scale, fill: { color: sides.top.color } },\r\n });\r\n if (sides.right.width > 0)\r\n items.push({\r\n ...common,\r\n options: {\r\n x: x + w - sides.right.width * pxToInch * scale,\r\n y,\r\n w: sides.right.width * pxToInch * scale,\r\n h,\r\n fill: { color: sides.right.color },\r\n },\r\n });\r\n if (sides.bottom.width > 0)\r\n items.push({\r\n ...common,\r\n options: {\r\n x,\r\n y: y + h - sides.bottom.width * pxToInch * scale,\r\n w,\r\n h: sides.bottom.width * pxToInch * scale,\r\n fill: { color: sides.bottom.color },\r\n },\r\n });\r\n if (sides.left.width > 0)\r\n items.push({\r\n ...common,\r\n options: {\r\n x,\r\n y,\r\n w: sides.left.width * pxToInch * scale,\r\n h,\r\n fill: { color: sides.left.color },\r\n },\r\n });\r\n\r\n return items;\r\n}\r\n"],"names":["pako","Font","opentype","PptxGenJSImport","JSZip","html2canvas"],"mappings":"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"}
|